Реализация языка программирования Оберон на базе PascalABC.NET: Основные этапы разработки

Материал из Вики проекта PascalABC.NET
Перейти к: навигация, поиск

Содержание

Знакомство

Знакомство с архитектурой PascalABC.NET.

Текст_программы -> Синтаксическое_дерево -> Семантическое_дерево -> ... -> код

Прочтение этой статьи.

Разбор существующего кода (oberon00.lex and oberon00.y)

Тестирование и разбор основ

Описания

Проверка и корректировка сообщений об ошибках на примере различных ошибочных программ.

Несколько таких программ:

// Dls не совпадает с именем модуля
MODULE Decls;
BEGIN
END Dls.

// Встречено BEGIN, а ожидалось ';'
MODULE Decls
BEGIN    
END Decls.

// Встречено ':=', а ожидалось '='
MODULE Decls;
CONST
  A := 789;
BEGIN   
END Decls.

Правильная программа:

MODULE Decls;
CONST
  A = 789;
VAR
  a, b: INTEGER;
  f: BOOLEAN;
BEGIN 
END Decls.

Типы

Основные типы

Реализованы основные типы: INTEGER(4), BOOLEAN, SHORTINT(1), LONGINT(8), REAL(8), LONGREAL(8). И, дополнительно, — STRING.
Определяются следующие литералы:

1644            INTEGER
0FFH            INTEGER
5656565555555   LONGINT
678FFFFA3BBCH   LONGINT
TRUE, FALSE     BOOLEAN
234.67          REAL
8764.34E+3      REAL
8764.34E3       REAL
8764.34E-3      REAL
6345.79D+3      REAL
6345.79D3       REAL
6345.79D-3      REAL
'c'             CHAR
"c"             CHAR
65X             CHAR
'line'          STRING
"line"          STRING

Пока возникла проблема с реализацией SET.

Описание типов

Пока можно описывать только типы вида

ident1 = ident2

Несколько некорректных программ:

MODULE Types;
TYP
  MyInt = INTEGER;
VAR
  a: MyInt;
BEGIN
END Types.

// Неизвестное имя INT
MODULE Types;
TYPE
  MyInt = INT;
VAR
  a: MyInt;
BEGIN
END Types. 

// Неизвестное имя myInt
MODULE Types;
TYPE
  MyInt = INTEGER;
VAR
  a: myInt;
BEGIN
  a := 777;
END Types.

31.07.2010

частично массивы (без открытых), включая массивы символов как строки, массивы массивов символов, как массивы строк и т.д.

Операторы

оператор присваивания для тех типов, что реализованы
условный оператор (уже как положено, с ELSEIF)
while
repeat

22.08.2010

Оператор FOR (моделируем через while, т.к. тут есть шаг цикла)
Оператор CASE

Ближайшие планы

доделать открытые массивы
множества
обероновские идентификаторы
процедурный тип
вызов процедур
операторы возврата и выхода
Loop
модули

Персональные инструменты