Skip to content

Commit 7b0543a

Browse files
Feat: Implemented the missing operators.
1 parent ae4358f commit 7b0543a

1 file changed

Lines changed: 17 additions & 6 deletions

File tree

compiler/src/modules/parser.rs

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,12 @@ pub enum OpCode {
5050
LoadConst, LoadName, StoreName, Call, PopTop, ReturnValue,
5151
BuildString, CallPrint, CallLen, FormatValue, CallAbs, Minus,
5252
CallStr, CallInt, CallRange, Phi, CallChr, CallType,
53+
MakeFunction, Add, Sub, Mul, Div, Eq,
5354
CallFloat, CallBool, CallRound, CallMin, CallMax, CallSum,
5455
CallSorted, CallEnumerate, CallZip, CallList, CallTuple, CallDict,
55-
CallIsInstance, CallSet, CallInput, CallOrd, BuildDict, BuildList,
56-
MakeFunction, Add, Sub, Mul, Div
56+
CallIsInstance, CallSet, CallInput, CallOrd, BuildDict, BuildList,
57+
NotEq, Lt, Gt, LtEq, GtEq, And,
58+
Or, Not
5759
}
5860

5961
#[derive(Debug)] pub struct Instruction { pub opcode: OpCode, pub operand: u16 }
@@ -188,6 +190,7 @@ impl<'src, I: Iterator<Item = Token>> Parser<'src, I> {
188190
TokenType::None => self.emit_const(Value::None),
189191
TokenType::FstringStart => self.fstring(),
190192
TokenType::Minus => { self.expr(); self.chunk.emit(OpCode::Minus, 0); },
193+
TokenType::Not => { self.expr(); self.chunk.emit(OpCode::Not, 0); }
191194
TokenType::Lbrace => self.dict_literal(),
192195
TokenType::Lsqb => self.list_literal(),
193196
_ => {}
@@ -197,10 +200,18 @@ impl<'src, I: Iterator<Item = Token>> Parser<'src, I> {
197200

198201
fn binary_op(&mut self) {
199202
match self.peek() {
200-
Some(TokenType::Plus) => { self.advance(); self.expr(); self.chunk.emit(OpCode::Add, 0); }
201-
Some(TokenType::Minus) => { self.advance(); self.expr(); self.chunk.emit(OpCode::Sub, 0); }
202-
Some(TokenType::Star) => { self.advance(); self.expr(); self.chunk.emit(OpCode::Mul, 0); }
203-
Some(TokenType::Slash) => { self.advance(); self.expr(); self.chunk.emit(OpCode::Div, 0); }
203+
Some(TokenType::Plus) => { self.advance(); self.expr(); self.chunk.emit(OpCode::Add, 0); }
204+
Some(TokenType::Minus) => { self.advance(); self.expr(); self.chunk.emit(OpCode::Sub, 0); }
205+
Some(TokenType::Star) => { self.advance(); self.expr(); self.chunk.emit(OpCode::Mul, 0); }
206+
Some(TokenType::Slash) => { self.advance(); self.expr(); self.chunk.emit(OpCode::Div, 0); }
207+
Some(TokenType::EqEqual) => { self.advance(); self.expr(); self.chunk.emit(OpCode::Eq, 0); }
208+
Some(TokenType::NotEqual) => { self.advance(); self.expr(); self.chunk.emit(OpCode::NotEq, 0); }
209+
Some(TokenType::Less) => { self.advance(); self.expr(); self.chunk.emit(OpCode::Lt, 0); }
210+
Some(TokenType::Greater) => { self.advance(); self.expr(); self.chunk.emit(OpCode::Gt, 0); }
211+
Some(TokenType::LessEqual) => { self.advance(); self.expr(); self.chunk.emit(OpCode::LtEq, 0); }
212+
Some(TokenType::GreaterEqual) => { self.advance(); self.expr(); self.chunk.emit(OpCode::GtEq, 0); }
213+
Some(TokenType::And) => { self.advance(); self.expr(); self.chunk.emit(OpCode::And, 0); }
214+
Some(TokenType::Or) => { self.advance(); self.expr(); self.chunk.emit(OpCode::Or, 0); }
204215
_ => {}
205216
}
206217
}

0 commit comments

Comments
 (0)