Zmniejsz żubra do symbolu startowego tylko wtedy, gdy znaleziono EOF
Używam Bison z Flex. W moim pliku wejściowym Yacc mam następującą regułę:
program : PROGRAM m2 declarations m0 block {cout << "Success\n"} ;
Problem polega na tym, że jeśli mam program częściowo poprawny, ale przed EOF jest jakiś „śmieci”, to zmniejszy się on zgodnie z poprzednią regułą, zgłosi „sukces” i dopiero wtedy zgłosi błąd.
Chcę dołączyć EOF na końcu powyższej reguły, ale wtedy Flex musiałby zwrócić EOF, gdy przeczytał<<EOF>>
i jak Bison wiedziałby, kiedy zakończyć program? Teraz mam to w Flex:
<<EOF>> {return 0;}