цепочки условий добавил
parent
8080e13a2e
commit
6b954531b3
|
@ -4,6 +4,7 @@
|
|||
#include <string.h>
|
||||
|
||||
extern int yylineno;
|
||||
extern char *last_lexeme;
|
||||
void yyerror(const char *s);
|
||||
int yylex();
|
||||
|
||||
|
@ -20,10 +21,12 @@ extern FILE *yyin;
|
|||
%token IF ELSE WHILE RETURN PRINT
|
||||
%token AND OR NOT GE LE EQ NE
|
||||
|
||||
%nonassoc '>' '<' GE LE EQ NE
|
||||
%right '='
|
||||
%left OR
|
||||
%left AND
|
||||
%left '=' '+' '-'
|
||||
%left EQ NE
|
||||
%left '<' '>' GE LE
|
||||
%left '+' '-'
|
||||
%left '*' '/' '%'
|
||||
%right NOT UMINUS
|
||||
|
||||
|
@ -74,13 +77,17 @@ expr:
|
|||
%%
|
||||
|
||||
void yyerror(const char *s) {
|
||||
if (last_lexeme) {
|
||||
fprintf(stderr, "\033[91mError at line %d: %s (near '%s')\n\033[0m", yylineno, s, last_lexeme);
|
||||
} else {
|
||||
fprintf(stderr, "\033[91mError at line %d: %s\n\033[0m", yylineno, s);
|
||||
}
|
||||
exit(1);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
if (argc < 2) {
|
||||
fprintf(stderr, "\033[91mUsage: <...>.exe <input_file>\n\033[0m", argv[0]);
|
||||
fprintf(stderr, "\033[91mUsage: %s <input_file>\n\033[0m", argv[0]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue