master
serr 2025-04-01 20:50:07 +03:00
parent 7e3df8f400
commit e80f2e0392
3 changed files with 4 additions and 2 deletions

View File

@ -30,6 +30,7 @@ void yyerror(const char *s) {
"!" { return NOT; } "!" { return NOT; }
"<" { return LT; } "<" { return LT; }
">" { return GT; } ">" { return GT; }
"==" { return EQ; }
"return" { return RET; } "return" { return RET; }
"print" { return PRINT; } "print" { return PRINT; }

View File

@ -16,7 +16,7 @@ bool debug = false; // debug mode
} }
%token <str> IDENTIFIER NUMBER %token <str> IDENTIFIER NUMBER
%token LBRACE RBRACE LPAREN RPAREN SEMICOLON ASSIGN PLUS MINUS MULT DIV MOD RET PRINT WHILE DO IF ELSE AND OR NOT LT GT %token LBRACE RBRACE LPAREN RPAREN SEMICOLON ASSIGN PLUS MINUS MULT DIV MOD RET PRINT WHILE DO IF ELSE AND OR NOT LT GT EQ
%token FUNC COMMA %token FUNC COMMA
%type <str> expr program statement block func_decl param_list params %type <str> expr program statement block func_decl param_list params
@ -107,6 +107,7 @@ expr:
| expr AND { if (debug) printf("AND\n") } expr | expr AND { if (debug) printf("AND\n") } expr
| expr LT { if (debug) printf("LT\n") } expr | expr LT { if (debug) printf("LT\n") } expr
| expr GT { if (debug) printf("GT\n") } expr | expr GT { if (debug) printf("GT\n") } expr
| expr EQ { if (debug) printf("EQ\n") } expr
| NOT { if (debug) printf("NOT\n") } expr | NOT { if (debug) printf("NOT\n") } expr
| IDENTIFIER { if (debug) printf("IDENTIFIER(%s)\n", $1); free($1); } | IDENTIFIER { if (debug) printf("IDENTIFIER(%s)\n", $1); free($1); }
| NUMBER { if (debug) printf("NUMBER(%s)\n", $1); free($1); } | NUMBER { if (debug) printf("NUMBER(%s)\n", $1); free($1); }

View File

@ -20,7 +20,7 @@ func main()
if (!x && 1 || (x + (-100))) { // comment if (!x && 1 || (x + (-100))) { // comment
x = 3; x = 3;
if (x) { if (x == 3) {
x = 5; x = 5;
} }
} else { } else {