Реализация языка программирования Оберон на базе PascalABC.NET: Основные этапы разработки: различия между версиями
Juliet (обсуждение | вклад) |
Juliet (обсуждение | вклад) |
||
(не показано 8 промежуточных версий этого же участника) | |||
Строка 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 /> | |||
Определяются следующие '''литералы''': | |||
<span style="color: maroon">1644</span> INTEGER | |||
<span style="color: maroon">0FFH</span> INTEGER | |||
<span style="color: maroon">5656565555555</span> LONGINT | |||
<span style="color: maroon">678FFFFA3BBCH</span> LONGINT | |||
<span style="color: maroon">TRUE, FALSE</span> BOOLEAN | |||
<span style="color: maroon">234.67</span> REAL | |||
<span style="color: maroon">8764.34E+3</span> REAL | |||
<span style="color: maroon">8764.34E3</span> REAL | |||
<span style="color: maroon">8764.34E-3</span> REAL | |||
<span style="color: maroon">6345.79D+3</span> REAL | |||
<span style="color: maroon">6345.79D3</span> REAL | |||
<span style="color: maroon">6345.79D-3</span> REAL | |||
<span style="color: maroon">'c'</span> CHAR | |||
<span style="color: maroon">"c"</span> CHAR | |||
<span style="color: maroon">65X</span> CHAR | |||
<span style="color: maroon">'line'</span> STRING | |||
<span style="color: maroon">"line"</span> 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 === | |||
частично массивы (без открытых), включая массивы символов как строки, массивы массивов символов, как массивы строк и т.д. <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
модули