'==' operator, tests for equality and operator precedence.
This commit is contained in:
1 parent
3895bbf856
commit
4d47f8f1e1
3 files changed
+36
-6
No files matched your search
+13
-6
@@ -19,11 +19,6 @@
|
||||
%token <literal> IDENT
|
||||
%token <literal> LITERAL
|
||||
|
||||
/* revolting hack */
|
||||
%left ';'
|
||||
|
||||
%left '|'
|
||||
%left ','
|
||||
%token EQ "=="
|
||||
%token DEFINEDOR "//"
|
||||
%token AS "as"
|
||||
@@ -37,6 +32,12 @@
|
||||
%token AND "and"
|
||||
%token OR "or"
|
||||
%token NOT "not"
|
||||
|
||||
|
||||
/* revolting hack */
|
||||
%left ';'
|
||||
%left '|'
|
||||
%left ','
|
||||
%right "//"
|
||||
%nonassoc '=' SETPIPE
|
||||
%nonassoc EQ
|
||||
@@ -64,13 +65,14 @@ static block gen_index(block obj, block key) {
|
||||
return block_join(obj, block_join(gen_subexp(key), gen_op_simple(INDEX)));
|
||||
}
|
||||
|
||||
static block gen_binop(block a, block b, char op) {
|
||||
static block gen_binop(block a, block b, int op) {
|
||||
const char* funcname = 0;
|
||||
switch (op) {
|
||||
case '+': funcname = "_plus"; break;
|
||||
case '-': funcname = "_minus"; break;
|
||||
case '*': funcname = "_multiply"; break;
|
||||
case '/': funcname = "_divide"; break;
|
||||
case EQ: funcname = "_equal"; break;
|
||||
}
|
||||
assert(funcname);
|
||||
|
||||
@@ -129,6 +131,7 @@ Exp "and" Exp {
|
||||
$$ = gen_and($1, $3);
|
||||
} |
|
||||
|
||||
|
||||
"not" Exp {
|
||||
$$ = gen_not($2);
|
||||
} |
|
||||
@@ -168,6 +171,10 @@ Exp '/' Exp {
|
||||
$$ = gen_binop($1, $3, '/');
|
||||
} |
|
||||
|
||||
Exp "==" Exp {
|
||||
$$ = gen_binop($1, $3, EQ);
|
||||
} |
|
||||
|
||||
Term {
|
||||
$$ = $1;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user