Реализация языка программирования Оберон на базе PascalABC.NET: Основные этапы разработки: различия между версиями
Материал из Вики проекта PascalABC.NET
Перейти к навигацииПерейти к поиску
Juliet (обсуждение | вклад) (→Типы) |
Juliet (обсуждение | вклад) Нет описания правки |
||
Строка 1: | Строка 1: | ||
= Знакомство = | |||
Знакомство с архитектурой PascalABC.NET. | Знакомство с архитектурой PascalABC.NET. | ||
'''Текст_программы -> Синтаксическое_дерево''' -> Семантическое_дерево -> ... -> код | '''Текст_программы -> Синтаксическое_дерево''' -> Семантическое_дерево -> ... -> код | ||
Строка 7: | Строка 7: | ||
Разбор существующего кода (<tt>oberon00.lex</tt> and <tt>oberon00.y</tt>) | Разбор существующего кода (<tt>oberon00.lex</tt> and <tt>oberon00.y</tt>) | ||
= Тестирование и разбор основ = | |||
== Описания == | |||
Проверка и корректировка сообщений об ошибках на примере различных ошибочных программ. | Проверка и корректировка сообщений об ошибках на примере различных ошибочных программ. | ||
Строка 39: | Строка 39: | ||
END Decls. | END Decls. | ||
=== | = Типы = | ||
== Основные типы == | |||
Реализованы основные '''типы''': | Реализованы основные '''типы''': | ||
''INTEGER(4), BOOLEAN, SHORTINT(1), LONGINT(8), REAL(8), LONGREAL(8)''. И, дополнительно, — ''STRING''.<br /> | ''INTEGER(4), BOOLEAN, SHORTINT(1), LONGINT(8), REAL(8), LONGREAL(8)''. И, дополнительно, — ''STRING''.<br /> | ||
Строка 63: | Строка 64: | ||
Пока возникла '''''проблема с реализацией SET'''''. | Пока возникла '''''проблема с реализацией 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. |
Версия от 12:51, 30 июля 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.