UnBCIC-TP2 / Oberon-Scala

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

Array Initialization Implementation #119

Closed RuanPetrus closed 3 months ago

RuanPetrus commented 2 years ago

Implementação de inicialização de arrays

Foi implementado a inicialização de arrays para a linguagem Oberon.
Foram feitas modifcações na Gramática, Parser, TypeChecker, Interpreter e adição e correção de bugs para casos de teste. Adicionamente foram modificados Fields, ArraysSubscripts e Pointer para suportarem inicialização de Arrays.
Também foi feita a refatoração da classe ArrayValue() para as classes ArrayType() e SimpleArrayValue(). O código abaixo agora é suportado pela linguagem:

MODULE ArrayInitialization;

TYPE
   Party = RECORD
      guestList : ARRAY 1 OF ARRAY 5 OF STRING;
      expenses : ARRAY 5 OF REAL;
      anotherRecord : RECORD
        example : ARRAY 3 OF INTEGER;
      END;
   END

VAR
   dogsBirthday : Party;
   monthlyExpensesPerWeek : ARRAY 2 OF ARRAY 3 OF ARRAY 5 OF REAL;
   totalPointer : POINTER TO ARRAY 5 OF REAL;

BEGIN
    monthlyExpensesPerWeek[1][2] := [120.0, 34.50, 12.49, 45.0, 22.0];
    dogsBirthday.guestList[0] := ["Marley", "Lassie", "Scoobydoo", "Beethoven", "Toto"];
    dogsBirthday.expenses := [120.0, 34.50, 12.49, 45.0, 22.0];
    dogsBirthday.anotherRecord.example := [1, 2, 3];
    totalPointer^ := [160.0, 94.50, 42.49, 45.0, 81.0];
    totalPointer^ := [160.0, 94.50, 42.49, 45.0, 82.0];
    write(dogsBirthday.anotherRecord.example)
    END
END ArrayInitialization.