UnBCIC-TP2 / Oberon-Scala

An implementation of the Oberon language using Scala
55 stars 118 forks source link

Entrega final TACodeGen #160

Closed artdelpi closed 10 months ago

artdelpi commented 10 months ago

.+37 testes (740 linhas) pro TACodeGenerator (14 testes revelam limitações) → Testes simples para statements e expressões não testadas ex: (New Stmt, Exit Stmt, Write Stmt etc)

→ Testes abrangentes para statements e expressions complexas ex: (Loops com operações de array, operações de array com variáveis etc)

→ Testes que revelam limitações do TACodeGenerator (lançam a exceção java.lang.RuntimeException): .Para Double: → Pointer Assignment com double → Array Assignment com double → AddExpression com double → SubExpression com double → MultExpression com double → DivExpression com double → ModExpression com double .MOTIVO: método “computeBinExpressionType” do TypeChecker só lida com inteiros para expressões aritméticas binárias.

.Para Array Assignment: → Índice da array como expressão → Índice da array como elemento de outra lista → Índice da array como variável → Índice da array como double .MOTIVO: método “getArrayOffset” só consegue lidar com valores inteiros passados diretamente.

.+14 testes para o PrettyPrinter (4 revelam limitações) → Testes simples para operações TAC que não estavam sendo testadas ex: (NotOp, Jump, JumpTrue, OrOp etc)

→ Testes que revelaram limitações no PrettyPrinter: .Para IfStatements: não era gerado espaçamento entre “if” e primeiro operando. → Solução: constante singleTab = “ “ acrescentada para formatação adequada

.Para ArrayAssignments: não havia implementado a operação TAC “ArraySet” para atribuição de arrays. → Solução: método “handleArrayOffset” que calcula índice a partir do offset em “ArraySet” + implementação de “ArraySet” em “generateCode”.

.Para ArraySubscript: não havia implementado a operação TAC “ArrayGet”. → Solução: implementação de “ArrayGet” em “generateCode”, inserindo formatação correta.

.Para Loops: não havia implementado a operação TAC NOp para sinalizar label. → Solução: implementação de “NOp” em “generateCode”.

.Demais contribuições: → Tratamento de erros nos métodos generateExpression() e generateStatement(), lançando exceções mais precisas para expressões ou declarações que não tenham sido implementadas.

→ Melhorias nas descrições para clareza e expressividade nas suites de teste.

→ Opção de TACode no backend.