From 05c6f24c0b371a465a8735cfd1ac17c0394363cb Mon Sep 17 00:00:00 2001 From: Akshay Date: Wed, 24 Mar 2021 13:05:05 +0530 Subject: allow minus operator, improve display for exprs --- src/lisp/lex.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src/lisp/lex.rs') diff --git a/src/lisp/lex.rs b/src/lisp/lex.rs index 30f49fa..a7b9586 100644 --- a/src/lisp/lex.rs +++ b/src/lisp/lex.rs @@ -115,11 +115,13 @@ impl<'a> Lexer<'a> { fn parse_number<'a>(mut input: &'a str) -> Result<(usize, Token<'a>), LispError> { let mut dot = false; + let mut minus = false; let mut size = 0; let mut chars = input.chars(); if let Some(v) = chars.next() { if v == '-' { + minus = true; size += 1; input = &input[1..]; } else if v.is_digit(10) { @@ -143,7 +145,10 @@ fn parse_number<'a>(mut input: &'a str) -> Result<(usize, Token<'a>), LispError> return Err(LispError::ParseError); } } - let tok = if dot { + + let tok = if size == 1 && minus { + Token::Name("-") + } else if dot { Token::Float(&input[..size]) } else { Token::Integer(&input[..size]) -- cgit v1.2.3