Objetivo: implementar um interpretador para uma máquina baseada em pilha.

Contexto: Diversas linguagens de programação são compiladas para uma máquina abstrata baseada em Pilha. Nessa máquina, os operandos e os resultados das operações são armazenados em um pilha.

Nessa atividade iremos implementar um REPL (Read Eval Print Loop) similar ao que vocês utilizam quando interagem com o Python, porém interpretando comandos para uma máquina baseada em Pilha, como explicado no vídeo abaixo:

https://www.youtube.com/watch?v=_j3jzoZaSbc

Deixarei disponível em https://github.com/profsergiocosta/lab-stackinterpreter o código fonte base para o desenvolvimento. Abaixo está o código que implementa o REPL. Esse código já está interagindo e lendo as entradas do usuário e passando para o interpretador.

#include <stdio.h>

#include "interpret.h"

static void repl()
{
  char line[1024];
  for (;;)
  {
    printf("> ");

    if (!fgets(line, sizeof(line), stdin))
    {
      printf("\\n");
      break;
    }

    interpret(line);
  }
}

int main () {

    repl();
    return 0;
}

Nó código base já tem o arquivo de cabeçalho do interpretador:

#ifndef interprete_h
#define interprete_h

void interpret (const char *source) ;

#endif

E também já está disponível a implementação da extração do comando e o argumento passado pelo usuário.


#include <string.h>
#include <stdlib.h>
#include <stdio.h>

#include "interpret.h"
#include "stack"

void interpret (const char *source) {

		char op[10];
    char arg[10];

    sscanf (source, "%s%s", op, arg);
    printf("operação: %s\\n", op);
    printf("argumento: %s\\n",  arg);

}

Então, quando o usuário digitar:

> push 10