if/else added
parent
0383536363
commit
85ac254189
|
@ -30,6 +30,8 @@ void yyerror(const char *s) {
|
||||||
"return" { return RET; }
|
"return" { return RET; }
|
||||||
"print" { return PRINT; }
|
"print" { return PRINT; }
|
||||||
"while" { return WHILE; }
|
"while" { return WHILE; }
|
||||||
|
"if" { return IF; }
|
||||||
|
"else" { return ELSE; }
|
||||||
[0-9]+ { yylval.str = strdup(yytext); return NUMBER; }
|
[0-9]+ { yylval.str = strdup(yytext); return NUMBER; }
|
||||||
[a-zA-Z_][a-zA-Z0-9_]* { yylval.str = strdup(yytext); return IDENTIFIER; }
|
[a-zA-Z_][a-zA-Z0-9_]* { yylval.str = strdup(yytext); return IDENTIFIER; }
|
||||||
[ \t] ;
|
[ \t] ;
|
||||||
|
|
|
@ -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
|
%token LBRACE RBRACE LPAREN RPAREN SEMICOLON ASSIGN PLUS MINUS MULT DIV MOD RET PRINT WHILE IF ELSE
|
||||||
|
|
||||||
%type <str> expr program statement block
|
%type <str> expr program statement block
|
||||||
|
|
||||||
|
@ -31,15 +31,21 @@ program:
|
||||||
| program statement
|
| program statement
|
||||||
;
|
;
|
||||||
|
|
||||||
// Утверждение - либо блок {...}, либо выражение с ; в конце
|
// Утверждение - либо блок {...}, либо выражение с ; в конце, либо цикл while, либо конструкций if-else
|
||||||
statement:
|
statement:
|
||||||
{ if (debug) printf("\033[93mANOTHER STATEMENT\n\033[0m"); } expr SEMICOLON
|
{ if (debug) printf("\033[93mANOTHER STATEMENT\n\033[0m"); } expr SEMICOLON
|
||||||
|
|
||||||
| block
|
| block
|
||||||
|
|
||||||
| WHILE { if (debug) printf("\033[1;34mWHILE LOOP DETECTED\033[0m\n"); }
|
| WHILE { if (debug) printf("\033[1;34mWHILE LOOP DETECTED\033[0m\n"); }
|
||||||
LPAREN expr RPAREN
|
LPAREN expr RPAREN
|
||||||
{ if (debug) printf("\033[1;34mWHILE BODY STARTS\033[0m\n"); }
|
{ if (debug) printf("\033[1;34mWHILE BODY STARTS\033[0m\n"); }
|
||||||
block
|
block
|
||||||
{ if (debug) printf("\033[1;34mWHILE LOOP ENDED\033[0m\n"); }
|
{ if (debug) printf("\033[1;34mWHILE LOOP ENDED\033[0m\n"); }
|
||||||
|
|
||||||
|
| IF LPAREN expr RPAREN block
|
||||||
|
|
||||||
|
| IF LPAREN expr RPAREN block ELSE block
|
||||||
;
|
;
|
||||||
|
|
||||||
// Блок - { program }, т.е. это последовательность утверждений и она находится в скобках { }
|
// Блок - { program }, т.е. это последовательность утверждений и она находится в скобках { }
|
||||||
|
|
Loading…
Reference in New Issue