Как сказать Бизону, что есть синтаксическая ошибка?

StackOverflow https://stackoverflow.com/questions/6803648

  •  25-10-2019
  •  | 
  •  

Вопрос

Что происходит, так это то, что есть конкретный случай, когда после анализа AST я узнаю, есть ли ошибка или нет, когда правило закончено. Я попробовал yyerror ("blah") без удачи.

Поскольку я не могу сказать, что есть ошибка, она завершает другое правило и теперь имеет конфликт с уменьшением/уменьшением. Это раздражает, потому что я знаю, когда один из них недействителен, не глядя на другого, но пользователь должен страдать, потому что я не знаю, как сказать, игнорируйте эту ветвь.

Как решить эту проблему?

Это было полезно?

Решение

Ты хочешь YYERROR нет yyerror - Постановка YYERROR В действии приводит синтаксис YYABORT). yyerror это подпрограмма, которую Bison вызывает с сообщениями об ошибках - реализация по умолчанию состоит в том, чтобы распечатать сообщение об ошибке - но не имеет ничего (в частности), связанного с ошибками синтаксиса или синтаксиса.

Обратите внимание, что это не имеет отношения к каким-либо конфликтам с уменьшенным кразом (или уменьшением смены)-конфликты не являются ошибками, это вещи в вашей грамматике, которые делают его не-LALR (1), чтобы бизон, генерируемый синщелом, не может надежно распознать это.

Другие советы

Вам необходимо создать синтаксис, который свободен от уменьшения/уменьшения конфликтов

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top