Не выполнять семантические действия при ошибке Bison

Я должен построить компилятор в бизоне. Я хочу, чтобы мой компилятор работал как большинство компиляторов, если есть какие-либо синтаксические ошибки, перечислите их все и затем выручите. Проблема в том, что у меня есть семантические действия для каждого правила, и мой компилятор сообщает обо всех синтаксических ошибках, но все еще выполняет все семантические действия. Есть ли способ сказать бизону игнорировать семантические действия, если есть синтаксическая ошибка, но продолжать искать все синтаксические ошибки?

Спасибо!

-1

Решение

Не понятно, о чем вы спрашиваете. Вы хотите, чтобы синтаксический анализатор бизонов вообще не выполнял никаких действий, если в вашей программе есть какие-либо синтаксические ошибки? Это сложно, так как бизон выполняет действия немедленно, так как он сокращает правила, поэтому у него нет хорошего способа узнать, может ли быть где-нибудь ошибка в будущем. Для действий после синтаксическая ошибка (при условии, что у вас есть правила восстановления после ошибки — она ​​выйдет после первой синтаксической ошибки, если у вас ее нет), вы можете иметь глобальный флаг и просто заставить все действия проверять этот флаг, прежде чем что-либо делать.

Если вы хотите отключить действия до появления первой ошибки, единственное, о чем я могу подумать, — это иметь два синтаксических анализатора с одинаковой грамматикой — один не выполняет действий, а другой — их выполняет. Используйте первый анализатор, чтобы определить, есть ли какие-либо ошибки, а затем перемотайте входные данные и используйте второй анализатор, только если ошибок нет.

1

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector