diff --git a/analyzers/c_analyzer/c_analyzer.l b/analyzers/c_analyzer/c_analyzer.l index 2f728a0..6a1d580 100644 --- a/analyzers/c_analyzer/c_analyzer.l +++ b/analyzers/c_analyzer/c_analyzer.l @@ -30,6 +30,7 @@ void yyerror(const char *s) { "!" { return NOT; } "<" { return LT; } ">" { return GT; } +"==" { return EQ; } "return" { return RET; } "print" { return PRINT; } diff --git a/analyzers/c_analyzer/c_analyzer.y b/analyzers/c_analyzer/c_analyzer.y index 14a0c05..b0b4cce 100644 --- a/analyzers/c_analyzer/c_analyzer.y +++ b/analyzers/c_analyzer/c_analyzer.y @@ -16,7 +16,7 @@ bool debug = false; // debug mode } %token 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 %type expr program statement block func_decl param_list params @@ -107,6 +107,7 @@ expr: | expr AND { if (debug) printf("AND\n") } expr | expr LT { if (debug) printf("LT\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 | IDENTIFIER { if (debug) printf("IDENTIFIER(%s)\n", $1); free($1); } | NUMBER { if (debug) printf("NUMBER(%s)\n", $1); free($1); } diff --git a/code.txt b/code.txt index 3c276fe..58dd113 100644 --- a/code.txt +++ b/code.txt @@ -20,7 +20,7 @@ func main() if (!x && 1 || (x + (-100))) { // comment x = 3; - if (x) { + if (x == 3) { x = 5; } } else {