Command Interpreter é um header-only
escrito em C++ que serve para você criar um shell repl com comandos personalizados para você usar conforme desejar. Nesse artigo vamos ver: dependências, utilização e exemplos.
Para usar o Command Interpreter você precisará da biblioteca: Boost
Use o seu gerenciador de pacotes para instalar a libboost
, exemplo no Ubuntu:
sudo apt install libboost-all-dev
Como trata-se de somente um header-only
você pode baixar direto do navegador ou usar um utilitário para isso, exemplos:
wget https://raw.githubusercontent.com/empirical-soft/command-interpreter/refs/heads/master/command_interpreter.hpp
curl -LO https://raw.githubusercontent.com/empirical-soft/command-interpreter/refs/heads/master/command_interpreter.hpp
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/empirical-soft/command-interpreter/refs/heads/master/command_interpreter.hpp"
Vamos criar um REPL que há 2 comandos:
add
que incrementa, exemplo: add 3 6
que exibirá: 9;inc
que incrementa, exemplo: inc 9
que exibirá: 10.
main.cpp
#include <iostream>
#include <memory>
#include "command_interpreter.hpp"
class Arithmetic : public CommandInterpreter {
constexpr static int add(int x, int y) {
return x + y;
}
constexpr int inc(int x) {
return x + 1;
}
void register_commands() override {
register_command(add, "add", "Add two numbers");
register_command(&Arithmetic::inc, "inc", "Increment a number");
}
};
int main(){
auto a = std::make_unique<Arithmetic>();
std::string comm;
std::cout << ">>> ";
for(;;){
if(!std::getline(std::cin, comm) || comm == "exit"){
break;
}
std::cout << a->eval(comm) << std::endl;
std::cout << ">>> ";
}
return EXIT_SUCCESS;
}
Após compilar e rodar:
g++ main.cpp -o repl
./repl
Exemplo de saída:
Digitar
exit
sai do REPL
>>> add 3 6
9
>>> inc 9
10
>>> exit
Para mais informações acesse o repositório: https://github.com/empirical-soft/command-interpreter.