summaryrefslogtreecommitdiffstats
path: root/parser.y
diff options
context:
space:
mode:
authorStephen Roantree <stroantree@gmail.com>2012-10-24 11:42:25 -0700
committerStephen Roantree <stroantree@gmail.com>2012-10-24 13:50:26 -0700
commit5e25c2a259d2337d38b730d5dc22e7db67ea88cb (patch)
treebf0d88fdad29f2fa9ea25a3ae5de73c8ea7c2297 /parser.y
parent033d9b2fd55b1fef0f17ce91d864c55e07f3ee5d (diff)
Implemented contains operator
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 e2e591df..ddc41c5e 100644
--- a/parser.y
+++ b/parser.y
@@ -65,6 +65,7 @@ struct lexer_param;
%token SETDEFINEDOR "//="
%token LESSEQ "<="
%token GREATEREQ ">="
+%token CONTAINS "contains"
%token QQSTRING_START
%token <literal> QQSTRING_TEXT
@@ -80,7 +81,7 @@ struct lexer_param;
%nonassoc '=' SETPIPE SETPLUS SETMINUS SETMULT SETDIV SETDEFINEDOR
%left OR
%left AND
-%nonassoc NEQ EQ '<' '>' LESSEQ GREATEREQ
+%nonassoc NEQ EQ '<' '>' LESSEQ GREATEREQ CONTAINS
%left '+' '-'
%left '*' '/'
@@ -152,6 +153,7 @@ static block gen_binop(block a, block b, int op) {
case '>': funcname = "_greater"; break;
case LESSEQ: funcname = "_lesseq"; break;
case GREATEREQ: funcname = "_greatereq"; break;
+ case CONTAINS: funcname = "_contains"; break;
}
assert(funcname);
@@ -308,6 +310,10 @@ Exp ">=" Exp {
$$ = gen_binop($1, $3, GREATEREQ);
} |
+Exp "contains" Exp {
+ $$ = gen_binop($1, $3, CONTAINS);
+} |
+
String {
$$ = $1;
} |