while loop added
parent
0810b7275c
commit
fe86d2cc29
|
@ -29,6 +29,7 @@ void yyerror(const char *s) {
|
|||
"%" { return MOD; }
|
||||
"return" { return RET; }
|
||||
"print" { return PRINT; }
|
||||
"while" { return WHILE; }
|
||||
[0-9]+ { yylval.str = strdup(yytext); return NUMBER; }
|
||||
[a-zA-Z_][a-zA-Z0-9_]* { yylval.str = strdup(yytext); return IDENTIFIER; }
|
||||
[ \t] ;
|
||||
|
|
|
@ -12,7 +12,7 @@ extern FILE *yyin;
|
|||
}
|
||||
|
||||
%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
|
||||
|
||||
|
@ -29,8 +29,13 @@ program:
|
|||
|
||||
// Утверждение - либо блок {...}, либо выражение с ; в конце
|
||||
statement:
|
||||
{ printf("\033[93m\nANOTHER STATEMENT\n\033[0m"); } expr SEMICOLON
|
||||
{ printf("\033[93mANOTHER STATEMENT\n\033[0m"); } expr SEMICOLON
|
||||
| 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 }, т.е. это последовательность утверждений и она находится в скобках { }
|
||||
|
|
Loading…
Reference in New Issue