Уменьшать бизонов до начального символа, только если найден EOF
Я использую Bison с Flex. У меня есть следующее правило в моем входном файле Yacc:
program : PROGRAM m2 declarations m0 block {cout << "Success\n"} ;
Проблема в том, что если у меня есть программа, которая является частично правильной, но затем перед EOF есть «мусор», он будет уменьшаться в соответствии с предыдущим правилом, сообщать об «успехе» и только потом сообщать об ошибке.
Я хочу включить EOF в конце правила, приведенного выше, но тогда Flex должен будет вернуть EOF при чтении<<EOF>>
и как Бизон узнает, когда закончить программу? Теперь у меня есть это во Flex:
<<EOF>> {return 0;}