summaryrefslogtreecommitdiffstats
path: root/parser.y
diff options
context:
space:
mode:
authorDamian Gryski <damian@gryski.com>2012-10-23 17:01:39 +0200
committerDamian Gryski <damian@gryski.com>2012-10-23 17:01:39 +0200
commit553de39b2a9c45110ed25a714fb249bd6037f874 (patch)
tree6a54a2da8d510b182bcf17b59481b1ef4b2c2913 /parser.y
parentb193bca563f377f97b9a6efcf5b054bd70fb1f46 (diff)
Implement 'not equal' (!=) as a binop
Diffstat (limited to 'parser.y')
-rw-r--r--parser.y8
1 files changed, 7 insertions, 1 deletions
diff --git a/parser.y b/parser.y
index 38e72ee3..b0e4e521 100644
--- a/parser.y
+++ b/parser.y
@@ -46,6 +46,7 @@ typedef void* yyscan_t;
%token <literal> IDENT
%token <literal> LITERAL
%token EQ "=="
+%token NEQ "!="
%token DEFINEDOR "//"
%token AS "as"
%token DEF "def"
@@ -79,7 +80,7 @@ typedef void* yyscan_t;
%nonassoc '=' SETPIPE SETPLUS SETMINUS SETMULT SETDIV SETDEFINEDOR
%left OR
%left AND
-%nonassoc EQ '<' '>' LESSEQ GREATEREQ
+%nonassoc NEQ EQ '<' '>' LESSEQ GREATEREQ
%left '+' '-'
%left '*' '/'
@@ -142,6 +143,7 @@ static block gen_binop(block a, block b, int op) {
case '*': funcname = "_multiply"; break;
case '/': funcname = "_divide"; break;
case EQ: funcname = "_equal"; break;
+ case NEQ: funcname = "_notequal"; break;
case '<': funcname = "_less"; break;
case '>': funcname = "_greater"; break;
case LESSEQ: funcname = "_lesseq"; break;
@@ -282,6 +284,10 @@ Exp "==" Exp {
$$ = gen_binop($1, $3, EQ);
} |
+Exp "!=" Exp {
+ $$ = gen_binop($1, $3, NEQ);
+} |
+
Exp '<' Exp {
$$ = gen_binop($1, $3, '<');
} |