Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2008-04-14-02-21-Наталья-.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
826 Кб
Скачать
☆

2.2. Описание семантики входного языка

Описание семантики задает представление данных в оперативной памяти, приоритет выполнения операций, правила преобразования типов языка, правила выполнения операторов языка и реализации языковых конструкций.

Представление данных различных типов в оперативной памяти (размер в байтах и диапазон возможных значений) зададим с помощью таблицы (табл. 1).

Табл. 1.

Тип

Размер, байт

Диапазон значений

int

2

Целые числа. -32768….32767

float

4

Вещественные числа. 3.14E-38….3.14E+38.

bool

1

Логические переменные. False, Тrue

Отметим также, что входной язык к тому же поддерживает структурированный тип – vector -вектор с вещественными компонентами. Вектор представляется совокупностью компонент, каждая из которых, в свою очередь, представляется типом float.

Приоритет операций и порядок выполнения операций с одинаковым приоритетом также зададим с помощью таблицы (см. табл. 2).

Табл. 2.

Знак операции

Название операции

Порядок выполнения

++

--

Увеличение на единицу

Уменьшение на единицу

Слева направо

Слева направо

*

/

Умножение

Деление

Слева направо

Слева направо

+

-

Сложение

Вычитание

Слева направо

Слева направо

<

<=

>

>=

Меньше

Меньше или равно

Больше

Больше или равно

Слева направо

Слева направо

Слева направо

Слева направо

==

!=

Равно

Не равно

Слева направо

Слева направо

&&

||

Логическое И

Логическое ИЛИ

Слева направо

Слева направо

not

and

or

Не

И

Или

Справа налево

Слева направо

Слева направо

Правила преобразования типов для бинарных операций включают правила автоматического преобразования операндов к одному общему типу, при этом тип результата выполнения операции, как правило, также имеет общий тип. Обычно операнды бинарных арифметических операций разных типов приводятся к старшему (более длинному) типу.

Правила преобразования типов для бинарных арифметических операций также приведем в таблицу (см. табл. 3).

Табл. 3.

Операнд 1

Операнд 2

Операция

Результат

double

int

*, /, +, -

double

double

foat

*, /, +, -

double

double

double

*, /, +, -

double

Unsigned long

int

*, /, +, -

Unsigned long

Unsigned long

foat

*, /, +, -

Unsigned long

Unsigned long

double

*, /, +, -

Unsigned long

Long

Unsigned long

*, /, +, -

Unsigned long

Int

int

*, +, -,

/

int

float

Int

Unsigned int

*, /, +, -

Unsigned int

Int

char

*, /, +, -

int

Int

Unsigned char

*, /, +, -

int

float

float

*, /, +, -

double

При выполнении операции присваивания результат приводится к типу переменной слева от знака операции присваивания, при этом возможно преобразование как старшего типа к младшему, так и наоборот.

Задание правил выполнения операторов языка заключается в описании порядка выполнения операторов.

Оператор цикла с параметром for.

< оператор цикла с параметром>::=

for(<оператор присваивания>;<логическое выражение>;<оператор присваивания>)

<составной оператор>

Порядок выполнения оператора:

  1. Параметр цикла инициализируется первым оператором присваивания.

  2. Вычисляется логическое выражение для текущего значения параметра цикла.

Если получившееся логическое выражение ИСТИНА:

  1. Выполняется тело цикла.

  2. Выполняется оператор присваивания над текущим значением параметра цикла.

  3. Переход к пункту 1.

Если получившееся логическое выражение ЛОЖЬ:

6. Выход из цикла.

Значение параметра цикла при корректном завершении цикла определяется логическим выражением из описания цикла.

Оператор присваивания

<оператор присваивания >::= < переменная ><отношение присваивания>< выражение >

< отношение присваивания>::= = | += | -= | *= | /=

Вычисляется арифметическое выражение в правой части и, в случае соответствия типов, запоминается в переменной(для =), указанной в левой части. Если отношение операции отлично от =, то переменная в левой части модифицируется (согласно виду отношения присваивания) с учетом вычисленного арифметического выражения и сохраняется в переменной левой части.

Оператор безусловного перехода goto.

<оператор безусловного перехода>::= goto <метка>

Выполняется переход на метку.

Метка должна встречаться в теле программы один раз.

Условный оператор if-else

< условный оператор >::= if (<логическое выражение>) <составной оператор1>

[else <составной оператор2> ]

Вычисляется значение логического выражения и результат помещается во временную переменную.

Если результат FALSE, то происходит переход на составной оператор2, в противном случае выполняется составной оператор1 и происходит переход в конец оператора if -else.

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

< условный оператор присваивания>::=

(<логическое выражение>)?< выражение1>:< выражение2 >

Вычисляется значение логического выражение и результат помещается во временную переменную.

Если результат TRUE, то происходит присваивание значения выражения1, в противном случае выполняется присваивание значения выражения2 и происходит переход в конец оператора условного присваивания.