/* parser.y - parser pliku test_pnr.xml */ %{ #include int yylex(); int yyerror(const char*); %} %define parse.error verbose %define api.value.type {char *} %token DANEXML_O DANEXML_Z PNR_O PNR_Z PASS_O PASS_Z NAME_O NAME_Z SURNAME_O SURNAME_Z INNYTAG_O INNYTAG_Z INNYTAG_OZ TEXT %% kod : DANEXML_O zawartosc_xml DANEXML_Z {printf("\nSukces\n");} ; zawartosc_xml : PNR_O zawartosc_pnr PNR_Z ; zawartosc_pnr : zawartosc_pnr passenger | zawartosc_pnr flight | zawartosc_pnr inny | /* pusta produkcja */ ; passenger : PASS_O zawartosc_passenger PASS_Z ; zawartosc_passenger : NAME_O imie NAME_Z SURNAME_O nazwisko SURNAME_Z | NAME_O imie NAME_Z SURNAME_O nazwisko SURNAME_Z inny ; imie : TEXT {printf("******imie: %s******\n", $1);} ; nazwisko : TEXT {printf("******nazwisko: %s******\n", $1);} ; flight : /* pusta produkcja */ ; inny : INNYTAG_O inny INNYTAG_Z | inny INNYTAG_O inny INNYTAG_Z | INNYTAG_OZ | inny INNYTAG_OZ | tresc ; tresc : TEXT | tresc TEXT | /* pusta produkcja */ ; %% int main(void) { yyparse(); } int yyerror(const char* msg){ printf("Blad skaldniowy: %s\n", msg); }