From f977efc3a4a8f0bb8a1082533c6f361a48209f8e Mon Sep 17 00:00:00 2001 From: serr Date: Tue, 1 Apr 2025 22:01:24 +0300 Subject: [PATCH] func calls added --- analyzers/c_analyzer/c_analyzer.y | 16 ++++++++++++++-- code.txt | 6 +++++- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/analyzers/c_analyzer/c_analyzer.y b/analyzers/c_analyzer/c_analyzer.y index 0396315..714770d 100644 --- a/analyzers/c_analyzer/c_analyzer.y +++ b/analyzers/c_analyzer/c_analyzer.y @@ -20,7 +20,7 @@ char* path; %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 +%type expr_list expr program statement block func_decl param_list params %left OR %left AND @@ -52,7 +52,7 @@ statement: | DO { if (debug) printf("\033[1;34mDO-WHILE LOOP DETECTED\033[0m\n"); } block WHILE - { printf("\033[1;34mDO-WHILE CONDITION DETECTED\033[0m\n"); } + { if (debug) printf("\033[1;34mDO-WHILE CONDITION DETECTED\033[0m\n"); } LPAREN expr RPAREN SEMICOLON { if (debug) printf("\033[1;34mDO-WHILE LOOP ENDED\033[0m\n"); } @@ -101,6 +101,12 @@ block: LBRACE program RBRACE ; +// Список выражений (для вызова функции) +expr_list: + | expr + | expr_list COMMA expr + ; + // Возможные выражения expr: RET { if (debug) printf("RET\n") } expr // выражение вида return expr @@ -123,6 +129,12 @@ 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); } + + | IDENTIFIER { if (debug) printf("\033[1;35mIDENTIFIER(%s)\n\033[0m", $1); free($1); } + LPAREN { if (debug) printf("\033[1;35mSTART FUNC CALL\n\033[0m"); } + expr_list + RPAREN { if (debug) printf("\033[1;35mEND FUNC CALL\n\033[0m"); } + ; ; %% diff --git a/code.txt b/code.txt index ff4cd17..5bae4ee 100644 --- a/code.txt +++ b/code.txt @@ -5,10 +5,14 @@ func FUNC_1(a, b, c) { } x = x + 1; - a = a + 1;; + a = a + 1; } func FUNC_2() { + + FUNC_1(1%123,(2-8)*2+2,3*5); // math expr in args + FUNC_1(1,2,FUNC_1(1,2,3)); // composition + do { x = x + 1; } while(x < 5);