Add support for negative numbers
This commit is contained in:
parent
47bf80e834
commit
5181c84696
|
@ -7,7 +7,7 @@ pub mod collections;
|
||||||
|
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let input = String::from("(println \">>>>>\" (+ 2 3))");
|
let input = String::from("(println \">>>>>\" '(+ 2 -3))");
|
||||||
|
|
||||||
println!("{:?}",
|
println!("{:?}",
|
||||||
reader::read_string(&input).unwrap());
|
reader::read_string(&input).unwrap());
|
||||||
|
|
|
@ -185,8 +185,14 @@ impl ExprReader {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn read_number<T: Read>(&mut self, reader: &mut BufReader<T>, neg: bool) -> ReadResult {
|
fn read_number<T: Read>(&mut self, reader: &mut BufReader<T>, neg: bool) -> ReadResult {
|
||||||
|
|
||||||
let mut is_double = false;
|
let mut is_double = false;
|
||||||
let mut string = "".to_string();
|
let mut string = (if neg {
|
||||||
|
"-"
|
||||||
|
} else {
|
||||||
|
""
|
||||||
|
}).to_string();
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
match self.get_char(reader, false) {
|
match self.get_char(reader, false) {
|
||||||
Some(e) if e == '.' && is_double => return Err("A double with more that one '.' ???".to_string()),
|
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),
|
c if c.is_digit(10) => self.read_number(reader, false),
|
||||||
|
|
||||||
// ':' => self.read_keyword(reader),
|
// ':' => 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
|
// Neg number
|
||||||
// }
|
// }
|
||||||
_ => self._read_symbol(reader)
|
_ => self._read_symbol(reader)
|
||||||
|
|
Loading…
Reference in New Issue