%{ #include #include #include #include #define YYDEBUG 1 using namespace std; void yyerror(string s) { cerr << s << endl; exit(EXIT_FAILURE); } extern int yylex(); map tablica; %} %union { string *s; int x; } %token pocetak_token kraj_token ispisi_token mod_token %token string_token id_token %token broj_token %type Izraz %left '+' '-' %left '*' '/' mod_token %% Program: pocetak_token NizNaredbi kraj_token '.' ; NizNaredbi: NizNaredbi ';' Naredba | Naredba ; Naredba: ispisi_token '(' string_token ')' { cout << *$3 << endl; delete $3; } | ispisi_token '(' Izraz ')' { cout << $3 << endl; } | id_token ':' '=' Izraz { tablica[*$1] = $4; delete $1; } ; Izraz: Izraz '+' Izraz { $$ = $1 + $3; } | Izraz '-' Izraz { $$ = $1 - $3; } | Izraz '*' Izraz { $$ = $1 * $3; } | Izraz '/' Izraz { $$ = $1 / $3; } | Izraz mod_token Izraz { $$ = $1 % $3; } | '(' Izraz ')' { $$ = $2; } | broj_token { $$ = $1; } | id_token { if (!tablica.count(*$1)) yyerror("Nepostojeca promenljiva"); $$ = tablica[*$1]; } ; %% int main() { //yydebug = 1; yyparse(); return 0; }