@@ -84,16 +84,19 @@ trait Statement extends RegexParsers with Literal with Pattern with Identifier w
84
84
85
85
// TODO: precedence
86
86
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) }
92
97
| (EXPRESSION <~? " &" ) ~? EXPRESSION ^^ { (l, r) => BinaryOpExpr (BitwiseAnd (), l, r) }
93
- | (EXPRESSION <~? " |" ) ~? EXPRESSION ^^ { (l, r) => BinaryOpExpr (BitwiseOr (), l, r) }
94
98
| (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) }
97
100
)
98
101
99
102
lazy val COMPARISION_EXPRESSION : Parser [BinaryOpExpr ] = (
0 commit comments