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

Материал из Вики проекта PascalABC.NET
Перейти к навигацииПерейти к поиску
Нет описания правки
 
(не показаны 4 промежуточные версии этого же участника)
Строка 95: Строка 95:
   a := 777;
   a := 777;
  END Types.
  END Types.
=== 31.07.2010 ===
частично массивы (без открытых), включая массивы символов как строки,  массивы массивов символов, как массивы строк и т.д. <br />
= Операторы =
оператор присваивания для тех типов, что реализованы <br />
условный оператор (уже как положено, с ELSEIF) <br />
while <br />
repeat <br />
== 22.08.2010 ==
Оператор '''<tt>FOR</tt>''' (моделируем через while, т.к. тут есть ''шаг цикла'') <br />
Оператор '''<tt>CASE</tt>'''
= Ближайшие планы =
доделать <span style="color: red">открытые массивы</span> <br />
<span style="color: red">множества</span> <br />
<span style="color: red">обероновские идентификаторы</span> <br />
процедурный тип <br />
вызов процедур <br />
операторы возврата и выхода <br />
Loop <br />
модули <br />

Текущая версия от 14:04, 22 августа 2010

Знакомство

Знакомство с архитектурой 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
модули