diff --git a/acc/src/acc.l b/acc/src/acc.l index c2628f8..5bb9a5e 100644 --- a/acc/src/acc.l +++ b/acc/src/acc.l @@ -45,17 +45,15 @@ L [a-zA-Z_] {L}({L}|{D})* { return IDENTIFIER; } \"(.)*\" { return IDENTIFIER; } /* String */ -"==" { return LEQU; }/* Logic operations */ -"&&" { return LAND; } +"&&" { return LAND; } /* Logical operations */ "||" { return LOR; } -"<=" { return LLEQU; } + +[<>/*+-=]"=" { return BINARY_OP; } /* Generic binary operations */ "++" { return INPLACE_INC; } "--" { return INPLACE_DEC; } -"+=" { return INPLACE_ADD; } -"-=" { return INPLACE_SUB; } -[-+*/;=\[\]{}(),\.<>] { return yytext[0]; } /* Characters */ +[-+*/;=\[\]{}(),\.<>|&] { return yytext[0]; } /* Characters */ "//".* { /* Skip regular comments */ } diff --git a/acc/src/acc.y b/acc/src/acc.y index 4da6f14..3c715ea 100644 --- a/acc/src/acc.y +++ b/acc/src/acc.y @@ -19,7 +19,7 @@ int yyget_lineno(); %token SCALAR VECTOR MATRIX SCALARFIELD SCALARARRAY %token VOID INT INT3 COMPLEX %token IF ELSE FOR WHILE ELIF -%token LEQU LAND LOR LLEQU +%token LEQU LAND LOR LLEQU BINARY_OP %token KERNEL DEVICE PREPROCESSED %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, $$); } | INPLACE_ADD { $$ = 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]; }