[lexer] Identify delimiters and emit numbers
This commit is contained in:
		
							parent
							
								
									853312ce67
								
							
						
					
					
						commit
						569fe82c1a
					
				
					 2 changed files with 9 additions and 5 deletions
				
			
		|  | @ -2,9 +2,10 @@ | |||
|  * Eryn Wells <eryn@erynwells.me> | ||||
|  */ | ||||
| 
 | ||||
| use chars::Lexable; | ||||
| use error::Error; | ||||
| use states::{State, StateResult}; | ||||
| use states::number::{Builder, Radix, Exact}; | ||||
| use states::{State, StateResult, Resume}; | ||||
| use states::number::{Builder, Radix}; | ||||
| use token::Token; | ||||
| 
 | ||||
| #[derive(Debug)] pub struct Digit(Builder); | ||||
|  | @ -31,6 +32,8 @@ impl State for Digit { | |||
|     fn lex(&mut self, c: char) -> StateResult { | ||||
|         if self.0.push_digit(c).is_ok() { | ||||
|             StateResult::Continue | ||||
|         } else if c.is_identifier_delimiter() { | ||||
|             StateResult::emit(Token::Num(self.0.resolve()), Resume::Here) | ||||
|         } else { | ||||
|             StateResult::fail(Error::invalid_char(c)) | ||||
|         } | ||||
|  |  | |||
|  | @ -75,8 +75,9 @@ fn bool_with_spaces() { | |||
| 
 | ||||
| #[test] | ||||
| fn integer() { | ||||
|     let expected_lex = Lex::new(Token::Num(23), "23", 0, 0); | ||||
|     let mut lex = Lexer::new("23".chars()); | ||||
|     assert_eq!(lex.next(), Some(Ok(expected_lex))); | ||||
|     let mut lex = Lexer::new("23 42".chars()); | ||||
|     assert_eq!(lex.next(), Some(Ok(Lex::new(Token::Num(23), "23", 0, 0)))); | ||||
|     // TODO: Fix this once issue #12 is fixed.
 | ||||
|     assert_eq!(lex.next(), Some(Ok(Lex::new(Token::Num(42), " 42", 0, 0)))); | ||||
|     assert_eq!(lex.next(), None); | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue