unary plus and unary minus added

master
serr 2025-04-01 17:42:42 +03:00
parent c1b1c7ddbf
commit 8de97b2883
3 changed files with 22 additions and 16 deletions

View File

@ -16,6 +16,10 @@ extern FILE *yyin;
%type <str> expr program statement block %type <str> expr program statement block
%left PLUS MINUS
%left MULT DIV MOD
%right UNARY
%% %%
// Program - последовательность утверждений // Program - последовательность утверждений
@ -37,6 +41,8 @@ block:
// Возможные выражения // Возможные выражения
expr: expr:
RET { printf("RET\n") } expr // выражение вида return expr RET { printf("RET\n") } expr // выражение вида return expr
| PLUS { printf("UNARY PLUS\n"); } expr %prec UNARY
| MINUS { printf("UNARY MINUS\n"); } expr %prec UNARY
| PRINT { printf("PRINT\n") } expr // выражение вида print expr | PRINT { printf("PRINT\n") } expr // выражение вида print expr
| IDENTIFIER { printf("IDENTIFIER(%s)\n", $1); free($1); } ASSIGN { printf("ASSIGN\n"); } expr // выражения вида a=expr | IDENTIFIER { printf("IDENTIFIER(%s)\n", $1); free($1); } ASSIGN { printf("ASSIGN\n"); } expr // выражения вида a=expr
| expr PLUS { printf("PLUS\n") } expr // выражения вида expr+expr | expr PLUS { printf("PLUS\n") } expr // выражения вида expr+expr

View File

@ -1,11 +1,11 @@
{ {
x = 2 + 1; x = 2 + 1 % 1;
x = z + 3 + 5; x = z + 3 + 5;
{ {
x = 10; x = -10;
y = x + 5 % 2; y = x + 5 % 2;
{ {
z = y * 2 / 5 * 3; z = y * +2 / 5 * 3;
} }
} }
print x; print x;