Мне интересно, могу ли я представлять CLI-приглашения, используя грамматику, основанную на CFG или PEG; например, для автоматического создания мастера настройки или опроса. Чтобы добиться этого, анализатор должен запрашивать у пользователя каждый следующий входной токен с учетом того, что он уже ввел. Пример:
customer_info -> "My name is " name_expression " and I'm " %age " years old."
name_expression -> %name %name
| %name
name_expression
позволяет ввести имя и фамилию или просто одно имя. Строковые константы будут автоматически заполняться приглашением. Эта спецификация скомпилирует следующий пример опыта для гипотетического пользователя:
My name is (enter %name):
>> john
My name is john (1 for "%lastname", 2 for " and I'm "):
>> 2
My name is john and I'm (enter a number):
>> 39
My name is john and I'm [39] years old.
Prompt complete, exiting.
Я прочитал небольшую статью об «обратных парсерах», идея в том, что во время интерактивного диалога все ваши потенциальные ответы выкладываются на каждом этапе разговора (вспомните разговор в видеоигре в стиле RPG с NPC) . Информация об этой технике в Интернете, кажется, скудна, и я не уверен, что она будет делать то, что я хочу полностью.
Я изучил парсеры Эрли, предиктивные парсеры LL и некоторые другие, но изучение каждого из этих кандидатов только для того, чтобы выяснить, подходит ли оно для этого случая, кажется неразумным. Мой вопрос заключается в том, какой метод синтаксического анализа лучше всего позволит мне запросить у пользователя список допустимых токенов с неполным входным предложением?
Хотя мне удобно разбирать рекурсивный спуск и использовать различные генераторы синтаксических анализаторов, я изучал материал только около года, так что извините за мое невежество.
Спасибо.