46 lines
1.2 KiB
Plaintext
46 lines
1.2 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;
|
||
%}
|
||
|
||
%%
|
||
"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) {
|
||
fprintf(stderr, "Error: Only variable '%c' is allowed in this expression\n", allowed_variable);
|
||
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] ;
|
||
\n { }
|
||
. { printf("unknown: %s\n", yytext); exit(0); }
|
||
%%
|
||
|
||
int yywrap() {
|
||
return 1;
|
||
} |