Описание семантики входного языка
Представление данных различных типов в оперативной памяти.
-
Тип
Размер в байтах
Диапазон значений
char
2
0 … 65535
int
4
-2 147 483 648..-2 147 483 647
float
4
3.4e-38..3.4e38
compl
8
(3.4e-38..3.4e38)+i(3.4e-38..3.4e38)
matr
Определяется в момент создания
Ячеек = compl, размер определяется при создани
Элементы массивов располагаются в памяти последовательно, матрица организуется как массив массивов.
Ормальные параметры представляют собой описание параметров, передаваемых в метод при вызове(тип и имя под которым они будут доступны в теле метода)
Данные совместимых типов (char, int, float) можно сравнивать, используя операции равенства (==) и проверки неравенства (!=). С помощью операций упорядочивания (>, >=, <, <=) можно сравнивать только целые, вещественные и символьные;
Операции взятия действительной, мнимой части и модуля применяются только к числовым данным (float, compl);
Операции взятия длины, высоты и операция транспонирования применяются только к матрицам;
Операция вызова атрибута и метода класса применяется только для переменных типа Класс (пользовательский тип данных);
Операции И и ИЛИ применяются к переменным логического типа;
Операции сложения, вычитания и умножения применяются ко всем типам, кроме логического;
Операция деления применяется ко всем числовым типам; причем деление целого числа осуществляется путем приведения целого к вещественному;
При выполнении операции присваивания результат приводится к типу переменной слева от знака операции присваивания, если это возможно (смотри другие правила);
Приведение от int к char производится взятием по модулю, от float к int и char округлением по стандартным правилам и взятием по модулю;
Если один из операндов имеет тип float, то другой операнд всегда преобразуется к типу float;
Действительная и мнимая части комплексного числа представлены вещественными числами;
Все неатомарные типы доступны только как ссылочные типы;
Ключевые слова нельзя использовать в качестве имён переменных, классов или методов;
Каждая переменная и каждое значение выражение имеют тип, и каждый тип строго определён;
Все присваивания, явные или через передачу параметров в вызовах методов, проверяются на совместимость типов;
Никакая переменная с тем же именем не может быть объявлена более одного раза в пределах одной области видимости;
Семантика операторов
Условный оператор
<условный оператор>::= if (<логическое выражение>) { <блок> } |
if (<логическое выражение>) { <блок> } else { <блок операторов> }
1. Сначала вычисляется логическое выражение.
2. Если его значение – истина, то выполняется блок операторов, следующий за логическим выражением.
3. Если же значение логического выражения – ложь, то
1) при наличии части, начинающейся со служебного слова else выполняется блок операторов, следующий за этим служебным словом,
2) а при отсутствии указанной части условного оператора ничего не выполняется.
4. Происходит выход из условного оператора.
Цикл с постусловием
<цикл с постусловием> ::= do { <блок операторов> } while ( <логическое выражение> ) ;
1. Выполняется блок операторов
2. Вычисляется логическое выражение.
3. Если значение логического выражения – истина, то выполняется переход к пункту 1.
4. Если значение логического выражения – ложь, то происходит выход из цикла.
