• Aulas
  • Maio
  • 22/05 - VMtranslator

G - VM/Translator

Entrega
Sexta - 22/05

Nesse projeto iremos criar programas em VM além de uma parte do programa VM translator que é responsável por traduzir os códigos escrito em linguagem VM de pilha para a linguagem assembly.

Instruções

As instruções técnicas referente ao projeto está no Lab 14.

Programas a serem implementados

Os módulos estão na pasta g_VM/src/vm/:

  1. 1a-Add
  2. 1b-Calc
  3. 1c-Div
  4. 1d-loop
  5. 2a-Calculadora
  6. 2b-Calculadora
  7. 2c-Calculadora
  8. add32
  9. diff
  10. fibonacci
  11. invert
  12. overflow
  13. remove
  14. roll
  15. somatoria
  16. trapz
  17. xor

As descrições do objetivo de cada implementação são apresentadas nos arquivos Main.

Módulos a serem implementados no tradutor

Apenas o Code.java.

O projeto no total possui 5 módulos, sendo que o módulo VMTranslator.java, VMtranslate.java, Parser.java e Error.java já estão foram entregues implementados.

Os módulos estão listados de maneira Top - Down


  • VMTranslator

    • Arquivo : VMTranslator.java
    • Descrição : Main do projeto. Recebe como parâmetro o nome do arquivo .vm (ou diretório) e o nome do arquivo binário assembly (.nasm) a ser escrito, passa essas informações para a classe VMtranslate.
    • Dependências : VMtranslate.java
  • VMtranslate

    • Arquivo : VMtranslate.java
    • Descrição : Classe responsável por criar o código assembly, ela que efetivamente faz a varredura do arquivo .vm de entrada e escreve o arquivo .nasm de saída, gerando a tradução vm -> nasm.
    • Dependências : Code.java, Parser.java
  • Code

    • Arquivo : Code.java
    • Descrição : Traduz comandos da linguagem vm para os comandos em nasm que a executam.
    • Dependências : None
  • Parser

    • Arquivo : Parser.java
    • Descrição : Encapsula o código de leitura. Carrega as instruções na linguagem vm, analisa, e oferece acesso as partes da instrução (campos e símbolos). Além disso, remove todos os espaços em branco e comentários.
    • Dependências : none

Implementação

Deve-se implementar no Code.java somente as operações aritméticas e push/pop.

Parte 1 - Conceito C+

  1. 1a-Add
  2. 1b-Calc
  3. 1c-Div
  4. 1d-loop
  5. 2a-Calculadora
  6. 2b-Calculadora
  7. 2c-Calculadora
  8. somatoria
  9. trapz
  10. xor

Parte 2 - Conceito B+

  1. add32
  2. diff
  3. fibonacci
  4. invert
  5. overflow
  6. remove
  7. roll

Parte 3 - Conceito A+

  • Code.writeArithmetic()
  • Code.writePushPop()

Para testar

A seguir os testes que devem passar para cada nota :

C+

  1. 1a_Add
  2. 1b_Calc
  3. 1c_Div
  4. 1d_loop
  5. 2a_Calculadora
  6. 2b_Calculadora
  7. 2c_Calculadora
  8. somatoria
  9. trapz
  10. xor

B+

  1. add32
  2. diff
  3. fibonacci
  4. invert
  5. overflow
  6. remove
  7. roll

A+

  • SimpleNeg
  • SimpleEq
  • SimpleGt
  • SimpleLt
  • SimpleAnd
  • SimpleOr
  • SimplePopTemp
  • SimplePushAdd

Instruções

As instruções técnicas referente aos programas em VM estão no laboratório Lab15-VM.

Para testar, basta executar o pytest -k <módulo>.

Formulários