...

ользую Boost :: Spirit для создания простого языка «фильтра данных» в моем приложении C ++ GUI для нетехнических пользователей. Язык очень похож на простой английский и разбирается в AST. Меня просят сделать процесс максимально удобным для пользователя, поэтому я хочу предоставить CLang-подобные сообщения об ошибках («Нераспознанный« токен », вы имели в виду« токен »?») И автозаполнение.

Вопрос в том, как использовать грамматику Boost :: Spirit для создания списка возможных токенов для обеих целей (я буду использовать простой алгоритм расстояния до строки, чтобы удовлетворить первое требование)?

Мои идеи пока:

Добавьте позицию и длину в исходном потоке к определению токена, полученному из анализатора.Добавьте специальный неверный токен в грамматику, который будет соответствовать чему угодно ... ну ... не верно :-)Если пользователь нажимает ctrl + пробел, строит AST (с неверным токеном дерево всегда будет построено), затем ищите токен внутри текущей позиции курсораИспользуйте простое сопоставление со всеми возможными токенами (у меня есть список токенов в конце концов) и подготовьте список предложений

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

Еще одно ограничение: я хочу, чтобы грамматика для этого языка была определена только в одном месте; Если грамматика изменится, я хочу, чтобы автозаполнение знало об этих изменениях после перекомпиляции

Ответы на вопрос(0)

Ваш ответ на вопрос