summaryrefslogtreecommitdiffstats
path: root/grammar/rscript.y
diff options
context:
space:
mode:
Diffstat (limited to 'grammar/rscript.y')
-rw-r--r--grammar/rscript.y16
1 files changed, 13 insertions, 3 deletions
diff --git a/grammar/rscript.y b/grammar/rscript.y
index 3652eec2..8bf0e55a 100644
--- a/grammar/rscript.y
+++ b/grammar/rscript.y
@@ -40,6 +40,10 @@
%token CMP_GE
%token CMP_LT
%token CMP_GT
+%token CMP_CONTAINS
+%token CMP_CONTAINSI
+%token CMP_STARTSWITH
+%token CMP_STARTSWITHI
%type <nvlst> nv nvlst
%type <obj> obj
@@ -50,7 +54,7 @@
%type <expr> expr
%left AND OR
-%left CMP_EQ CMP_NE CMP_LE CMP_GE CMP_LT CMP_GT
+%left CMP_EQ CMP_NE CMP_LE CMP_GE CMP_LT CMP_GT CMP_CONTAINS CMP_CONTAINSI CMP_STARTSWITH CMP_STARTSWITHI
%left '+' '-'
%left '*' '/' '%'
%nonassoc UMINUS NOT
@@ -127,6 +131,10 @@ expr: expr AND expr { $$ = cnfexprNew(AND, $1, $3); }
| expr CMP_GE expr { $$ = cnfexprNew(CMP_GE, $1, $3); }
| expr CMP_LT expr { $$ = cnfexprNew(CMP_LT, $1, $3); }
| expr CMP_GT expr { $$ = cnfexprNew(CMP_GT, $1, $3); }
+ | expr CMP_CONTAINS expr { $$ = cnfexprNew(CMP_CONTAINS, $1, $3); }
+ | expr CMP_CONTAINSI expr { $$ = cnfexprNew(CMP_CONTAINSI, $1, $3); }
+ | expr CMP_STARTSWITH expr { $$ = cnfexprNew(CMP_STARTSWITH, $1, $3); }
+ | expr CMP_STARTSWITHI expr { $$ = cnfexprNew(CMP_STARTSWITHI, $1, $3); }
| expr '+' expr { $$ = cnfexprNew('+', $1, $3); }
| expr '-' expr { $$ = cnfexprNew('-', $1, $3); }
| expr '*' expr { $$ = cnfexprNew('*', $1, $3); }
@@ -134,8 +142,8 @@ expr: expr AND expr { $$ = cnfexprNew(AND, $1, $3); }
| expr '%' expr { $$ = cnfexprNew('%', $1, $3); }
| '(' expr ')' { $$ = $2; printf("( expr)\n"); }
| '-' expr %prec UMINUS { printf("uminus\n"); $$ = cnfexprNew('M', NULL, $2); }
- | NUMBER { $$ = cnfnumvalNew($1); }
- | STRING { $$ = cnfstringvalNew($1); }
+ | NUMBER { $$ = (struct cnfexpr*) cnfnumvalNew($1); }
+ | STRING { $$ = (struct cnfexpr*) cnfstringvalNew($1); }
| VAR { printf("variables not yet implemented!\n"); }
%%
@@ -144,9 +152,11 @@ int yyerror(char *s)
printf("yyerror called: %s\n", s);
}
+/*
int main()
{
yydebug = 0;
return yyparse();
}
+*/