Разработка интерактивной оболочки

У меня есть заявка; Чтобы взаимодействовать с ним, я должен разработать интерактивную оболочку. Оболочка примет ввод от пользователя и отправит его на сервер, который обработает и вернет ответ.

В прошлом я делал такие вещи, но они обычно имели следующий формат:

Shell>> COMMAND arg1 arg2 arg3 ..

и моя реализация была похожа на:

/* Mock implementation */
while(true) {
in = readline()
tokens = in.split(' ') //split based on space
switch(token[0])  {
case "Command_a": processA(token[1], token[2])
case "Command_b": processB(token[1], token[2], token[3])
}
}

На этот раз я должен работать с более обширной грамматикой для пользовательского ввода. Если я использую свой текущий подход, это будет очень сложно с большим количеством if , if-elseif-else, if-else, switch операторы для анализа и генерации ответа.

Как я могу подойти к этой проблеме таким образом, чтобы сделать переводчика модульным и обслуживаемым? Как реализован популярный CLI-интерфейс? Я буду очень признателен за некоторые примеры кода.

PS: выбор языка ограничен C ++ / Python

0

Решение

Вы можете разработать свой собственный синтаксический анализатор и интерпретатор, используя bison и flex, но, вероятно, разумнее встроить существующий интерпретатор, такой как Python, Lua или Squirrel.

2

Другие решения

Взгляни на повышение :: дух, или просто вставьте Lua, как предлагали другие.

1

CMD модуль в Python, возможно, с добавлением Pyparsing должен соответствовать вашим потребностям идеально.

1

Перейти к модулю cmd:

Класс Cmd обеспечивает простую структуру для написания ориентированных на строки интерпретаторов команд. Они часто полезны для тестовых наборов, административных инструментов и прототипов, которые позже будут обернуты в более сложный интерфейс.

0
По вопросам рекламы [email protected]