Я пишу консольное приложение на C++, и мне нужно, чтобы пользовательская командная система, подобная оболочке, настраивала параметры в приложениях. Например, пользователь может написать что-то вроде этого:Как проанализировать дерево команд в C++?
регистраимя
соединениеоткрыт[телнет | SSH]
соединениепереключательтелнет
отправитьтекст
соединениепереключательSSH
отправитьтекст
... и так далее ...
Таким образом, очевидно, что мы имеем некоторое дерево команд, в приведенном выше примере мы имеем:
--register
|
--connetion
| |--open
| |--switch
|
--send
Каждая команда может иметь различное количество параметров.
ВОПРОС:
- Как разобрать такое дерево команд?
Теперь я разбираю его с помощью регулярных выражений, но это решение действительно уродливое. Я читал о YACC и LEX, но я не уверен, что это действительно хорошая идея.
Есть ли широко используемый подход к дереву команд синтаксического анализа? Я не классный в теории лексического анализа, поэтому я был бы признателен, если вы ответите не академично.
Предложение: использовать государственную машину, которая имеет (состояние, символ) -> (состояние, опция <станд :: функция>) функция перехода. –
lorro