feat: Add Expression definition and parsing logic.

This commit is contained in:
Jooris Hadeler
2026-01-12 16:47:52 +01:00
parent 0599a5fb98
commit 2170be5204
4 changed files with 269 additions and 15 deletions

View File

@@ -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
}
}