diff --git a/src/parser/ast.rs b/src/parser/ast.rs index af4f8b8..7fd5c76 100644 --- a/src/parser/ast.rs +++ b/src/parser/ast.rs @@ -18,6 +18,13 @@ pub enum BinaryOp { Minus, Multiply, Divide, + Modulo, + Equal, + NotEqual, + LessThan, + GreaterThan, + LessThanOrEqual, + GreaterThanOrEqual, } #[derive(Debug, Clone, Serialize)] diff --git a/src/parser/grammar.pest b/src/parser/grammar.pest index 08824db..7094766 100644 --- a/src/parser/grammar.pest +++ b/src/parser/grammar.pest @@ -105,7 +105,7 @@ field_px = { "." ~ identifier } call_px = { "(" ~ (expr ~ ("," ~ expr)*)? ~ ")" } index_px = { "[" ~ expr ~ "]" } binary_px = { bin_op ~ expr } -bin_op = { "+" | "-" | "*" | "/" | "%" } +bin_op = { "+" | "-" | "*" | "/" | "%" | "==" | "!=" | "<" | ">" | "<=" | ">=" } expr = { primary ~ postfix* diff --git a/src/parser/mod.rs b/src/parser/mod.rs index 6b14585..d98087d 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -341,6 +341,14 @@ impl Postfix { "-" => BinaryOp::Minus, "*" => BinaryOp::Multiply, "/" => BinaryOp::Divide, + "%" => BinaryOp::Modulo, + "==" => BinaryOp::Equal, + "!=" => BinaryOp::NotEqual, + "<" => BinaryOp::LessThan, + ">" => BinaryOp::GreaterThan, + "<=" => BinaryOp::LessThanOrEqual, + ">=" => BinaryOp::GreaterThanOrEqual, + _ => { unimplemented!("Binary operator not implemented yet: {}", op_pair.as_str()) } diff --git a/test/src/main.ms b/test/src/main.ms index 2e358b8..755f17d 100644 --- a/test/src/main.ms +++ b/test/src/main.ms @@ -1,3 +1,17 @@ function add(a: int, b: int): int { - itm.a + itm.b(); + let sum = 0; + + for (let i = 0; i < 10; i = i + 1) { + if (i == 5) { + continue; + } + + sum = sum + i; + } + + if (sum > 20) { + return sum; + } else { + return 0; + } }