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) { 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; }

View File

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

View File

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