while loop added
parent
0810b7275c
commit
fe86d2cc29
|
@ -29,6 +29,7 @@ void yyerror(const char *s) {
|
||||||
"%" { return MOD; }
|
"%" { return MOD; }
|
||||||
"return" { return RET; }
|
"return" { return RET; }
|
||||||
"print" { return PRINT; }
|
"print" { return PRINT; }
|
||||||
|
"while" { return WHILE; }
|
||||||
[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] ;
|
||||||
|
|
|
@ -12,7 +12,7 @@ extern FILE *yyin;
|
||||||
}
|
}
|
||||||
|
|
||||||
%token <str> IDENTIFIER NUMBER
|
%token <str> IDENTIFIER NUMBER
|
||||||
%token LBRACE RBRACE LPAREN RPAREN SEMICOLON ASSIGN PLUS MINUS MULT DIV MOD RET PRINT
|
%token LBRACE RBRACE LPAREN RPAREN SEMICOLON ASSIGN PLUS MINUS MULT DIV MOD RET PRINT WHILE
|
||||||
|
|
||||||
%type <str> expr program statement block
|
%type <str> expr program statement block
|
||||||
|
|
||||||
|
@ -29,8 +29,13 @@ program:
|
||||||
|
|
||||||
// Утверждение - либо блок {...}, либо выражение с ; в конце
|
// Утверждение - либо блок {...}, либо выражение с ; в конце
|
||||||
statement:
|
statement:
|
||||||
{ printf("\033[93m\nANOTHER STATEMENT\n\033[0m"); } expr SEMICOLON
|
{ printf("\033[93mANOTHER STATEMENT\n\033[0m"); } expr SEMICOLON
|
||||||
| block
|
| block
|
||||||
|
| WHILE { printf("\033[1;34m>>> WHILE LOOP DETECTED\033[0m\n"); }
|
||||||
|
LPAREN expr RPAREN
|
||||||
|
{ printf("\033[1;34m>>> WHILE BODY STARTS\033[0m\n"); }
|
||||||
|
block
|
||||||
|
{ printf("\033[1;34m>>> WHILE LOOP ENDED\033[0m\n"); }
|
||||||
;
|
;
|
||||||
|
|
||||||
// Блок - { program }, т.е. это последовательность утверждений и она находится в скобках { }
|
// Блок - { program }, т.е. это последовательность утверждений и она находится в скобках { }
|
||||||
|
|
Loading…
Reference in New Issue