feat: Add Expression definition and parsing logic.
This commit is contained in:
29
src/token.rs
29
src/token.rs
@@ -47,6 +47,10 @@ pub enum TokenKind {
|
||||
KwBreak,
|
||||
KwReturn,
|
||||
|
||||
KwNot,
|
||||
KwAnd,
|
||||
KwOr,
|
||||
|
||||
Identifier,
|
||||
Integer,
|
||||
Boolean,
|
||||
@@ -59,7 +63,7 @@ pub enum TokenKind {
|
||||
Ampersand,
|
||||
Pipe,
|
||||
Caret,
|
||||
Bang,
|
||||
Tilde,
|
||||
|
||||
Equal,
|
||||
Unequal,
|
||||
@@ -184,6 +188,10 @@ impl<'src> Tokenizer<'src> {
|
||||
"break" => TokenKind::KwBreak,
|
||||
"return" => TokenKind::KwReturn,
|
||||
|
||||
"or" => TokenKind::KwOr,
|
||||
"and" => TokenKind::KwAnd,
|
||||
"not" => TokenKind::KwNot,
|
||||
|
||||
_ => TokenKind::Identifier,
|
||||
};
|
||||
|
||||
@@ -223,6 +231,7 @@ impl<'src> Tokenizer<'src> {
|
||||
'&' => single!(TokenKind::Ampersand),
|
||||
'|' => single!(TokenKind::Pipe),
|
||||
'^' => single!(TokenKind::Caret),
|
||||
'~' => single!(TokenKind::Tilde),
|
||||
|
||||
'.' => single!(TokenKind::Dot),
|
||||
',' => single!(TokenKind::Comma),
|
||||
@@ -230,42 +239,42 @@ impl<'src> Tokenizer<'src> {
|
||||
';' => single!(TokenKind::Semicolon),
|
||||
|
||||
'=' => {
|
||||
self.consume();
|
||||
|
||||
if self.peek() == Some('=') {
|
||||
self.consume();
|
||||
self.consume();
|
||||
TokenKind::Equal
|
||||
} else {
|
||||
self.consume();
|
||||
TokenKind::Assign
|
||||
}
|
||||
}
|
||||
'!' => {
|
||||
self.consume();
|
||||
|
||||
if self.peek() == Some('=') {
|
||||
self.consume();
|
||||
self.consume();
|
||||
TokenKind::Unequal
|
||||
} else {
|
||||
self.consume();
|
||||
TokenKind::Bang
|
||||
TokenKind::InvalidCharacter
|
||||
}
|
||||
}
|
||||
'<' => {
|
||||
self.consume();
|
||||
|
||||
if self.peek() == Some('=') {
|
||||
self.consume();
|
||||
self.consume();
|
||||
TokenKind::LessThanOrEqual
|
||||
} else {
|
||||
self.consume();
|
||||
TokenKind::LessThan
|
||||
}
|
||||
}
|
||||
'>' => {
|
||||
self.consume();
|
||||
|
||||
if self.peek() == Some('=') {
|
||||
self.consume();
|
||||
self.consume();
|
||||
TokenKind::GreaterThanOrEqual
|
||||
} else {
|
||||
self.consume();
|
||||
TokenKind::GreaterThan
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user