Как мне сказать бизону есть синтаксическая ошибка? - PullRequest
1 голос
/ 24 июля 2011

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

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

Как мне исправить эту проблему?1005 *

Ответы [ 2 ]

2 голосов
/ 24 июля 2011

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

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

0 голосов
/ 24 июля 2011

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

...