Денотационная семантика
Денотационная семантика – это формальная аппликативная модель для описания языков программирования. Основной концепцией денотационной семантики является определение для каждой сущности языка некоторого математического объекта и некоторой функции, отображающей экземпляры этой сущности в экземпляры этого объекта.
Рассмотрим использование денотационной семантики на примере определения двоичных чисел. Синтаксис двоичных чисел можно описать следующими БНФ:
<двоичное число> ::= 0| 1| <двоичное число> 0| <двоичное число> 1
Объектами в данном примере являются десятичные числа. Для описания двоичного числа с использованием денотационной семантики и приведенных ранее синтаксических правил его фактическое значение связывается с каждым правилом, содержащим в своей правой части один основной символ определяемого языка. При этом значащие объекты (числа 0 и 1) должны связываться с первыми двумя правилами, а другие два правила являются, по существу, правилами вычислений, поскольку они объединяют основной символ языка (0 или 1), с которым может ассоциироваться объект, с металингвистической переменной, которая представляет собой некоторую синтаксическую конструкцию.
Пусть область определения семантических значений объектов представляет собой множество неотрицательных десятичных целых чисел N. Эти объекты могут быть связаны с двоичными числами с помощью функции М, которая отображает синтаксические объекты в объекты множества N. Функция М может быть определена следующим образом:
М(0) = О
М(\) = 1
М(<двоичное число>0) = 2 ´ M(<двоичное число>)
M(<двоичное число>1) = 2 ´ M(<двоичное число>) + 1
1.Опишите синтаксис раздела описаний переменных и массивов типа real, integer и char языка Pascal.
2.Разработайте описание синтаксиса условного оператора if языка Pascal. Условия в этом операторе задаются логическими выражениями, составленными из простых переменных булевского типа и логических операций И, ИЛИ, НЕ, а в качестве операторов можно использовать только операторы присваивания, правой частью которых являются логические выражения. Приоритет операций обычный.
3.Задайте синтаксис оператора цикла for языка Pascal. В качестве операторов в теле цикла можно использовать только операторы присваивания, правой частью которых являются арифметические выражения, составленные из простых переменных и констант целого типа, круглых скобок и знаков арифметических операций: сложения, вычитания, умножения и деления. Приоритет операций обычный.
4.Опишите синтаксис оператора цикла while некоторого подмножества языка Pascal. Условия в этом операторе задаются с помощью отношений, а в качестве операторов в теле цикла можно использовать только операторы присваивания, правой частью которых являются арифметические выражения, составленные из простых переменных и констант вещественного типа, круглых скобок и знаков арифметических операций: сложения, вычитания, умножения и деления. Приоритет операций обычный.
5.Определите синтаксис оператора цикла repeatязыка Pascal. Условия в этом операторе задаются логическими выражениями, составленными из простых переменных булевского типа и логических операций И, ИЛИ, НЕ, а в качестве операторов в теле цикла можно использовать только операторы присваивания, правой частью которых являются логические выражения. Приоритет логических операций обычный.
6.Задайте синтаксис раздела описаний переменных и массивов типа double, int и char языка С.
7.Определите синтаксис условного оператора ifязыка С, в котором условия задаются с помощью отношений, а в качестве операторов, выполняемых в зависимости от значений условий, можно использовать только операторы присваивания. Правой частью операторов присваивания являются арифметические выражения, составленные из простых переменных и констант целого типа, круглых скобок и знаков арифметических операций: сложения, вычитания, умножения и деления. Приоритет операций обычный.
8.Опишите синтаксис условного оператора присваивания языка С. В правой части такого оператора для задания условий следует использовать отношения и арифметические выражения целого типа, составленные из простых переменных и констант целого типа, круглых скобок и знаков арифметических операций: сложения, вычитания, умножения и деления. Приоритет операций обычный.
9.Разработайте описание синтаксиса оператора цикла forязыка С. В качестве операторов в теле цикла можно использовать только операторы присваивания, правой частью которых являются арифметические выражения целого типа, составленные из простых переменных и констант целого типа, круглых скобок и знаков арифметических операций: сложения, вычитания, умножения и деления. Приоритет операций обычный.
10. Определите синтаксис описания структур и переменных структурного типа в языке С.
11. Опишите синтаксис оператора цикла whileнекоторого подмножества языка С. Условия в этом операторе задаются с помощью отношений, а в качестве операторов в теле цикла можно использовать только операторы присваивания, правой частью которых являются арифметические выражения, составленные из простых переменных и констант целого типа, круглых скобок и знаков арифметических операций: сложения, вычитания, умножения и деления. Приоритет операций обычный.
12. Задайте синтаксис оператора цикла do... whileязыка С. Условия в этом операторе представляют собой логические выражения, составленные из простых переменных булевского типа и логических операций И, ИЛИ, НЕ, а в качестве операторов в теле цикла можно использовать только операторы присваивания, правой частью которых являются логические выражения. Приоритет операций обычный.
13.Определите синтаксис задания перечислимого типа и описания переменных перечислимого типа в языке Pascal.
14.Опишите синтаксис оператора варианта caseязыка Pascal. В качестве операторов, среди которых производится выбор для исполнения, используйте только операторы присваивания, правой частью которых являются арифметические выражения, составленные из простых переменных и констант целого типа, круглых скобок и знаков арифметических операций: сложения, вычитания, умножения и деления. Приоритет операций обычный.
15.Задайте описание синтаксиса оператора цикла repeatязыка Pascal. Условия в этом операторе задаются с помощью отношений, а в качестве операторов в теле цикла можно использовать только операторы присваивания. Правой частью операторов присваивания являются арифметические выражения, составленные из простых переменных и констант целого типа, круглых скобок и знаков арифметических операций: сложения, вычитания, умножения и деления. Приоритет операций обычный.
16.Определите синтаксис условного оператора if языка Pascal, в котором условия задаются с помощью отношений, а в качестве операторов, выполняемых в зависимости от значений условий, можно использовать только операторы присваивания, правой частью которых являются арифметические выражения, составленные из простых переменных и констант целого типа, круглых скобок и знаков арифметических операций: сложения, вычитания, умножения и деления. Приоритет операций обычный.
17.Задайте синтаксис определения регулярного типа и описания переменных с индексами в языке Pascal.
18.Задайте синтаксис определения строкового типа и описания строк в языке Pascal.
19.Разработайте определение синтаксиса описания процедур в языке Pascal, при этом операторы, составляющие тело процедуры, описывать не нужно.
20.Определите синтаксис описания комбинированного типа и переменных комбинированного типа в языке Pascal.
21.Задайте синтаксис описания перечислимого типа и переменных перечислимого типа в языке С.
22.Опишите синтаксис оператора условного ветвления switchязыка С. В качестве операторов, подлежащих исполнению при совпадении выражения с case-константой, можно использовать только операторы присваивания, правой частью которых являются арифметические выражения, составленные из простых переменных и констант целого типа, круглых скобок и знаков арифметических операций: сложения, вычитания, умножения и деления. Приоритет операций обычный.