Added support for various binary operations (>=, <=, /= etc). Also bitwise operators | and & are now allowed
This commit is contained in:
@@ -45,17 +45,15 @@ L [a-zA-Z_]
|
|||||||
{L}({L}|{D})* { return IDENTIFIER; }
|
{L}({L}|{D})* { return IDENTIFIER; }
|
||||||
\"(.)*\" { return IDENTIFIER; } /* String */
|
\"(.)*\" { return IDENTIFIER; } /* String */
|
||||||
|
|
||||||
"==" { return LEQU; }/* Logic operations */
|
"&&" { return LAND; } /* Logical operations */
|
||||||
"&&" { return LAND; }
|
|
||||||
"||" { return LOR; }
|
"||" { return LOR; }
|
||||||
"<=" { return LLEQU; }
|
|
||||||
|
[<>/*+-=]"=" { return BINARY_OP; } /* Generic binary operations */
|
||||||
|
|
||||||
"++" { return INPLACE_INC; }
|
"++" { return INPLACE_INC; }
|
||||||
"--" { return INPLACE_DEC; }
|
"--" { return INPLACE_DEC; }
|
||||||
"+=" { return INPLACE_ADD; }
|
|
||||||
"-=" { return INPLACE_SUB; }
|
|
||||||
|
|
||||||
[-+*/;=\[\]{}(),\.<>] { return yytext[0]; } /* Characters */
|
[-+*/;=\[\]{}(),\.<>|&] { return yytext[0]; } /* Characters */
|
||||||
|
|
||||||
|
|
||||||
"//".* { /* Skip regular comments */ }
|
"//".* { /* Skip regular comments */ }
|
||||||
|
@@ -19,7 +19,7 @@ int yyget_lineno();
|
|||||||
%token SCALAR VECTOR MATRIX SCALARFIELD SCALARARRAY
|
%token SCALAR VECTOR MATRIX SCALARFIELD SCALARARRAY
|
||||||
%token VOID INT INT3 COMPLEX
|
%token VOID INT INT3 COMPLEX
|
||||||
%token IF ELSE FOR WHILE ELIF
|
%token IF ELSE FOR WHILE ELIF
|
||||||
%token LEQU LAND LOR LLEQU
|
%token LEQU LAND LOR LLEQU BINARY_OP
|
||||||
%token KERNEL DEVICE PREPROCESSED
|
%token KERNEL DEVICE PREPROCESSED
|
||||||
%token INPLACE_INC INPLACE_DEC INPLACE_ADD INPLACE_SUB
|
%token INPLACE_INC INPLACE_DEC INPLACE_ADD INPLACE_SUB
|
||||||
|
|
||||||
@@ -190,6 +190,7 @@ binary_operator: '+'
|
|||||||
| LLEQU { $$ = astnode_create(NODE_UNKNOWN, NULL, NULL); astnode_set_buffer(yytext, $$); }
|
| LLEQU { $$ = astnode_create(NODE_UNKNOWN, NULL, NULL); astnode_set_buffer(yytext, $$); }
|
||||||
| INPLACE_ADD { $$ = astnode_create(NODE_UNKNOWN, NULL, NULL); astnode_set_buffer(yytext, $$); }
|
| INPLACE_ADD { $$ = astnode_create(NODE_UNKNOWN, NULL, NULL); astnode_set_buffer(yytext, $$); }
|
||||||
| INPLACE_SUB { $$ = astnode_create(NODE_UNKNOWN, NULL, NULL); astnode_set_buffer(yytext, $$); }
|
| INPLACE_SUB { $$ = astnode_create(NODE_UNKNOWN, NULL, NULL); astnode_set_buffer(yytext, $$); }
|
||||||
|
| BINARY_OP { $$ = astnode_create(NODE_UNKNOWN, NULL, NULL); astnode_set_buffer(yytext, $$); }
|
||||||
;
|
;
|
||||||
|
|
||||||
unary_operator: '-' /* C-style casts are disallowed, would otherwise be defined here */ { $$ = astnode_create(NODE_UNKNOWN, NULL, NULL); $$->infix = yytext[0]; }
|
unary_operator: '-' /* C-style casts are disallowed, would otherwise be defined here */ { $$ = astnode_create(NODE_UNKNOWN, NULL, NULL); $$->infix = yytext[0]; }
|
||||||
|
Reference in New Issue
Block a user