some changes

master
serr 2025-04-01 17:16:53 +03:00
parent bd1cc1e786
commit a2c3c9c9c0
3 changed files with 9 additions and 8 deletions

View File

@ -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; }

View File

@ -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;
}

View File

@ -3,7 +3,7 @@
x = z + 3 + 5;
{
x = 10;
y = x + 5;
y = x + 5 % 2;
{
z = y * 2 / 5 * 3;
}