Add logical and comparison expressions

This commit is contained in:
2026-06-17 23:38:44 +09:00
parent 3f7dd7c692
commit 2fe54bda62
18 changed files with 6627 additions and 4620 deletions
+31 -1
View File
@@ -34,8 +34,13 @@ pub enum TokenKind {
Dot,
Colon,
Equal,
EqualEqual,
Bang,
BangEqual,
Arrow,
Amp,
AmpAmp,
PipePipe,
Plus,
Minus,
Star,
@@ -142,7 +147,22 @@ impl<'a> Lexer<'a> {
}
b'&' => {
self.pos += 1;
TokenKind::Amp
if self.consume(b'&') {
TokenKind::AmpAmp
} else {
TokenKind::Amp
}
}
b'|' => {
self.pos += 1;
if self.consume(b'|') {
TokenKind::PipePipe
} else {
return Err(Diagnostic::syntax(
self.span(start, self.pos),
"expected '|' after '|'",
));
}
}
b'+' => {
self.pos += 1;
@@ -160,10 +180,20 @@ impl<'a> Lexer<'a> {
self.pos += 1;
if self.consume(b'>') {
TokenKind::Arrow
} else if self.consume(b'=') {
TokenKind::EqualEqual
} else {
TokenKind::Equal
}
}
b'!' => {
self.pos += 1;
if self.consume(b'=') {
TokenKind::BangEqual
} else {
TokenKind::Bang
}
}
b'>' => {
self.pos += 1;
if self.consume(b'=') {