Как я могу получить Flex Scanner для возврата жетона ошибки Bison? - PullRequest
1 голос
/ 16 февраля 2010

Bison использует специальный токен ошибки (называемый 'error'), который можно использовать в парсере Bison для восстановления после ошибок.Есть ли способ вернуть этот конкретный токен из сканера, сгенерированного Flex?

1 Ответ

1 голос
/ 16 февраля 2010

Токен «error» на самом деле не является токеном. Используется только для обработки ошибок.

На http://dinosaur.compilertools.net/yacc/index.html вы можете прочитать: Ошибка имени токена зарезервирована для обработки ошибок и не должна использоваться наивно.

В моем собственном парсере я использую токен ошибки, подобный этому (для разбора C-подобного макроязыка:

StatementList  :
               |  StatementList Statement ';'
               |  error ';'

Если пользователь делает ошибку, yacc / bison будет продолжаться до следующей точки с запятой (конец инструкции), а затем продолжит работу со следующей инструкцией.

...