Finish refactoring lexer
This commit is contained in:
parent
27fa3ef7cf
commit
c343b82873
@ -369,6 +369,12 @@ impl<'src> Lexer<'src> {
|
|||||||
return Ok((Token::MinusEqual, Span(start_position, self.position)));
|
return Ok((Token::MinusEqual, Span(start_position, self.position)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if let Some('>') = self.peek_char() {
|
||||||
|
self.next_char();
|
||||||
|
|
||||||
|
return Ok((Token::ArrowThin, Span(start_position, self.position)));
|
||||||
|
}
|
||||||
|
|
||||||
if self.peek_chars(8) == "Infinity" {
|
if self.peek_chars(8) == "Infinity" {
|
||||||
self.position += 8;
|
self.position += 8;
|
||||||
|
|
||||||
@ -581,6 +587,44 @@ impl<'src> Lexer<'src> {
|
|||||||
|
|
||||||
Ok((Token::RightBrace, Span(start_pos, self.position)))
|
Ok((Token::RightBrace, Span(start_pos, self.position)))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn lex_semicolon(&mut self) -> Result<(Token<'src>, Span), LexError> {
|
||||||
|
let start_pos = self.position;
|
||||||
|
|
||||||
|
self.next_char();
|
||||||
|
|
||||||
|
Ok((Token::Semicolon, Span(start_pos, self.position)))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn lex_colon(&mut self) -> Result<(Token<'src>, Span), LexError> {
|
||||||
|
let start_pos = self.position;
|
||||||
|
|
||||||
|
self.next_char();
|
||||||
|
|
||||||
|
Ok((Token::Colon, Span(start_pos, self.position)))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn lex_comma(&mut self) -> Result<(Token<'src>, Span), LexError> {
|
||||||
|
let start_pos = self.position;
|
||||||
|
|
||||||
|
self.next_char();
|
||||||
|
|
||||||
|
Ok((Token::Comma, Span(start_pos, self.position)))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn lex_dot(&mut self) -> Result<(Token<'src>, Span), LexError> {
|
||||||
|
let start_pos = self.position;
|
||||||
|
|
||||||
|
self.next_char();
|
||||||
|
|
||||||
|
if let Some('.') = self.peek_char() {
|
||||||
|
self.next_char();
|
||||||
|
|
||||||
|
Ok((Token::DoubleDot, Span(start_pos, self.position)))
|
||||||
|
} else {
|
||||||
|
Ok((Token::Dot, Span(start_pos, self.position)))
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type LexerFn<'src> = fn(&mut Lexer<'src>) -> Result<(Token<'src>, Span), LexError>;
|
type LexerFn<'src> = fn(&mut Lexer<'src>) -> Result<(Token<'src>, Span), LexError>;
|
||||||
@ -655,6 +699,18 @@ impl<'src> From<&char> for LexRule<'src> {
|
|||||||
'}' => LexRule {
|
'}' => LexRule {
|
||||||
lexer: Lexer::lex_right_brace,
|
lexer: Lexer::lex_right_brace,
|
||||||
},
|
},
|
||||||
|
';' => LexRule {
|
||||||
|
lexer: Lexer::lex_semicolon,
|
||||||
|
},
|
||||||
|
':' => LexRule {
|
||||||
|
lexer: Lexer::lex_colon,
|
||||||
|
},
|
||||||
|
',' => LexRule {
|
||||||
|
lexer: Lexer::lex_comma,
|
||||||
|
},
|
||||||
|
'.' => LexRule {
|
||||||
|
lexer: Lexer::lex_dot,
|
||||||
|
},
|
||||||
_ => LexRule {
|
_ => LexRule {
|
||||||
lexer: Lexer::lex_unexpected,
|
lexer: Lexer::lex_unexpected,
|
||||||
},
|
},
|
||||||
|
Loading…
Reference in New Issue
Block a user