Skip to content

Latest commit

 

History

History
116 lines (110 loc) · 10.1 KB

TODO.md

File metadata and controls

116 lines (110 loc) · 10.1 KB

Статус

Синтаксис

Условные операторы

  • 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.

Таблица №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

Таблица №2 (Выражения со структурами)

Операция Тип 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 +

Правила записи текста программы

  • В любом месте программы, кроме идентификаторов, служебных слов и числовых констант, может находиться произвольное число пробельных литер и комментариев вида /* 〈любые символы, кроме */ 〉 */
  • Пробел в строковой константе считается значащим символом строки.
  • Внутри идентификаторов, служебных слов, числовых констант и разделителей, состоящих из нескольких символов, пробельные литеры недопустимы.
  • Между идентификаторами, числами и служебными словами должен находиться хотя бы один разделитель текста. Разделитель текста — это пробельная литера, комментарий либо разделитель, определенный в алфавите языка ( * / % + − < > <= >= == != , ; : ( ) ).