Как сказать Бизону, что есть синтаксическая ошибка?
-
25-10-2019 - |
Вопрос
Что происходит, так это то, что есть конкретный случай, когда после анализа AST я узнаю, есть ли ошибка или нет, когда правило закончено. Я попробовал yyerror ("blah") без удачи.
Поскольку я не могу сказать, что есть ошибка, она завершает другое правило и теперь имеет конфликт с уменьшением/уменьшением. Это раздражает, потому что я знаю, когда один из них недействителен, не глядя на другого, но пользователь должен страдать, потому что я не знаю, как сказать, игнорируйте эту ветвь.
Как решить эту проблему?
Решение
Ты хочешь YYERROR
нет yyerror
- Постановка YYERROR
В действии приводит синтаксис YYABORT
). yyerror
это подпрограмма, которую Bison вызывает с сообщениями об ошибках - реализация по умолчанию состоит в том, чтобы распечатать сообщение об ошибке - но не имеет ничего (в частности), связанного с ошибками синтаксиса или синтаксиса.
Обратите внимание, что это не имеет отношения к каким-либо конфликтам с уменьшенным кразом (или уменьшением смены)-конфликты не являются ошибками, это вещи в вашей грамматике, которые делают его не-LALR (1), чтобы бизон, генерируемый синщелом, не может надежно распознать это.
Другие советы
Вам необходимо создать синтаксис, который свободен от уменьшения/уменьшения конфликтов