- if - {else}
- case - of
- for
- while
- do - while
- for - step - until - do
- break
- continue
- goto
- integer
- real
- string
- boolean
- struct
- read
- write
- Унарный минус
- Унарный плюс
- % -- остаток от деления
- Работа с функциями
- def <идентификатор> ( [<описания переменных>] ): <простой тип> { [<описания переменных>] [ <операторы> ] return <выражение>; }
- <идентификатор> ( [ <идентификатор> ] {, <идентификатор>})
- Каждое описание начинается с ключевого слова def.
- Формальные параметры одинакового типа можно описать через запятую без повторения типа. Параметры разного типа следует отделять ;.
- После описания формальных параметров идёт определение типа возвращаемого функцией значения.
- Переменные, описанные внутри некоторой функции (в том числе, в заголовке), доступны только в этой функции.
- В функции обязательно должен быть оператор возврата return.
- На момент вызова функции она должна быть описана.
- Количество фактических параметров должно совпадать с количеством формальных.
- Типы фактических параметров должны совпадать с типами формальных.
- "Ленивые" вычисления логических выражений
- Вычисления по обычной схеме
- Любой идентификатор описан и только один раз
- При инициализации типы констант совпадают с типами переменных
- С помощью операторов read и write можно вводить и выводить значения любых простых типов, определенных в языке.
- В операторе цикла с параметром for - step - until - do тип выражений и параметра цикла должен быть целочисленным.
- В операторе цикла for типы 1-ого и 3-его выражений произвольные.
- Только логическое выражение может использоваться в условном операторе if, в операторах цикла while, for и do-while в качестве условия завершения цикла.
- Описанием идентификатора-метки считается ее первое использование в программе. Разные операторы не могут быть помечены одинаковыми метками. Одна и та же метка не может помечать один и тот же оператор более одного раза. Метка может находиться как до, так и после оператора goto, задающего переход по этой метке.
- Операторы break и continue могут встречаться только внутри тела цикла. Появление этих операторов вне цикла является ошибкой.
- Определения структур находятся в начале программы до описаний переменных. Выделять для имен структур отдельное пространство имен (в этом случае использование перед именем ключевого слова struct будет обязательно).
- Допустимые типы полей внутри структуры – простые (int, bool, real, string) и составные.
- Использование значений полей структуры в выражениях такое же, как и у переменных того же типа.
- Возможно присваивание структур целиком, причем только для структур одного типа. Эквивалентность типов здесь именная, т.е. определяется именем структуры, а не набором ее полей.
- Тип выражения и констант вариантов в операторе case должен быть целочисленным.
- Тип выражения и совместимость типов операндов в выражении определяются по правилам, приведенным в Таблице №1.
Операция | Тип X | Тип Y | Тип результата |
---|---|---|---|
+ − * / % | int | int | int |
+ − * / | real | real | real |
+ − * / | real | int | real |
+ − * / | int | real | real |
+ | string | string | string |
унарные +- | int | - | int |
унарные +- | real | - | real |
< > <= >= == != | int | int | boolean |
< > <= >= == != | real | int | boolean |
< > <= >= == != | int | real | boolean |
< > <= >= == != | real | real | boolean |
< > == != | string | string | boolean |
and or | boolean | boolean | boolean |
not | boolean | - | boolean |
= | int | int | int |
= | int | real | int |
= | real | int | real |
= | real | real | real |
= | string | string | string |
= | boolean | boolean | boolean |
Операция | Тип X | Тип Y | Тип результата | Реализовано? |
---|---|---|---|---|
+ − * / % | struct | struct | struct | + |
+ − * / % | struct | int | struct | + |
+ − * / % | int | struct | struct | + |
+ − * / | struct | real | struct | + |
+ − * / | real | struct | struct | + |
+ | struct | string | struct | + |
+ | string | struct | struct | + |
унарные +- | struct | - | struct | + |
< > <= >= == != | struct | struct | boolean | + |
< > <= >= == != | struct | int | boolean | + |
< > <= >= == != | int | struct | boolean | + |
< > <= >= == != | struct | real | boolean | + |
< > <= >= == != | real | struct | boolean | + |
< > == != | struct | string | boolean | + |
< > == != | string | struct | boolean | + |
and or | struct | struct | struct | + |
not | struct | - | struct | + |
= | struct | struct | struct | + |
= | struct | int | struct | + |
= | struct | real | struct | + |
= | struct | string | struct | + |
= | struct | bool | struct | + |
- В любом месте программы, кроме идентификаторов, служебных слов и числовых констант, может находиться произвольное число пробельных литер и комментариев вида
/* 〈любые символы, кроме */ 〉 */
- Пробел в строковой константе считается значащим символом строки.
- Внутри идентификаторов, служебных слов, числовых констант и разделителей, состоящих из нескольких символов, пробельные литеры недопустимы.
- Между идентификаторами, числами и служебными словами должен находиться хотя бы один разделитель текста. Разделитель текста — это пробельная литера, комментарий либо разделитель, определенный в алфавите языка ( * / % + − < > <= >= == != , ; : ( ) ).