From 148e0e23c68f623e01d5796abdb079cf7fc52ad4 Mon Sep 17 00:00:00 2001 From: serr Date: Tue, 1 Apr 2025 21:15:52 +0300 Subject: [PATCH] for added --- analyzers/c_analyzer/c_analyzer.l | 3 +++ analyzers/c_analyzer/c_analyzer.y | 13 ++++++++++++- code.txt | 4 ++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/analyzers/c_analyzer/c_analyzer.l b/analyzers/c_analyzer/c_analyzer.l index 6a1d580..784f8e8 100644 --- a/analyzers/c_analyzer/c_analyzer.l +++ b/analyzers/c_analyzer/c_analyzer.l @@ -9,6 +9,8 @@ void yyerror(const char *s) { line_number, s, yytext); + + exit(-1); } %} @@ -37,6 +39,7 @@ void yyerror(const char *s) { "while" { return WHILE; } "do" { return DO; } +"for" { return FOR; } "if" { return IF; } "else" { return ELSE; } diff --git a/analyzers/c_analyzer/c_analyzer.y b/analyzers/c_analyzer/c_analyzer.y index b0b4cce..42c6f7a 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 EQ +%token LBRACE RBRACE LPAREN RPAREN SEMICOLON ASSIGN PLUS MINUS MULT DIV MOD RET PRINT WHILE DO FOR IF ELSE AND OR NOT LT GT EQ %token FUNC COMMA %type expr program statement block func_decl param_list params @@ -55,6 +55,17 @@ statement: LPAREN expr RPAREN SEMICOLON { if (debug) printf("\033[1;34mDO-WHILE LOOP ENDED\033[0m\n"); } + | FOR { if (debug) printf("\033[1;34mFOR LOOP DETECTED\033[0m\n"); } + LPAREN + expr SEMICOLON { if (debug) printf("\033[1;34mFOR INITIALIZE ENDED\033[0m\n"); } + expr SEMICOLON { if (debug) printf("\033[1;34mFOR CONDITION ENDED\033[0m\n"); } + expr + RPAREN + { if (debug) printf("\033[1;34mFOR BODY STARTS\033[0m\n"); } + block + { if (debug) printf("\033[1;34mFOR LOOP ENDED\033[0m\n"); } + ; + | IF LPAREN expr RPAREN block { if (debug) printf("\033[1;34mIF BLOCK ENDED\033[0m\n"); } | IF LPAREN expr RPAREN block diff --git a/code.txt b/code.txt index 58dd113..d1c2c9a 100644 --- a/code.txt +++ b/code.txt @@ -1,5 +1,9 @@ func FUNC_1(a, b, c) { + for (i = 1; i < 3; i = i + 1) { + print x; + } + x = x + 1; a = a + 1; }