Какой лучший генератор синтаксического анализатора LALR для C ++, который может генерировать значимые сообщения об ошибках - PullRequest
1 голос
/ 07 декабря 2009

Я ищу лучшее решение для генератора синтаксического анализатора LALR для C ++, которое позволило бы мне генерировать действительно хорошие сообщения об ошибках. Я действительно ненавижу синтаксические ошибки, которые генерирует MySQL, и я хочу взять в нем парсер и заменить его средством проверки "lint", которое скажет мне больше, чем просто

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'a from users' at line 1

Я использовал YACC / LEX и BISON / FLEX. Он должен работать на Mac или Linux.

Ответы [ 2 ]

3 голосов
/ 07 декабря 2009

Зачем тебе LALR? Одним из преимуществ синтаксических анализаторов LL (k) является то, что они часто упрощают генерацию четких сообщений об ошибках. Большинство грамматик, которые могут быть проанализированы синтаксическим анализатором LALR, могут быть легко реорганизованы для анализа синтаксическим анализатором LL (k).

ANTLR - это популярный генератор синтаксического анализатора LL (k), который может генерировать C ++ (а также ряд других языков). С Глава 10 Полной ссылки ANTLR :

Качество языка сообщения об ошибках приложения и стратегия восстановления часто делает разница между профессионалом приложение и любительское приложение. Ошибка восстановления процесс восстановления из синтаксиса ошибка путем изменения входного потока или потребляя символы, пока парсер не сможет перезапустить в известном состоянии. Много ручной и многие не на основе LL распознаватели излучают меньше, чем оптимальные сообщения об ошибках, тогда как ANTLR-генерируемые распознаватели автоматически выдавать очень хорошую ошибку сообщения и восстановить разумно, как показано в этой главе.

Многие грамматики также доступны для ANTLR , включая грамматику MySQL .

0 голосов
/ 09 декабря 2009

Если вы обнаружите, что ANTLR не полностью решит вашу проблему, тогда вы можете рассмотреть basil . Это генератор синтаксического анализатора LR (1), который был разработан и написан для создания синтаксического анализатора C ++.

...