Возможно ли сообщение о синтаксической ошибке с помощью boost :: xpressive грамматик? - PullRequest
1 голос
/ 10 февраля 2011

Я пытаюсь проанализировать пользовательский язык (не слишком отличающийся от JSON), и я решил попробовать использовать boost expressive, поскольку это выглядело забавно.

Однако, когда совпадение xpressive не удается, оно простовыходит из строя.Есть ли способ, как я могу реализовать какой-то отчет об ошибках?Например, выражение совпадало до 47-го символа (из этого я могу получить номера строк).

Я могу как-то увидеть, как можно настроить каждое подвыражение для поиска других токенов или совпадений после поискатот, который он хочет, и сообщающий об ошибке в этом случае, но кажется, что это будет очень сложный способ сделать это.

Есть ли какая-либо функциональность в выразительном (или может кто-нибудь предложить подход), который позволил бы мнесделать это?

Спасибо.

1 Ответ

0 голосов
/ 13 февраля 2011

Я предлагаю вместо этого использовать ANTLR. Это хороший компромисс между крутыми, ультрасовременными вещами, такими как Boost Spirit / Qi, и стойкими инструментами, такими как lex и yacc. Это может сделать некоторое количество более умных отчетов об ошибках, как вы хотите, без особых усилий.

Обратите внимание, что в настоящее время ANTLR версий 2 и 3 широко используются; 2 включает генерацию кода C ++, а 3 - нет, так что вы можете придерживаться «старой» версии (портирование должно быть довольно простым, если v3 в конечном итоге имеет цель C ++).

...