diff --git a/lexer/src/chars.rs b/lexer/src/chars.rs index 8aa2e2c..70be6c7 100644 --- a/lexer/src/chars.rs +++ b/lexer/src/chars.rs @@ -33,7 +33,7 @@ impl Lexable for char { } fn is_identifier_initial(&self) -> bool { - self.is_alphabetic() || self.is_special_initial() + self.is_alphabetic() || self.is_special_initial() || self.is_explicit_sign() } fn is_identifier_subsequent(&self) -> bool { diff --git a/lexer/tests/expressions.rs b/lexer/tests/expressions.rs new file mode 100644 index 0000000..1ee9712 --- /dev/null +++ b/lexer/tests/expressions.rs @@ -0,0 +1,29 @@ +/* lexer/tests/expressions.rs + * Eryn Wells + */ + +extern crate sibillexer; + +use sibillexer::{Lexer, Lex, Token}; + +#[test] +fn addition() { + let mut lex = Lexer::new("(+ 3 4)".chars()); + assert_eq!(lex.next(), Some(Ok(Lex::new(Token::LeftParen, "(", 0, 0)))); + assert_eq!(lex.next(), Some(Ok(Lex::new(Token::Id, "+", 0, 1)))); + assert_eq!(lex.next(), Some(Ok(Lex::new(Token::Num(3), "3", 0, 3)))); + assert_eq!(lex.next(), Some(Ok(Lex::new(Token::Num(4), "4", 0, 5)))); + assert_eq!(lex.next(), Some(Ok(Lex::new(Token::RightParen, ")", 0, 6)))); + assert_eq!(lex.next(), None); +} + +#[test] +fn subtraction() { + let mut lex = Lexer::new("(- 3 4)".chars()); + assert_eq!(lex.next(), Some(Ok(Lex::new(Token::LeftParen, "(", 0, 0)))); + assert_eq!(lex.next(), Some(Ok(Lex::new(Token::Id, "-", 0, 1)))); + assert_eq!(lex.next(), Some(Ok(Lex::new(Token::Num(3), "3", 0, 3)))); + assert_eq!(lex.next(), Some(Ok(Lex::new(Token::Num(4), "4", 0, 5)))); + assert_eq!(lex.next(), Some(Ok(Lex::new(Token::RightParen, ")", 0, 6)))); + assert_eq!(lex.next(), None); +}