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