Projeto: Simulador de execução de programas

AVISO: Esta página ainda está em construção, em fase de rascunho !


Descrição do Projeto

O projeto atualmente consiste de duas partes, na forma de applets Java :

  1. um emulador de um computador simplificado;
  2. um compilador de uma linguagem imperativa simplificada, gerando código para tal computador.
  3. Abaixo seguem as descrições detalhadas das duas partes:
    (baseado em http://www.ime.usp.br/~leo/mac323/03-1/tarefas.html)

    Parte 1 - Emulador

    Emula um computador simplificado de 12 instruções (10 comuns e 2 extensões) e 100 posições de memória.
    Cada uma das posições de memória contém até 6 caracteres.
    Quando o conteúdo de uma posição de memória representa uma instrução (comum), só serão considerados os 3 primeiros, sendo o primeiro o número da instrução e os 2 restantes um complemento (geralmente um endereço de memória; de agora em diante o chamaremos de EE).
    Quando representar um valor numérico, este estará entre -99999 e 999999.

    
      Instruções Comuns
          
      0 AC <- cEE (se EE<>00, senão final de progr.) | Legenda:
      1 EE <- cAC                                    | AC  = ACumulador
      2 AC <- cAC + cEE                              | EE  = complemento da instrução 
      3 AC <- cAC - cEE                              |       (geralmente um Endereço)
      4 AC <- cAC * cEE                              | c_  = 'conteúdo do'
      5 AC <- cAC / cEE                              | EPI = Endereço da Próxima 
      6 se cAC>0 então EPI <- EE                     |       Instrução
      7 EE <- leitura teclado                        | 
      8 saída cEE                                    |
      9 EPI <- EE (desvio incondicional)             |
    
      Instruções Extras
    
      0-0000  Final de programa
      0-xxxx  AC <- xxxx
      1-xxxx  EE <- xxxx  [TO DO: ISSO AQUI NÃO ESTÁ BEM DEFINIDO]
          
        

    Exemplo de código fonte, acompanhado de um código equivalente para o emulador

          le ( x ) ; le ( y ) ; le ( z ) ; w = x + y + z      ; imprime ( w ) ;
           799         798        797         099 298 297 109   809
        

    Parte 2 - Compilador

    O compilador recebe um programa escrito em uma linguagem simplificada, e gera o código correspondente para o emulador descrito acima.

    Essa linguagem, baseada em C, possui os seguintes elementos:

       Expressões Aritméticas: envolvendo '+','-','*' e '/'
    
       Expressões Lógicas: envolvendo operadores
                           - lógicos ( '&&' = E, '||' = OU e '!' = NÃO )
                           - relacionais ( '<', '>', '<=', '>=', '==', '!=' )
    
       Atribuição: "variavel = expressão"
    
       Comando de seleção (if) : " if ( expr_lógica ) comando ; ", ou
                                 " if ( expr_lógica ) comando1 ; else comando2 ; "
    
       Comando de repetição (while) : " while ( expr_lógica ) comando ; ", ou
                                      " while ( expr_lógica ) { comando1 ; ...; comandoN } "
    
       Comando simplificado de leitura (le): " le ( var1 , var2 , ... ) ; "
    
       Comando simplificado de escrita (imprime): " imprime ( var1 , var2 , ... ) ; "
        

    Applets

    Atualmente os applets estão em estágio final de desenvolvimento, mas serão colocados aqui assim que estiverem concluídos. Por isso aqui só estão disponíveis as versões de demonstração deles.

    Applet: Compilador

    [Não há applet de demonstração disponível]

    Applet: Emulador


    Objetivo do projeto

    O objetivo principal é mostrar ao aluno como um programa é executado pelo computador, de maneira semelhante às aulas introdutórias da disciplina "MAC110 - Introdução à Computação" do IME/USP.
    Além disso, o aluno aprende a "pensar" através do paradigma de programação imperativa, pois ele as mudanças no estado do programa (suas variáveis) causadas pelas instruções.


    Observações

    Ainda há a possibilidade de se unir essas duas partes do projeto para a criação de um simulador da execução direta do código fonte. Para um aluno, tal simulador poderia ser mais útil ao longo das aulas do semestre, pois ele não deveria lidar com programação em baixo nível durante um curso introdutório.


    Retornar à página principal
    'Webmaster': Wendel Scardua [articuno(a)linux-ime-usp-br]
    Last modified: Wed Jul 23 10:27:09 BRT 2003