Add support for negative numbers

This commit is contained in:
Sameer Rahmani 2020-06-14 21:23:39 +01:00
parent 47bf80e834
commit 5181c84696
2 changed files with 25 additions and 3 deletions

View File

@ -7,7 +7,7 @@ pub mod collections;
fn main() {
let input = String::from("(println \">>>>>\" (+ 2 3))");
let input = String::from("(println \">>>>>\" '(+ 2 -3))");
println!("{:?}",
reader::read_string(&input).unwrap());

View File

@ -185,8 +185,14 @@ impl ExprReader {
}
fn read_number<T: Read>(&mut self, reader: &mut BufReader<T>, neg: bool) -> ReadResult {
let mut is_double = false;
let mut string = "".to_string();
let mut string = (if neg {
"-"
} else {
""
}).to_string();
loop {
match self.get_char(reader, false) {
Some(e) if e == '.' && is_double => return Err("A double with more that one '.' ???".to_string()),
@ -216,7 +222,23 @@ impl ExprReader {
c if c.is_digit(10) => self.read_number(reader, false),
// ':' => self.read_keyword(reader),
// '-' => {
'-' => {
// Read the '-' char
let _ = self.get_char(reader, true);
match self.peek_char(reader, true) {
Some(ch) => match ch {
ch if ch.is_digit(10) => self.read_number(reader, true),
_ => {
self.unget_char(c);
self._read_symbol(reader)
}
},
None => {
self.unget_char(c);
self._read_symbol(reader)
}
}
}
// Neg number
// }
_ => self._read_symbol(reader)