Skip to content

Commit 20a4241

Browse files
committed
Fixed grammar
1 parent 4bdef85 commit 20a4241

File tree

1 file changed

+13
-12
lines changed

1 file changed

+13
-12
lines changed

src/grammar.lalrpop

+13-12
Original file line numberDiff line numberDiff line change
@@ -51,15 +51,14 @@ Return: Option<Expr> = {
5151
};
5252

5353
Expr: Expr = {
54-
BooleanExpr,
5554
ArithmeticExpr,
56-
ComparisonExpr,
55+
BooleanExpr,
5756
};
5857

5958
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)),
6362
}
6463

6564
ValuedExpr: Expr = {
@@ -68,7 +67,9 @@ ValuedExpr: Expr = {
6867
}
6968

7069
ComparisonExpr: Expr = {
70+
"(" <ce:ComparisonExpr> ")" => ce,
7171
<l:ArithmeticExpr> <op:CompareOp> <r:ArithmeticExpr> => Expr::Op(Box::new(l), op, Box::new(r)),
72+
Negation,
7273
}
7374

7475
ArithmeticExpr: Expr = {
@@ -77,8 +78,8 @@ ArithmeticExpr: Expr = {
7778
};
7879

7980
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,
8283
Literal,
8384
};
8485

@@ -107,11 +108,11 @@ VarDeclList: Vec<Decl> = {
107108
}
108109
}
109110

110-
Term: Expr = {
111+
ArithmeticTerm: Expr = {
111112
Ident => Expr::Ref(<>),
112113
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)),
115116
<f:Ident> "(" <a:ArgList> ")" => Expr::FunctionCall(f, a),
116117
};
117118

@@ -189,9 +190,9 @@ CompareOp: Op = {
189190
};
190191

191192
BooleanOp: Op = {
192-
"and" => Op::And,
193+
"and" => Op::And,
193194
"AND" => Op::And,
194-
"or" => Op::Or,
195+
"or" => Op::Or,
195196
"OR" => Op::Or,
196197
};
197198

0 commit comments

Comments
 (0)