%{ #include #include #include #include #define YYDEBUG 1 #include "reg_izrazi.hpp" using namespace std; void yyerror(string s) { cerr << s << endl; exit(EXIT_FAILURE); } int yylex(); %} %union { char c; RegIzraz *r; string *s; int i; } %type E T F %type Niz %token basic_token %token slovo_token %token num_token %% Program: Program Naredba | Naredba ; Naredba: basic_token E '\n' { cout << $2->basic() << endl; delete $2; } ; E: E '|' T { $$ = new Disjunkcija($1, $3); } | T { $$ = $1; } ; T: T F { $$ = new Konkatenacija($1, $2); } | F { $$ = $1; } ; F: F '*' { $$ = new Klini($1); } | slovo_token { $$ = new Slovo($1); } | F '+' { $$ = new Plus($1); } | '[' Niz ']' { $$ = new KarakterskaKlasa(*$2); delete $2; } | F '?' { $$ = new Upitnik($1); } | F '{' num_token '}' { $$ = new VisestrukoPojavljivanje($1, $3); } ; Niz: Niz slovo_token { //$$ = new string(*$1 + $2); //delete $1; $$ = $1; *$$ += $2; } | slovo_token { string tmp; tmp += $1; $$ = new string(tmp); } ; %% int main() { //yydebug = 1; yyparse(); return 0; }