- •Государственный комитет Российской Федерации по высшему образованию
- •Синтаксис и семантика языка Словарь и представление
- •Описания и области действия
- •Описания констант
- •Описания типов
- •Описания переменных
- •Выражения
- •Операнды
- •Операции
- •Операторы
- •Лексический анализ Типы лекскем
- •Диаграммы переходов
- •Структуры данных
- •Синтаксический анализ и перевод во внутреннюю форму кс-грамматика входного языка Основная грамматика
- •Грамматика описывающая составной оператор.
- •Грамматика описывающая выражение
- •Диаграмма переходов
- •Описание промежуточного языка
- •Описание перевода атг для программы
- •Атг для оператора
- •Атг для выражения
- •Описание конструкций языка при помощи триад
- •Алгоритм работы дмп-процессора
- •Тестирование синтаксического анализатора
- •Генерация кода
- •4. Результат выполнения сгнерированной программы:
Описания и области действия
Каждый идентификатор должен быть описан, причём только один раз.
Запрещается использовать в качестве идентификаторов зарезервированные слова.
Описания констант
Описание константы связывает ее идентификатор с ее значением.
Описания типов
Тип данных определяет набор значений, которые могут принимать переменные, константы этого типа, и набор применимых операций. Описания типа связывает идентификатор с типом.
Стандартные типы:
1) Целые типы.
Тип |
Диапазон |
Формат |
короткое целое (shortint) |
-128..127 |
1 байт |
целое (integer) |
-32768..32767 |
2 байта |
длинное целое (longint) |
-2147483648.. 2147483647 |
4 байта |
длиной в байт (byte) |
0..255 |
1 байта |
длиной в слово (word) |
0..65535 |
2 байта |
Правила преобразования бинарных арифметических операций (операций, использующих два операнда) для целых типов:
- если один из операндов имеет тип longint, то другой операнд всегда преобразуется к типу longint;
- если один из операндов имеет тип integer, а другой – типа shortint, или byte, то оба операнда приводятся к типу integer;
- если один из операндов имеет тип integer, а другой – типа word, то оба операнда приводятся к типу longint;
- если один из операндов типа shortint, а другой – типа byte, то оба операнда приводятся к типу integer;
- если один из операндов типа word, а другой – типа shortint, то он приводится к типу longint;
- если один из операндов типа word, а другой – типа byte, то он приводится к типу word;
При выполнении операции присваивания результат приводится к типу переменной слева от знака операции присваивания, при этом возможно преобразование как старшего типа к младшему, так и наоборот.
Тип целой константы представляет собой встроенный целочисленный тип с наименьшим диапазоном, включающим значение этой целой константы.
Выражение справа в операторе присваивания вычисляется независимо от размера или типа переменной слева.
2) Булевский тип – boolean, переменная этого типа может принимать значения из множества (false, true). Поскольку логический тип является перечислимым, между этими значениями имеет место следующее отношение: False < True.
3) Тип булевских матриц – boolmatr[N, M], где N, M целые без знака, обозначающие размерность матрицы. Каждый из ее элементов это переменная типа boolean. N – обозначает число столбцов, M – число строк.
Описания переменных
Описания переменных определяют идентификатор и тип данных для них.
Выражения
Выражения - конструкции, задающие правила вычисления по значениям констант и текущим значениям переменных других значений путем применения операций и процедур-функций. Выражения состоят из операндов и операций. Круглые скобки могут использоваться для группировки операций и операндов.
Операнды
Операндами могут быть выражения, множители. Множитель – идентификатор переменной, константы, элемент булевской матрицы.
Операции
В выражениях синтаксически различаются семь классов операций с разными приоритетами (порядком выполнения).
Старшинство операций:
Знак Операции |
Название операции |
Порядок выполнения | |
NOT |
Логическое отрицание |
Справа налево | |
- |
Унарный минус |
Справа налево | |
AND |
Логическое И |
Слева направо | |
DIV |
Целое от деления |
Слева направо |
|
MOD |
Остаток от деления |
Слева направо | |
SHL |
битовый сдвиг влево |
Слева направо | |
SHR |
битовый сдвиг вправо |
| |
* |
Умножение |
Слева направо |
|
OR |
Логическое ИЛИ |
Слева направо | |
XOR |
Исключающее ИЛИ |
Слева направо | |
+ |
Сложение |
Слева направо | |
- |
Вычитание |
Слева направо | |
< |
Меньше |
Слева направо | |
<= |
Меньше или равно |
Слева направо | |
> |
Больше |
Слева направо | |
>= |
Больше или равно |
Слева направо | |
= |
Равно |
Слева направо | |
<> |
Не равно |
Слева направо |
*) Операции находящиеся в разных группах имеют разные приоритеты, самый высокий приоритет имеет верхняя группа операций
Логические операции – OR, XOR, AND, NOT.
Эти операции применимы к операндам типа BOOLEAN и дают результат типа BOOLEAN.
Операции над булевскими матрицами выполняются аналогично простым булевским операциям, последовательно по строкам над каждым элементом матрицы (сначала операция выполняется для каждого элемента, начиная с первого, первой строки).
Арифметические операции – +, -, *, DIV, MOD, SHL,SHR, и OR, XOR, AND, NOT, которые для типов отличных от BOOLEAN выполняют побитовые операции.
Эти операции применимы к операндам целого типа и дают результат целого типа.
c) Операции отношения – =, <>, <, <=, >, >=
Операции отношения дают результат типа BOOLEAN.