Исключения в LEX&YACC

Я разрабатываю компилятор lex/yacc c.

Чтобы обрабатывать сбои и анализировать ошибки, я хочу развернуть обработчик системы исключений.

На самом деле обрабатывается только сообщение "ошибка синтаксического анализа", независимо от проблемы. Например:

typedef struct , struct_name{...} этот ввод приведет к ошибке синтаксического анализа из-за лишней запятой.

Моя цель состоит в том, чтобы создать контекстное исключение, что даст нам возможность сосредоточиться именно на проблеме. Например, в этом примере: "Неверное объявление структуры"

Мне очень нужна помощь, чтобы решить эту проблему.


person Aymanadou    schedule 04.11.2011    source источник
comment
Сначала я подумал, что должен указать набор сообщений об ошибках для каждой проверенной грамматики, и если какая-либо ошибка будет обработана, она выдаст исключение, соответствующее текущей грамматике. Я не знал, возможно это или нет!   -  person Aymanadou    schedule 04.11.2011


Ответы (1)


Это войдет в ваш парсер. Во время работы он получает токены от лексера. Если следующий токен не «подходит» под текущее правило, значит, у вас проблема. К счастью, уже существует раздел для работы с такими ситуациями! См. устранение ошибок bison для gnu версии yacc и как с этим бороться. Он будет проходить через концепции и переменные, чтобы справиться с ситуацией, которая у вас есть.

person Spencer Rathbun    schedule 04.11.2011
comment
Спасибо за ваш ответ, но я не могу использовать решение flex/bison, только lex и yacc. Есть ли для него подобное решение? - person Aymanadou; 04.11.2011
comment
@Aymanadou Bison — это версия yacc GNU. Оно должно быть почти идентичным. То же самое касается флекса. Это расширенные версии lex и yacc с открытым исходным кодом. Раздел исправления ошибок Bison по-прежнему должен применяться именно к коду yacc. - person Spencer Rathbun; 04.11.2011