Уменьшать бизонов до начального символа, только если найден EOF

Я использую Bison с Flex. У меня есть следующее правило в моем входном файле Yacc:

program     : PROGRAM m2 declarations m0 block {cout << "Success\n"} ;

Проблема в том, что если у меня есть программа, которая является частично правильной, но затем перед EOF есть «мусор», он будет уменьшаться в соответствии с предыдущим правилом, сообщать об «успехе» и только потом сообщать об ошибке.

Я хочу включить EOF в конце правила, приведенного выше, но тогда Flex должен будет вернуть EOF при чтении<<EOF>>и как Бизон узнает, когда закончить программу? Теперь у меня есть это во Flex:

<<EOF>>    {return 0;}

Ответы на вопрос(1)

Ваш ответ на вопрос