54 lines
1.3 KiB
Plaintext
54 lines
1.3 KiB
Plaintext
%{
|
||
#include "C:\Users\user\Desktop\УЧЕБА\6_СЕМ\КОМПИЛЯТОРЫ\flex_bison_test\analyzers\polynomials\poly_calc\poly_calc.h"
|
||
#include "polynomials.tab.h"
|
||
|
||
extern FILE *yyin;
|
||
char allowed_variable = 0;
|
||
int current_line_number = 1;
|
||
|
||
void yyerror(const char *s) {
|
||
fprintf(stderr, "Error at line %i: %s\n", current_line_number, s);
|
||
}
|
||
|
||
%}
|
||
|
||
%%
|
||
"print" { return PRINT; }
|
||
";" { return SEMICOLON; }
|
||
"=" { return EQUAL; }
|
||
[0-9]+ {
|
||
init_polynomial(&yylval.poly);
|
||
add_term(&yylval.poly, atoi(yytext), 0);
|
||
return NUMBER;
|
||
}
|
||
|
||
[a-z] {
|
||
if (allowed_variable == 0) {
|
||
allowed_variable = yytext[0];
|
||
}
|
||
else if (yytext[0] != allowed_variable) {
|
||
yyerror("Bad variable in expression");
|
||
exit(1);
|
||
}
|
||
|
||
init_polynomial(&yylval.poly);
|
||
add_term(&yylval.poly, 1, 1);
|
||
return VARIABLE;
|
||
}
|
||
|
||
[A-Z] {
|
||
yylval.var_name = yytext[0];
|
||
return VAR_POLY;
|
||
}
|
||
|
||
[-+*^()] { return yytext[0]; }
|
||
[ \t] ;
|
||
\n { current_line_number++; }
|
||
. { yyerror("Unknown symbol");
|
||
exit(1);
|
||
}
|
||
%%
|
||
|
||
int yywrap() {
|
||
return 1;
|
||
} |