Skip to content

Commit 88a76ac

Browse files
committed
WIP: Arith/Bitwise precedence
1 parent da0af30 commit 88a76ac

File tree

2 files changed

+12
-9
lines changed

2 files changed

+12
-9
lines changed

src/main/scala/plus/meow/MeowRust/parser/statement.scala

+11-8
Original file line numberDiff line numberDiff line change
@@ -84,16 +84,19 @@ trait Statement extends RegexParsers with Literal with Pattern with Identifier w
8484

8585
// TODO: precedence
8686
lazy val ARITHMETIC_OR_LOGICAL_EXPRESSION: Parser[BinaryOpExpr] = (
87-
(EXPRESSION <~? "+") ~? EXPRESSION ^^ { (l, r) => BinaryOpExpr(Add(), l, r) }
88-
| (EXPRESSION <~? "-") ~? EXPRESSION ^^ { (l, r) => BinaryOpExpr(Sub(), l, r) }
89-
| (EXPRESSION <~? "*") ~? EXPRESSION ^^ { (l, r) => BinaryOpExpr(Mul(), l, r) }
90-
| (EXPRESSION <~? "/") ~? EXPRESSION ^^ { (l, r) => BinaryOpExpr(Div(), l, r) }
91-
| (EXPRESSION <~? "%") ~? EXPRESSION ^^ { (l, r) => BinaryOpExpr(Mod(), l, r) }
87+
EXPRESSION ~? """\*|/|%""".r ~? EXPRESSION ^^ { (l, op, r) => {
88+
val opt = op match {
89+
case "*" => Mul()
90+
case "/" => Div()
91+
case _ => Mod()
92+
}
93+
BinaryOpExpr(opt, l, r)
94+
}}
95+
| EXPRESSION ~? """\+|-""".r ~? EXPRESSION ^^ { (l, op, r) => BinaryOpExpr(if(op == "+") Add() else Sub(), l, r) }
96+
| EXPRESSION ~? """<<|>>""".r ~? EXPRESSION ^^ { (l, op, r) => BinaryOpExpr(if(op == "<<") BitwiseLShift() else BitwiseRShift(), l, r) }
9297
| (EXPRESSION <~? "&") ~? EXPRESSION ^^ { (l, r) => BinaryOpExpr(BitwiseAnd(), l, r) }
93-
| (EXPRESSION <~? "|") ~? EXPRESSION ^^ { (l, r) => BinaryOpExpr(BitwiseOr(), l, r) }
9498
| (EXPRESSION <~? "^") ~? EXPRESSION ^^ { (l, r) => BinaryOpExpr(BitwiseXor(), l, r) }
95-
| (EXPRESSION <~? "<<") ~? EXPRESSION ^^ { (l, r) => BinaryOpExpr(BitwiseLShift(), l, r) }
96-
| (EXPRESSION <~? ">>") ~? EXPRESSION ^^ { (l, r) => BinaryOpExpr(BitwiseRShift(), l, r) }
99+
| (EXPRESSION <~? "|") ~? EXPRESSION ^^ { (l, r) => BinaryOpExpr(BitwiseOr(), l, r) }
97100
)
98101

99102
lazy val COMPARISION_EXPRESSION: Parser[BinaryOpExpr] = (

testcases/arith_expr.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
"space test" +4 * true
1+
1 - "space test" +4 * true - 10

0 commit comments

Comments
 (0)