do-while added
parent
38ca0e1084
commit
62d7cd8840
|
@ -28,9 +28,13 @@ void yyerror(const char *s) {
|
||||||
"&&" { return AND; }
|
"&&" { return AND; }
|
||||||
"||" { return OR; }
|
"||" { return OR; }
|
||||||
"!" { return NOT; }
|
"!" { return NOT; }
|
||||||
|
|
||||||
"return" { return RET; }
|
"return" { return RET; }
|
||||||
"print" { return PRINT; }
|
"print" { return PRINT; }
|
||||||
|
|
||||||
"while" { return WHILE; }
|
"while" { return WHILE; }
|
||||||
|
"do" { return DO; }
|
||||||
|
|
||||||
"if" { return IF; }
|
"if" { return IF; }
|
||||||
"else" { return ELSE; }
|
"else" { return ELSE; }
|
||||||
|
|
||||||
|
|
|
@ -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 IF ELSE AND OR NOT
|
%token LBRACE RBRACE LPAREN RPAREN SEMICOLON ASSIGN PLUS MINUS MULT DIV MOD RET PRINT WHILE DO IF ELSE AND OR NOT
|
||||||
%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
|
||||||
|
@ -48,6 +48,13 @@ statement:
|
||||||
block
|
block
|
||||||
{ if (debug) printf("\033[1;34mWHILE LOOP ENDED\033[0m\n"); }
|
{ if (debug) printf("\033[1;34mWHILE LOOP ENDED\033[0m\n"); }
|
||||||
|
|
||||||
|
| 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"); }
|
||||||
|
LPAREN expr RPAREN SEMICOLON
|
||||||
|
{ if (debug) printf("\033[1;34mDO-WHILE LOOP ENDED\033[0m\n"); }
|
||||||
|
|
||||||
| IF LPAREN expr RPAREN block
|
| IF LPAREN expr RPAREN block
|
||||||
{ if (debug) printf("\033[1;34mIF BLOCK ENDED\033[0m\n"); }
|
{ if (debug) printf("\033[1;34mIF BLOCK ENDED\033[0m\n"); }
|
||||||
| IF LPAREN expr RPAREN block
|
| IF LPAREN expr RPAREN block
|
||||||
|
@ -96,9 +103,9 @@ expr:
|
||||||
| expr DIV { if (debug) printf("DIV\n") } expr // выражения вида expr/expr
|
| expr DIV { if (debug) printf("DIV\n") } expr // выражения вида expr/expr
|
||||||
| expr MOD { if (debug) printf("MOD\n") } expr // выражения вида expr%expr
|
| expr MOD { if (debug) printf("MOD\n") } expr // выражения вида expr%expr
|
||||||
| LPAREN { if (debug) printf("LPAREN\n") } expr RPAREN { if (debug) printf("RPAREN\n") } // выражения вида (expr)
|
| LPAREN { if (debug) printf("LPAREN\n") } expr RPAREN { if (debug) printf("RPAREN\n") } // выражения вида (expr)
|
||||||
| expr OR expr
|
| expr OR { if (debug) printf("OR\n") } expr
|
||||||
| expr AND expr
|
| expr AND { if (debug) printf("AND\n") } expr
|
||||||
| NOT 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); }
|
||||||
;
|
;
|
||||||
|
|
Loading…
Reference in New Issue