From f7c28c673265f03db8472c813198f9fe447f3120 Mon Sep 17 00:00:00 2001 From: Eryn Wells Date: Sat, 24 Dec 2016 09:07:38 -0700 Subject: [PATCH] Add single character identifiers --- src/lexer/char.rs | 9 +++++++-- src/lexer/charset.rs | 4 ++++ src/lexer/mod.rs | 3 +++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/lexer/char.rs b/src/lexer/char.rs index 67534f3..3ef608f 100644 --- a/src/lexer/char.rs +++ b/src/lexer/char.rs @@ -9,15 +9,16 @@ pub trait Lexable { fn is_right_paren(&self) -> bool; fn is_identifier_initial(&self) -> bool; fn is_identifier_subsequent(&self) -> bool; + fn is_identifier_single(&self) -> bool; } impl Lexable for char { fn is_left_paren(&self) -> bool { - self == &'(' + *self == '(' } fn is_right_paren(&self) -> bool { - self == &')' + *self == ')' } fn is_identifier_initial(&self) -> bool { @@ -27,5 +28,9 @@ impl Lexable for char { fn is_identifier_subsequent(&self) -> bool { charset::identifier_subsequents().contains(&self) } + + fn is_identifier_single(&self) -> bool { + charset::identifier_singles().contains(&self) + } } diff --git a/src/lexer/charset.rs b/src/lexer/charset.rs index 63aaaaf..eb7e7cb 100644 --- a/src/lexer/charset.rs +++ b/src/lexer/charset.rs @@ -41,3 +41,7 @@ pub fn identifier_subsequents() -> CharSet { subsequents.extend(extras.iter()); subsequents } + +pub fn identifier_singles() -> CharSet { + CharSet::from_iter("+-".chars()) +} diff --git a/src/lexer/mod.rs b/src/lexer/mod.rs index 5c61537..e64f5fa 100644 --- a/src/lexer/mod.rs +++ b/src/lexer/mod.rs @@ -76,6 +76,9 @@ impl Lexer { else if c.is_right_paren() { *token = Some(Token::new(Kind::RightParen, c.to_string())); } + else if c.is_identifier_single() { + *token = Some(Token::new(Kind::Identifier, c.to_string())); + } else if c.is_identifier_initial() { self.state = State::Identifier; self.advance();