func calls added
parent
8eabecb7b1
commit
f977efc3a4
|
@ -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 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
|
%token FUNC COMMA
|
||||||
|
|
||||||
%type <str> expr program statement block func_decl param_list params
|
%type <str> expr_list expr program statement block func_decl param_list params
|
||||||
|
|
||||||
%left OR
|
%left OR
|
||||||
%left AND
|
%left AND
|
||||||
|
@ -52,7 +52,7 @@ statement:
|
||||||
| DO { if (debug) printf("\033[1;34mDO-WHILE LOOP DETECTED\033[0m\n"); }
|
| DO { if (debug) printf("\033[1;34mDO-WHILE LOOP DETECTED\033[0m\n"); }
|
||||||
block
|
block
|
||||||
WHILE
|
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
|
LPAREN expr RPAREN SEMICOLON
|
||||||
{ if (debug) printf("\033[1;34mDO-WHILE LOOP ENDED\033[0m\n"); }
|
{ if (debug) printf("\033[1;34mDO-WHILE LOOP ENDED\033[0m\n"); }
|
||||||
|
|
||||||
|
@ -101,6 +101,12 @@ block:
|
||||||
LBRACE program RBRACE
|
LBRACE program RBRACE
|
||||||
;
|
;
|
||||||
|
|
||||||
|
// Список выражений (для вызова функции)
|
||||||
|
expr_list:
|
||||||
|
| expr
|
||||||
|
| expr_list COMMA expr
|
||||||
|
;
|
||||||
|
|
||||||
// Возможные выражения
|
// Возможные выражения
|
||||||
expr:
|
expr:
|
||||||
RET { if (debug) printf("RET\n") } expr // выражение вида return expr
|
RET { if (debug) printf("RET\n") } expr // выражение вида return expr
|
||||||
|
@ -123,6 +129,12 @@ 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); }
|
||||||
|
|
||||||
|
| 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"); }
|
||||||
|
;
|
||||||
;
|
;
|
||||||
|
|
||||||
%%
|
%%
|
||||||
|
|
6
code.txt
6
code.txt
|
@ -5,10 +5,14 @@ func FUNC_1(a, b, c) {
|
||||||
}
|
}
|
||||||
|
|
||||||
x = x + 1;
|
x = x + 1;
|
||||||
a = a + 1;;
|
a = a + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
func FUNC_2() {
|
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 {
|
do {
|
||||||
x = x + 1;
|
x = x + 1;
|
||||||
} while(x < 5);
|
} while(x < 5);
|
||||||
|
|
Loading…
Reference in New Issue