Сообщение о языке Оберон |
- Statistics
- Participants
- Translate into Russian
- Translation result
- 13% translated in draft.
Переработанное издание 1. 10. 90, Н. Вирт
Сделай так просто, как это возможно, но не проще того.
А. Эйнштейн
------------------------------------------------------
Введение
Синтаксис
Словарь и представление
Объявления и правила видимости
Объявления констант
Объявления типов
Объявления переменных
Выражения
Операторы
Объявления процедур
Модули
Модуль SYSTEM
------------------------------------------------------
1. Введение
Оберон - язык программирования общего назначения, являющийся эволюцией языка Модула-2. Его главная новая особенность - концепция расширения типов. Она позволяет конструировать новые типы данных на основе существующих и обеспечивает наследование между ними.
Этот документ не предназначен для обучения программированию. Он преднамеренно краток. Его задача - служить справочником для программистов, разработчиков компиляторов и авторов руководств. Если о чем-то не сказано, то обычно сознательно или потому, что это следует из других правил языка, или потому, что потребовалось бы определять то, что фиксировать для общего случая представляется неразумным.
2. Синтаксис
Язык это бесконечное множество предложений – предложений, сформированных в соответствии с его синтаксисом. В Обероне эти предложения называются единицами компиляции. Каждая единица есть конечная последовательность символов из некоторого конечного словаря. Словарь Оберона состоит из идентификаторов, чисел, строк, операторов, разделителей и комментариев. Они называются лексическими символами и образуются последовательностью знаков. (Обратим внимание на разницу между символами и знаками.)
Для описания синтаксиса используются Расширенные Формы Бэкуса-Наура (EBNF). Квадратные скобки [ и ] означают необязательность записанного внутри них выражения, а фигурные скобки { и } означают его повторение (возможно 0 раз). Синтаксические сущности (нетерминальные символы) обозначают английскими словами выражающими их интуитивное значение. Символы словаря языка (терминальные символы) обозначают строками заключенными в кавычки или словами написанными заглавными буквами, так называемыми зарезервированные словами. Синтаксические правила (постановки) обозначают символом $ на левом краю строки.
3. Словарь и представление
Представление символов в терминах букв определены используя набор ASCII. Символы - это идентификаторы, числа, строки, операторы, разделители, и комментарии. Следующие лексические правила должны быть соблюдены. Пробелы и разрывы строк не должны встречаться внутри символов (исключая комментарии, и в случае пробелов в строках). Они игнорируются если они несущественны для разделения двух следующих друг за другом символов. Прописные и строчные буквы считаются различными.
Идентификаторы - это последовательность букв и цифр. Первый символ должен быть буквой.
$ ident = letter {letter | digit}.
Примеры:
x scan Oberon GetSymbol firstLetter
Числа бывают (беззнаковые) целые или вещественные. Целые числа - это последовательность цифр с возможно последующим суффиксом-буквой.
Тип - минимальная единица которой принадлежат числа (см. Раздел 6.1.). Если суффикс не задан, представление будет десятичным. Суффикс H показывает шестнадцатеричное представление.
Вещественные числа всегда содержат десятичную точку. Необязательно, они могут также содержать десятичный порядок. Буква E (или D) объявляет что 'десятичное представление в силе'. Вещественное число имеет тип REAL, кроме того случая, когда порядок содержит букву D, в этом случае оно будет иметь тип LONGREAL.
$ number = integer | real.
$ integer = digit {digit} | digit {hexDigit} "H" .
$ real = digit {digit} "." {digit} [ScaleFactor].
$ ScaleFactor = ("E" | "D") ["+" | "-"] digit {digit}.
$ hexDigit = digit | "A" | "B" | "C" | "D" | "E" | "F".
$ digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9".
Примеры:
1987
100H = 256
12.3
4.567E8 = 456700000
0.57712566D-6 = 0.00000057712566
Символьная константа обозначается как символ, заключенный в кавычки или порядковым номером символа в шестнадцатеричной системе счисления оканчивающимся на букву X.
$ CharConstant = """ character """ | digit {hexDigit} "X".
Строки - последовательность символов окруженная кавычками ("). Сама строка не может содержать кавычку. Число символов в строке называется длиной строки. Строки можно представить и сравнить с массивом символов (см. Разделы 9.1 и 8.2.4).
$ string = """ {character} """ .
Примеры:
"OBERON" "Don't worry!"
Операторы и разделители - это специальные символы, символьные пары, или зарезервированные слова, приведенные ниже. Эти зарезервированные слова содержат исключительно заглавные буквы и не могут быть использованы в качестве идентификаторов.
+ := ARRAY IS TO
- ^ BEGIN LOOP TYPE
* = CASE MOD UNTIL
/ # CONST MODULE VAR
~ < DIV NIL WHILE
& > DO OF WITH
. <= ELSE OR
, >= ELSIF POINTER
; .. END PROCEDURE
| : EXIT RECORD
( ) IF REPEAT
[ ] IMPORT RETURN
{ } IN THEN
Комментарии могут быть вставлены между любыми двумя символами в программе. Это произвольные последовательности символов начинающаяся со скобки (* и оканчивающаяся *). Комментарии не влияют на смысл программы.
4. Объявления и правила видимости
Каждый идентификатор фигурирующий в программе должен быть объявлен, если это не стандартный идентификатор. Объявления также служат для задания некоторых постоянных свойств объекта, к примеру является ли он константой, типом, переменной или процедурой.
Позже идентификатор используется для ссылки на соответствующий объект. Это возможно только в тех частях программы, которые находятся внутри области объявления. Никакой идентификатор не может указывать более чем на один объект внутри данной области. Область распространяется текстуально от точки объявления до конца блока (процедуры или модуля) к которому объявление принадлежит и вследствие чего объект является локальным. Правило видимости имеет следующие поправки:
Если тип T определен как УКАЗАТЕЛЬ К T1
(см. Раздел 6.4), идентификатор T1 может быть объявлен текстуально следующим после объявления T, но он обязан лежать в той же области.
Идентификаторы, обозначающие поля записи (см Раздел 6.3) справедливы только в области указателей.
При объявлении, идентификатор в <...>
$ qualident = [ident "."] ident.
$ identdef = ident ["*"].
Следующие идентификаторы предопределены;
их смысл определяется в указанных разделах:
ABS (10.2) LEN (10.2)
ASH (10.2) LONG (10.2)
BOOLEAN (6.1) LONGINT (6.1)
CAP (10.2) LONGREAL (6.1)
CHAR (6.1) MAX (10.2)
CHR (10.2) MIN (10.2)
COPY (10.2) NEW (6.4)
DEC (10.2) ODD (10.2)
ENTIER (10.2) ORD (10.2)
EXCL (10.2) REAL (6.1)
FALSE (6.1) SET (6.1)
HALT (10.2) SHORT (10.2)
INC (10.2) SHORTINT (6.1)
INCL (10.2) SIZE (10.2)
INTEGER (6.1) TRUE (6.1)
5. Объявления констант
Объявление константы связывает идентификатор с неизменным значением.
$ ConstantDeclaration = identdef "=" ConstExpression.
$ ConstExpression = expression.
Константное выражение может быть вычислено только по тексту без фактического запуска программы. Его операнды являются константами (см. Раздел 8).
Примеры:
N = 100
limit = 2*N -1
all = {0 .. WordSize-1}
6. Объявления типов
Тип данных определяет набор значений, которые могут принимать переменные этого типа, и операторов, которые могут применяться к этим переменным. Объявление типа используется для сопоставления некоторого идентификатора этому типу. Сопоставление такого рода может производиться как с неструктурированными (базовыми), так и со структурированными типами. В последнем случае определяется структура переменных этого типа и, как следствие, набор операторов, применимых к компонентам этих переменных. Существует два разных вида структур – массивы и записи – с различным методом доступа к компонентам.
$ TypeDeclaration = identdef "=" type.
