Ожидается ошибка бизона $ end - PullRequest
1 голос
/ 05 августа 2011

Я работаю над парсером в Bison.При анализе тестового примера Bison выдает синтаксическую ошибку, говоря, что ожидал $ end, но токенов было больше.Я искал в руководстве по Bison значение $ end, но, похоже, оно не указывает, в каких именно условиях он будет ожидать этот токен.Я использовал рекурсивное правило вида

%start program

%%

program 
   : rule
   | program rule;

, чтобы определить корень моей грамматики.Бизон радостно совпадает с первыми тремя вызовами rule, но бросает четвертый, говоря, что ожидал конца $.Как я могу указать Bison, что он должен ожидать и соответствовать большему количеству токенов?

1 Ответ

1 голос
/ 05 августа 2011

Похоже, ваша проблема где-то в деталях. Что-то ближе к концу вашего входного потока не соответствует «правилу». Включите отладку и посмотрите, что это говорит вам (проверьте YYDEBUG и yydebug, если вы не знакомы с ними.)

Просто чтобы прояснить: когда вы говорите «четвертый вызов», я предполагаю, что вы имеете в виду «четвертый независимый тестовый случай» (и поэтому тот факт, что это четвертый вызов, не имеет значения.) Или вы имеете в виду, что входной поток, который соответствует «правилу» "четыре раза терпит неудачу, но тот, который совпадает три раза, оказывается успешным?

...