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

Материал из Вики проекта PascalABC.NET
Перейти к навигацииПерейти к поиску
Нет описания правки
Строка 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'''''.


= ll =
== Описание типов ==
Пока можно описывать только типы вида
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.