%{ #include #include #include #include "funkcija.hpp" #include using namespace std; void yyerror(string s) { cerr << s << endl; exit(EXIT_FAILURE); } extern int yylex(); map tablica; %} %union { char slovo; double c; Funkcija *f; } %left '+' '-' %left '*' '/' %nonassoc '\'' %type F %token value_token sin_token cos_token function_token x_token %token num_token %token f_id %% Program: Program Naredba | ; Naredba: value_token '"' F '"' '\n' { cout << $3->vrednost(0) << endl; delete $3; } | function_token f_id '=' '"' F '"' '\n' { tablica[$2] = $5; } | f_id '\n'{ if (!tablica.count($1)) yyerror("Fja nije definisana"); tablica[$1]->ispis(); cout << endl; } | f_id '\'' '\n' { if (!tablica.count($1)) yyerror("Fja nije definisana"); Funkcija *tmp = tablica[$1]->izvod(); tmp->ispis(); delete tmp; cout << endl; } | f_id '[' num_token ']' '\n' { if (!tablica.count($1)) yyerror("Fja nije definisana"); cout << tablica[$1]->vrednost($3) << endl; } ; F: F '+' F { $$ = new Zbir($1, $3); delete $1; delete $3; } | F '-' F { $$ = new Razlika($1, $3); delete $1; delete $3; } | F '*' F { $$ = new Proizvod($1, $3); delete $1; delete $3; } | F '/' F { $$ = new Kolicnik($1, $3); delete $1; delete $3; } | F '\'' { $$ = $1->izvod(); delete $1; } | '(' F ')' { $$ = $2; } | sin_token '(' F ')' { $$ = new Sinus($3); delete $3; } | cos_token '(' F ')' { $$ = new Kosinus($3); delete $3; } | num_token { $$ = new Konstanta($1); } | x_token { $$ = new Promenljiva(); } | f_id { if (!tablica.count($1)) yyerror("Fja nije definisana"); $$ = tablica[$1]->klon(); } ; %% int main() { yyparse(); return 0; }