[fine] A concrete syntax tree parser
Where in the world am I going with this?
This commit is contained in:
parent
5968fb1f6a
commit
4fe3137027
2 changed files with 507 additions and 11 deletions
|
|
@ -17,6 +17,9 @@ pub enum TokenKind {
|
|||
Slash,
|
||||
Star,
|
||||
|
||||
Arrow,
|
||||
Colon,
|
||||
|
||||
Bang,
|
||||
BangEqual,
|
||||
Equal,
|
||||
|
|
@ -414,8 +417,15 @@ impl<'a> Tokens<'a> {
|
|||
')' => self.token(pos, TokenKind::RightParen),
|
||||
',' => self.token(pos, TokenKind::Comma),
|
||||
'.' => self.token(pos, TokenKind::Dot),
|
||||
'-' => self.token(pos, TokenKind::Minus),
|
||||
'-' => {
|
||||
if self.matches('>') {
|
||||
self.token(pos, TokenKind::Arrow)
|
||||
} else {
|
||||
self.token(pos, TokenKind::Minus)
|
||||
}
|
||||
}
|
||||
'+' => self.token(pos, TokenKind::Plus),
|
||||
':' => self.token(pos, TokenKind::Colon),
|
||||
';' => self.token(pos, TokenKind::Semicolon),
|
||||
'/' => self.token(pos, TokenKind::Slash),
|
||||
'*' => self.token(pos, TokenKind::Star),
|
||||
|
|
@ -555,7 +565,7 @@ mod tests {
|
|||
|
||||
test_tokens!(
|
||||
symbols,
|
||||
"{ } ( ) [ ] . ! != < <= > >= = == , - + * / ;",
|
||||
"{ } ( ) [ ] . ! != < <= > >= = == , - -> + * / ; :",
|
||||
(0, LeftBrace, "{"),
|
||||
(2, RightBrace, "}"),
|
||||
(4, LeftParen, "("),
|
||||
|
|
@ -573,9 +583,11 @@ mod tests {
|
|||
(31, EqualEqual, "=="),
|
||||
(34, Comma, ","),
|
||||
(36, Minus, "-"),
|
||||
(38, Plus, "+"),
|
||||
(40, Star, "*"),
|
||||
(42, Slash, "/"),
|
||||
(44, Semicolon, ";")
|
||||
(38, Arrow, "->"),
|
||||
(41, Plus, "+"),
|
||||
(43, Star, "*"),
|
||||
(45, Slash, "/"),
|
||||
(47, Semicolon, ";"),
|
||||
(49, Colon, ":")
|
||||
);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue