diff options
author | Nicolas Williams <nico@cryptonector.com> | 2013-06-17 20:21:37 -0500 |
---|---|---|
committer | Nicolas Williams <nico@cryptonector.com> | 2013-06-21 15:27:34 -0500 |
commit | 3403d07912ceb49aff1402ba5b23ecc5f893d608 (patch) | |
tree | f9ebc57dc0b903f8742b2f2b559fa08e1c4b8d80 /parser.y | |
parent | dc2fe63e42341d1d34cc8e36694b98b9dda16c52 (diff) |
Add mod (and setmod) operators
Diffstat (limited to 'parser.y')
-rw-r--r-- | parser.y | 14 |
1 files changed, 12 insertions, 2 deletions
@@ -49,6 +49,7 @@ struct lexer_param; %token <literal> FIELD %token <literal> LITERAL %token <literal> FORMAT +%token SETMOD "%=" %token EQ "==" %token NEQ "!=" %token DEFINEDOR "//" @@ -82,12 +83,12 @@ struct lexer_param; %right '|' %left ',' %right "//" -%nonassoc '=' SETPIPE SETPLUS SETMINUS SETMULT SETDIV SETDEFINEDOR +%nonassoc '=' SETPIPE SETPLUS SETMINUS SETMULT SETDIV SETMOD SETDEFINEDOR %left OR %left AND %nonassoc NEQ EQ '<' '>' LESSEQ GREATEREQ %left '+' '-' -%left '*' '/' +%left '*' '/' '%' %type <blk> Exp Term MkDict MkDictPair ExpD ElseBody QQString FuncDef FuncDefs String @@ -153,6 +154,7 @@ static block gen_binop(block a, block b, int op) { case '-': funcname = "_minus"; break; case '*': funcname = "_multiply"; break; case '/': funcname = "_divide"; break; + case '%': funcname = "_mod"; break; case EQ: funcname = "_equal"; break; case NEQ: funcname = "_notequal"; break; case '<': funcname = "_less"; break; @@ -295,10 +297,18 @@ Exp '/' Exp { $$ = gen_binop($1, $3, '/'); } | +Exp '%' Exp { + $$ = gen_binop($1, $3, '%'); +} | + Exp "/=" Exp { $$ = gen_update($1, $3, '/'); } | +Exp SETMOD Exp { + $$ = gen_update($1, $3, '%'); +} | + Exp "==" Exp { $$ = gen_binop($1, $3, EQ); } | |