Реализация языка программирования Оберон на базе PascalABC.NET: Основные этапы разработки: различия между версиями
Juliet (обсуждение | вклад) |
Juliet (обсуждение | вклад) |
||
Строка 104: | Строка 104: | ||
while <br /> | while <br /> | ||
repeat <br /> | repeat <br /> | ||
= Ближайшие планы = | |||
доделать <span style="color: red">открытые массивы</span> <br /> | |||
<span style="color: red">множества</span> <br /> | |||
<span style="color: red">обероновские идентификаторы</span> <br /> | |||
процедурный тип <br /> | |||
вызов процедур <br /> | |||
операторы возврата и выхода <br /> | |||
Loop <br /> | |||
модули <br /> |
Версия от 22:02, 31 июля 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
Ближайшие планы
доделать открытые массивы
множества
обероновские идентификаторы
процедурный тип
вызов процедур
операторы возврата и выхода
Loop
модули