Maxwell Oliveira dos Reis - 221002100
Luiz Eduardo Pereira dos Reis - 221017088
João Gilberto de Oliveira Teixeira - 211036070
O tipo Location foi dividido em "BaseLocation" e "NullLocation", o motivo ficará mais claro a seguir.
Ponteiros:
Quando um ponteiro é declarado, ele ainda não tem um espaço reservado na memória. Assim, no mapa "globals", nós adicionamos à este ponteiro uma NullLocation, para representar isto.
Ao dar o comando "NEW(a)", o ponteiro "a" passará a ter um espaço na memória. Isso é, deixará de ter uma NullLocation e terá uma entrada no mapa locations.
O assignment para ponteiros também foi implementado.
Uma coleção de testes para ponteiros também foi adicionada.
Segue um exemplo do quê agora é possível fazer com os ponteiros. Note que, neste caso, tanto "a" e "b" apontarão para um endereço com valor "10.5"
Records:
Ao declarar um ponteiro para uma record "a" que possui os campos "field_1" e "field_2", o programa irá criar as variáveis "a.field_1" e "a.field_2" normalmente, como se fossem variáveis comums.
Sempre que precisamos consultar o valor de um campo, por exemplo da record "a" e do "field_1", nós procuramos pela variavel "a.field_1" e a retornamos.
Também foram adicionados testes para as records.
Segue um exemplo do quê agora é possível fazer com as records.
Problemas encontrado:
Atualmente a AST não permite algo do tipo "a^^ := 5" em ponteiros. Isso limita a criação de ponteiros de vários níveis, como um "ponteiro de ... de ponteiro", pois só permite que um nível do ponteiro seja utilizado no programa Oberon. Para auxiliar um possível grupo que passe por este problema no futuro, nós deixamos alguns trechos de código que serão úteis:
Adicionamos o campo "indirections" no PointerAssignment para representar quantos "^" o ponteiro está utilizando.
Adicionamos uma função "dfs" cuja função é "andar" no grafo gerado pelos ponteiros (que, na prática, é andar pelo mapa locations). Note que, para que esta função seja realmente útil, o "indirections" deve ser passado corretamente. Para indirections = 1, o código está testado e funciona perfeitamente.
Criamos de forma manual Módulo em Oberon para um teste específico, ele está presente no final do InterpreterTest.scala. Este teste utiliza o "indirections" citado acima.
Maxwell Oliveira dos Reis - 221002100 Luiz Eduardo Pereira dos Reis - 221017088 João Gilberto de Oliveira Teixeira - 211036070
O tipo Location foi dividido em "BaseLocation" e "NullLocation", o motivo ficará mais claro a seguir.
Ponteiros:
Segue um exemplo do quê agora é possível fazer com os ponteiros. Note que, neste caso, tanto "a" e "b" apontarão para um endereço com valor "10.5"
Records:
Segue um exemplo do quê agora é possível fazer com as records.
Problemas encontrado: Atualmente a AST não permite algo do tipo "a^^ := 5" em ponteiros. Isso limita a criação de ponteiros de vários níveis, como um "ponteiro de ... de ponteiro", pois só permite que um nível do ponteiro seja utilizado no programa Oberon. Para auxiliar um possível grupo que passe por este problema no futuro, nós deixamos alguns trechos de código que serão úteis: