some changes
parent
bd1cc1e786
commit
a2c3c9c9c0
|
@ -5,7 +5,7 @@ int line_number = 1;
|
|||
|
||||
void yyerror(const char *s) {
|
||||
fprintf(stderr,
|
||||
"\033[91mError at line %i: %s near '%s'\033[0m\n",
|
||||
"\033[91m\nError at line %i: %s near '%s'\033[0m\n",
|
||||
line_number,
|
||||
s,
|
||||
yytext);
|
||||
|
@ -24,6 +24,7 @@ void yyerror(const char *s) {
|
|||
"-" { return MINUS; }
|
||||
"*" { return MULT; }
|
||||
"/" { return DIV; }
|
||||
"%" { return MOD; }
|
||||
"return" { return RET; }
|
||||
"print" { return PRINT; }
|
||||
[0-9]+ { yylval.str = strdup(yytext); return NUMBER; }
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
%{
|
||||
#include <stdio.h>
|
||||
|
||||
extern char *yytext;
|
||||
|
||||
void yyerror(const char *s);
|
||||
extern int yylex();
|
||||
extern char *yytext;
|
||||
extern FILE *yyin;
|
||||
%}
|
||||
|
||||
|
@ -12,8 +11,8 @@ extern FILE *yyin;
|
|||
char *str;
|
||||
}
|
||||
|
||||
%token <str> IDENTIFIER NUMBER RET PRINT
|
||||
%token LBRACE RBRACE SEMICOLON ASSIGN PLUS MINUS MULT DIV
|
||||
%token <str> IDENTIFIER NUMBER
|
||||
%token LBRACE RBRACE SEMICOLON ASSIGN PLUS MINUS MULT DIV MOD RET PRINT
|
||||
|
||||
%type <str> expr program statement block
|
||||
|
||||
|
@ -26,7 +25,7 @@ program:
|
|||
|
||||
// Утверждение - либо блок {...}, либо выражение с ; в конце
|
||||
statement:
|
||||
expr SEMICOLON
|
||||
{ printf("\033[93m\nANOTHER STATEMENT\n\033[0m"); } expr SEMICOLON
|
||||
| block
|
||||
;
|
||||
|
||||
|
@ -44,6 +43,7 @@ expr:
|
|||
| expr MINUS expr // выражения вида expr-expr
|
||||
| expr MULT expr // выражения вида expr*expr
|
||||
| expr DIV expr // выражения вида expr/expr
|
||||
| expr MOD expr // выражения вида expr%expr
|
||||
| IDENTIFIER { printf("IDENTIFIER = %s\n", $1); free($1); }
|
||||
| NUMBER { printf("NUMBER = %s\n", $1); free($1); }
|
||||
;
|
||||
|
@ -60,6 +60,6 @@ int main(int argc, char **argv) {
|
|||
yyin = f;
|
||||
}
|
||||
yyparse();
|
||||
printf("\033[92mSuccess parsed!\033[0m");
|
||||
printf("\033[92m\nSuccess parsed!\033[0m");
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue