diff --git a/analyzers/c_analyzer/c_analyzer.l b/analyzers/c_analyzer/c_analyzer.l index 4be2fc6..f746144 100644 --- a/analyzers/c_analyzer/c_analyzer.l +++ b/analyzers/c_analyzer/c_analyzer.l @@ -18,6 +18,8 @@ void yyerror(const char *s) { %% "{" { return LBRACE; } "}" { return RBRACE; } +"(" { return LPAREN; } +")" { return RPAREN; } ";" { return SEMICOLON; } "=" { return ASSIGN; } "+" { return PLUS; } diff --git a/analyzers/c_analyzer/c_analyzer.y b/analyzers/c_analyzer/c_analyzer.y index fd30df4..ec4451a 100644 --- a/analyzers/c_analyzer/c_analyzer.y +++ b/analyzers/c_analyzer/c_analyzer.y @@ -12,7 +12,7 @@ extern FILE *yyin; } %token IDENTIFIER NUMBER -%token LBRACE RBRACE SEMICOLON ASSIGN PLUS MINUS MULT DIV MOD RET PRINT +%token LBRACE RBRACE LPAREN RPAREN SEMICOLON ASSIGN PLUS MINUS MULT DIV MOD RET PRINT %type expr program statement block @@ -50,6 +50,7 @@ expr: | expr MULT { printf("MULT\n") } expr // выражения вида expr*expr | expr DIV { printf("DIV\n") } expr // выражения вида expr/expr | expr MOD { printf("MOD\n") } expr // выражения вида expr%expr + | LPAREN { printf("LPAREN\n") } expr RPAREN { printf("RPAREN\n") } // выражения вида (expr) | IDENTIFIER { printf("IDENTIFIER(%s)\n", $1); free($1); } | NUMBER { printf("NUMBER(%s)\n", $1); free($1); } ; diff --git a/code.txt b/code.txt index c4541ed..5d8d04b 100644 --- a/code.txt +++ b/code.txt @@ -3,9 +3,9 @@ x = z + 3 + 5; { x = -10; - y = x + 5 % 2; + y = (x + +5) % 2; { - z = y * +2 / 5 * 3; + z = y * +2 / -(5 * ( ((3)) )); } } print x;