@@ -51,15 +51,14 @@ Return: Option<Expr> = {
51
51
};
52
52
53
53
Expr: Expr = {
54
- BooleanExpr,
55
54
ArithmeticExpr,
56
- ComparisonExpr ,
55
+ BooleanExpr ,
57
56
};
58
57
59
58
BooleanExpr: Expr = {
60
- <l:BooleanExpr> <op:BooleanOp> <r:ValuedExpr> => Expr::Op(Box::new(l), op, Box::new(r)) ,
61
- <l:BooleanExpr> <op:BooleanOp> <r:Negation > => Expr::Op(Box::new(l), op, Box::new(r)),
62
- Negation ,
59
+ ComparisonExpr ,
60
+ <l:BooleanExpr> <op:BooleanOp> <r:ComparisonExpr > => Expr::Op(Box::new(l), op, Box::new(r)),
61
+ "(" <l:BooleanExpr> <op:BooleanOp> <r:ComparisonExpr> ")" => Expr::Op(Box::new(l), op, Box::new(r)) ,
63
62
}
64
63
65
64
ValuedExpr: Expr = {
@@ -68,7 +67,9 @@ ValuedExpr: Expr = {
68
67
}
69
68
70
69
ComparisonExpr: Expr = {
70
+ "(" <ce:ComparisonExpr> ")" => ce,
71
71
<l:ArithmeticExpr> <op:CompareOp> <r:ArithmeticExpr> => Expr::Op(Box::new(l), op, Box::new(r)),
72
+ Negation,
72
73
}
73
74
74
75
ArithmeticExpr: Expr = {
@@ -77,8 +78,8 @@ ArithmeticExpr: Expr = {
77
78
};
78
79
79
80
Factor: Expr = {
80
- <l:Factor> <op:MulOp> <r:Term > => Expr::Op(Box::new(l), op, Box::new(r)),
81
- Term ,
81
+ <l:Factor> <op:MulOp> <r:ArithmeticTerm > => Expr::Op(Box::new(l), op, Box::new(r)),
82
+ ArithmeticTerm ,
82
83
Literal,
83
84
};
84
85
@@ -107,11 +108,11 @@ VarDeclList: Vec<Decl> = {
107
108
}
108
109
}
109
110
110
- Term : Expr = {
111
+ ArithmeticTerm : Expr = {
111
112
Ident => Expr::Ref(<>),
112
113
ExprTuple => Expr::Tuple(<>),
113
- "(" <e:Expr > ")" => Expr::Parens(Box::new(e)),
114
- <t:Term > "[" <e:Expr > "]" => Expr::ArrayIndex(Box::new(t ), Box::new(e)),
114
+ "(" <e:ArithmeticExpr > ")" => Expr::Parens(Box::new(e)),
115
+ <i:Ident > "[" <e:ArithmeticExpr > "]" => Expr::ArrayIndex(Box::new(Expr::Ref(i) ), Box::new(e)),
115
116
<f:Ident> "(" <a:ArgList> ")" => Expr::FunctionCall(f, a),
116
117
};
117
118
@@ -189,9 +190,9 @@ CompareOp: Op = {
189
190
};
190
191
191
192
BooleanOp: Op = {
192
- "and" => Op::And,
193
+ "and" => Op::And,
193
194
"AND" => Op::And,
194
- "or" => Op::Or,
195
+ "or" => Op::Or,
195
196
"OR" => Op::Or,
196
197
};
197
198
0 commit comments