aboutsummaryrefslogtreecommitdiffstats
path: root/src/compiler.rs
diff options
context:
space:
mode:
authorGustav Sörnäs <gustav@sornas.net>2021-01-09 19:08:39 +0100
committerGustav Sörnäs <gustav@sornas.net>2021-01-09 19:08:39 +0100
commit011e7b31e63864a83627c79c1b2d10d7dc0662b0 (patch)
tree6f03f09d1e0450cb2a275cb3870ae2dfdc97338b /src/compiler.rs
parent805e57569380b4ccadb006420ca24080f3912656 (diff)
downloadsylt-011e7b31e63864a83627c79c1b2d10d7dc0662b0.tar.gz
equals
Diffstat (limited to 'src/compiler.rs')
-rw-r--r--src/compiler.rs15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/compiler.rs b/src/compiler.rs
index ca4fcd3..d3d4c2c 100644
--- a/src/compiler.rs
+++ b/src/compiler.rs
@@ -6,9 +6,11 @@ struct Compiler {
tokens: TokenStream,
}
+//TODO rustify
const PREC_NO: u64 = 0;
-const PREC_TERM: u64 = 1;
-const PREC_FACTOR: u64 = 2;
+const PREC_COMP: u64 = 1;
+const PREC_TERM: u64 = 2;
+const PREC_FACTOR: u64 = 3;
impl Compiler {
pub fn new(tokens: TokenStream) -> Self {
@@ -45,6 +47,8 @@ impl Compiler {
Token::Star => PREC_FACTOR,
Token::Slash => PREC_FACTOR,
+ Token::EqualEqual => PREC_COMP,
+
_ => PREC_NO,
}
}
@@ -71,6 +75,8 @@ impl Compiler {
Token::Slash => self.binary(block),
Token::Star => self.binary(block),
+ Token::EqualEqual => self.binary(block),
+
_ => { return false; },
}
return true;
@@ -87,13 +93,13 @@ impl Compiler {
fn grouping(&mut self, block: &mut Block) {
if Token::LeftParen != self.eat() {
- self.error("Expected left parentasis around expression.");
+ self.error("Expected left parenthesis around expression.");
}
self.expression(block);
if Token::RightParen != self.eat() {
- self.error("Expected closing parentasis after expression.");
+ self.error("Expected closing parenthesis after expression.");
}
}
@@ -115,6 +121,7 @@ impl Compiler {
Token::Minus => Op::Sub,
Token::Star => Op::Mul,
Token::Slash => Op::Div,
+ Token::EqualEqual => Op::CompEq,
_ => { self.error("Illegal operator"); }
};
block.add(op);