- •Задание
- •Описание языка
- •Описания и типы
- •Способы описания собственных типов:
- •Описание констант:
- •Описание переменных:
- •Имена и выражения Выражения:
- •Переменные:
- •Операторы
- •Оператор присваивания
- •Структуры данных
- •Подграмматика для выражения:
- •Подграмматика для описания типов:
- •Подграмматика для переменных:
- •Подграмматика для операторов:
- •Описание промежуточного языка
- •Описание перевода (таг) каждой конструкции входного языка Основная грамматика:
- •Подграмматика для выражения:
- •Подграмматика для описания типов:
- •Подграмматика для переменных:
- •Подграмматика для операторов:
Описания и типы
Тип определяет множество значений переменных, выражений и т.п., которые относятся к этому типу.
Кроме заданных предопределенных типов: boolean - булевский, integer - целый, real - вещественный, complex - комплексный, - разрешается определять собственные типы и подтипы. Определение типа вводит для обозначения некоторого типа имя типа.
Определение типов объединяются в раздел определения типов:
<Раздел определения типов> ::= type <определение типа>;{<определение типа>;}
<определение типа> ::= <имя типа> = <тип>
<имя тип> ::= идентификатор
Способы описания собственных типов:
<тип> ::= <простой тип> | <составной тип>
<простой тип> ::= integer | real | complex | boolean | <диапазонный тип> | <определенный ранее тип>
<диапазонный тип> ::= <константа>..<константа>
<составной тип> ::= <массивный тип> | <запись>
<массивный тип> ::= array [<тип индекса>{,<тип индекса>}] of <тип компоненты>
<тип индекса> ::= <простой тип>
<тип компоненты> ::= <имя типа>
<запись> ::= record <список полей> end
<список полей> ::= [<секция записи>{;<секция записи>} ]
<секция записи> ::= <список имен>:<тип>
Указанный тип должен быть ранее определен.
<список имен> ::= идентификатор{,идентификатор}
Описание констант:
Описания констант объединяются в раздел констант:
<раздел описания констант> ::= const <определение константы>;{<определение константы>;}
<определение константы> ::= <имя константы> = <константа>
<константа> ::= [<знак>] <константа без знака>
<константа без знака> ::= число_без_знака | <имя константы>
<имя константы> ::= идентификатор
Описание переменных:
Переменная относится к типу, определяемому ее описанием, и может принимать значения только этого типа. Описание переменных вводит одно или более имен переменной и тип, к которому относится каждое из них. Описания переменных образуют раздел переменных:
<раздел описания переменных> ::= var <описание переменных>;{<описание переменных>;}
<описание переменных> ::= <список имен>:<тип>
Имена и выражения Выражения:
Выражение задает порядок вычисления значения, основанный на обычном правиле вычисления слева направо и старшинстве операций.
Арифметические операции выполняются над целыми, вещественными или комплексными операндами и порождают результат типа в соответствии с таблицами:
(для бинарных операций)
+ |
integer |
real |
complex |
boolean |
integer |
integer |
- |
- |
- |
real |
- |
real |
- |
- |
complex |
- |
- |
complex |
- |
boolean |
- |
- |
- |
- |
- |
integer |
real |
complex |
boolean |
integer |
integer |
- |
- |
- |
real |
- |
real |
- |
- |
complex |
- |
- |
complex |
- |
boolean |
- |
- |
- |
- |
* |
integer |
real |
complex |
boolean |
integer |
integer |
- |
- |
- |
real |
- |
real |
- |
- |
complex |
- |
- |
complex |
- |
boolean |
- |
- |
- |
- |
/ |
integer |
real |
complex |
boolean |
integer |
integer |
- |
- |
- |
real |
- |
real |
- |
- |
complex |
- |
- |
complex |
- |
boolean |
- |
- |
- |
- |
(для унарных операций)
|
+ |
- |
integer |
integer |
integer |
real |
real |
real |
complex |
complex |
complex |
boolean |
- |
- |
В выражении могут присутствовать операции отношения:
= |
integer |
real |
complex |
boolean |
integer |
boolean |
- |
- |
- |
real |
- |
boolean |
- |
- |
complex |
- |
- |
boolean |
- |
boolean |
- |
- |
- |
boolean |
< |
integer |
real |
complex |
boolean |
integer |
boolean |
- |
- |
- |
real |
- |
boolean |
- |
- |
complex |
- |
- |
boolean |
- |
boolean |
- |
- |
- |
boolean |
> |
integer |
real |
complex |
boolean |
integer |
boolean |
- |
- |
- |
real |
- |
boolean |
- |
- |
complex |
- |
- |
boolean |
- |
boolean |
- |
- |
- |
boolean |
Таблица приоритетов:
+, - |
( ) |
*, / |
+, - |
=, <, > |
<выражение> ::= <арифметическое выражение>{<операция отношения> <арифметическое выражение>}
<арифметическое выражение> ::= [<знак>] <терм>
<терм> ::= <фактор> {<арифметическая операция> <фактор>}
<операция отношения> ::= = | < | >
<арифметическая операция> ::= * | / | + | -
<знак> ::= + | -
<фактор> ::= <константа без знака> | <переменная> | (<арифметическое выражение >)