PEREMENNOY PRISVOENO EXPR

master
serr 2025-05-12 22:19:41 +03:00
parent 4990c0b6a3
commit ff57526744
3 changed files with 27 additions and 4 deletions

View File

@ -9,13 +9,16 @@ 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-zA-Z] {
[a-z] {
// Если переменная еще не задана, запоминаем первую встреченную
if (allowed_variable == 0) {
allowed_variable = yytext[0];
@ -31,9 +34,13 @@ char allowed_variable = 0;
return VARIABLE;
}
[A-Z] {
return VAR_POLY;
}
[-+*^()] { return yytext[0]; }
[ \t] ;
\n { return 0; }
\n { allowed_variable = 0; }
. { printf("unknown: %s\n", yytext); exit(0); }
%%

View File

@ -15,6 +15,7 @@ extern char allowed_variable;
Polynomial poly;
}
%token SEMICOLON PRINT VAR_POLY EQUAL
%token <poly> NUMBER VARIABLE
%type <poly> expr
@ -25,12 +26,24 @@ extern char allowed_variable;
%%
input:
| input expr {
| input line
;
line: expr SEMICOLON {
sort_polynomial(&$1);
free_polynomial(&$1);
}
| PRINT expr SEMICOLON {
printf("Result: ");
sort_polynomial(&$2);
print_polynomial(&$2, allowed_variable);
free_polynomial(&$2);
}
| VAR_POLY EQUAL expr SEMICOLON {
printf("PEREMENNOY PRISVOENO EXPR: ");
print_polynomial(&$3, allowed_variable);
free_polynomial(&$3);
}
;
expr: NUMBER { $$ = $1; }

View File

@ -1 +1,4 @@
((3*x^2 - 2*x + 1) * (x^3 - 4*x) + (5*x^4 - x^2)^2) - (x + 1)^4
2+2;
Z = 2+2;
print ((3*z^2 - 2*z + 1) * (z^3 - 4*z) + (5*z^4 - z^2)^2) - (z + 1)^4;
print (x+2)^2 +1;