summaryrefslogtreecommitdiffstats
path: root/parser.y
diff options
context:
space:
mode:
authorNicolas Williams <nico@cryptonector.com>2013-06-17 20:21:37 -0500
committerNicolas Williams <nico@cryptonector.com>2013-06-21 15:27:34 -0500
commit3403d07912ceb49aff1402ba5b23ecc5f893d608 (patch)
treef9ebc57dc0b903f8742b2f2b559fa08e1c4b8d80 /parser.y
parentdc2fe63e42341d1d34cc8e36694b98b9dda16c52 (diff)
Add mod (and setmod) operators
Diffstat (limited to 'parser.y')
-rw-r--r--parser.y14
1 files changed, 12 insertions, 2 deletions
diff --git a/parser.y b/parser.y
index 4ec10383..8d3be642 100644
--- a/parser.y
+++ b/parser.y
@@ -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);
} |