Add comparison operators ‘<’, ‘<=’, ‘>’ and ‘>=’
This commit is contained in:
parent
47701677e8
commit
3d77b28eac
4 changed files with 31 additions and 1 deletions
|
@ -101,6 +101,8 @@ or { return OR_KW; }
|
||||||
|
|
||||||
\=\= { return EQ; }
|
\=\= { return EQ; }
|
||||||
\!\= { return NEQ; }
|
\!\= { return NEQ; }
|
||||||
|
\<\= { return LEQ; }
|
||||||
|
\>\= { return GEQ; }
|
||||||
\&\& { return AND; }
|
\&\& { return AND; }
|
||||||
\|\| { return OR; }
|
\|\| { return OR; }
|
||||||
\-\> { return IMPL; }
|
\-\> { return IMPL; }
|
||||||
|
|
|
@ -269,6 +269,7 @@ void yyerror(YYLTYPE * loc, yyscan_t scanner, ParseData * data, const char * err
|
||||||
%left OR
|
%left OR
|
||||||
%left AND
|
%left AND
|
||||||
%nonassoc EQ NEQ
|
%nonassoc EQ NEQ
|
||||||
|
%left '<' '>' LEQ GEQ
|
||||||
%right UPDATE
|
%right UPDATE
|
||||||
%left NOT
|
%left NOT
|
||||||
%left '+' '-'
|
%left '+' '-'
|
||||||
|
@ -312,6 +313,10 @@ expr_op
|
||||||
| '-' expr_op %prec NEGATE { $$ = new ExprApp(new ExprApp(new ExprVar(data->symbols.create("__sub")), new ExprInt(0)), $2); }
|
| '-' expr_op %prec NEGATE { $$ = new ExprApp(new ExprApp(new ExprVar(data->symbols.create("__sub")), new ExprInt(0)), $2); }
|
||||||
| expr_op EQ expr_op { $$ = new ExprOpEq($1, $3); }
|
| expr_op EQ expr_op { $$ = new ExprOpEq($1, $3); }
|
||||||
| expr_op NEQ expr_op { $$ = new ExprOpNEq($1, $3); }
|
| expr_op NEQ expr_op { $$ = new ExprOpNEq($1, $3); }
|
||||||
|
| expr_op '<' expr_op { $$ = new ExprApp(new ExprApp(new ExprVar(data->symbols.create("__lessThan")), $1), $3); }
|
||||||
|
| expr_op LEQ expr_op { $$ = new ExprOpNot(new ExprApp(new ExprApp(new ExprVar(data->symbols.create("__lessThan")), $3), $1)); }
|
||||||
|
| expr_op '>' expr_op { $$ = new ExprApp(new ExprApp(new ExprVar(data->symbols.create("__lessThan")), $3), $1); }
|
||||||
|
| expr_op GEQ expr_op { $$ = new ExprOpNot(new ExprApp(new ExprApp(new ExprVar(data->symbols.create("__lessThan")), $1), $3)); }
|
||||||
| expr_op AND expr_op { $$ = new ExprOpAnd($1, $3); }
|
| expr_op AND expr_op { $$ = new ExprOpAnd($1, $3); }
|
||||||
| expr_op OR expr_op { $$ = new ExprOpOr($1, $3); }
|
| expr_op OR expr_op { $$ = new ExprOpOr($1, $3); }
|
||||||
| expr_op IMPL expr_op { $$ = new ExprOpImpl($1, $3); }
|
| expr_op IMPL expr_op { $$ = new ExprOpImpl($1, $3); }
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
2170
|
2185
|
||||||
|
|
|
@ -18,6 +18,8 @@ let {
|
||||||
|
|
||||||
x = 12;
|
x = 12;
|
||||||
|
|
||||||
|
err = abort "urgh";
|
||||||
|
|
||||||
body = sum
|
body = sum
|
||||||
[ (sum (range 1 50))
|
[ (sum (range 1 50))
|
||||||
(123 + 456)
|
(123 + 456)
|
||||||
|
@ -28,5 +30,26 @@ let {
|
||||||
(3 * 4 * 5)
|
(3 * 4 * 5)
|
||||||
(56088 / 123 / 2)
|
(56088 / 123 / 2)
|
||||||
(3 + 4 * const 5 0 - 6 / id 2)
|
(3 + 4 * const 5 0 - 6 / id 2)
|
||||||
|
|
||||||
|
(if 3 < 7 then 1 else err)
|
||||||
|
(if 7 < 3 then err else 1)
|
||||||
|
(if 3 < 3 then err else 1)
|
||||||
|
|
||||||
|
(if 3 <= 7 then 1 else err)
|
||||||
|
(if 7 <= 3 then err else 1)
|
||||||
|
(if 3 <= 3 then 1 else err)
|
||||||
|
|
||||||
|
(if 3 > 7 then err else 1)
|
||||||
|
(if 7 > 3 then 1 else err)
|
||||||
|
(if 3 > 3 then err else 1)
|
||||||
|
|
||||||
|
(if 3 >= 7 then err else 1)
|
||||||
|
(if 7 >= 3 then 1 else err)
|
||||||
|
(if 3 >= 3 then 1 else err)
|
||||||
|
|
||||||
|
(if 2 > 1 == 1 < 2 then 1 else err)
|
||||||
|
(if 1 + 2 * 3 >= 7 then 1 else err)
|
||||||
|
(if 1 + 2 * 3 < 7 then err else 1)
|
||||||
];
|
];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue