Crie Comandos REPL facilmente

🚀 Somente com um arquivo cabeçalho!


Crie Comandos REPL facilmente


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.


Dependências

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

Baixar o Command Interpreter

Como trata-se de somente um header-only você pode baixar direto do navegador ou usar um utilitário para isso, exemplos:

GNU/wget em distros GNU/Linux

wget https://raw.githubusercontent.com/empirical-soft/command-interpreter/refs/heads/master/command_interpreter.hpp

cURL para macOS ou BSD

curl -LO https://raw.githubusercontent.com/empirical-soft/command-interpreter/refs/heads/master/command_interpreter.hpp

PowerShell no Windows

Invoke-WebRequest -Uri "https://raw.githubusercontent.com/empirical-soft/command-interpreter/refs/heads/master/command_interpreter.hpp"

Exemplo de código

Vamos criar um REPL que há 2 comandos:

  1. add que incrementa, exemplo: add 3 6 que exibirá: 9;
  2. 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.


cpp cppdaily boost repl


Compartilhe


Nosso canal no Youtube

Inscreva-se


Marcos Oliveira

Marcos Oliveira

Desenvolvedor de software
https://github.com/terroo


Crie Aplicativos Gráficos para Linux e Windows com C++

Aprenda C++ Moderno e crie Games, Programas CLI, GUI e TUI de forma fácil.

Saiba Mais

Receba as novidades no seu e-mail!

Após cadastro e confirmação do e-mail, enviaremos semanalmente resumos e também sempre que houver novidades por aqui para que você mantenha-se atualizado!