- •Пояснительная записка к курсовой работе по дисциплине "Теория языков программирования"
- •2005 Отчет по курсовой работе тяп.
- •1 Описание входного языка
- •1.1 Задание
- •1.2 Синтаксис и семантика языка
- •1.2.1 Словарь и представление
- •1.2.2 Описания и области действия
- •1.2.3 Описания констант
- •1.2.4 Описания типов
- •1.2.5 Описания переменных
- •1.2.6 Выражения
- •1.2.6.1 Операнды
- •1.2.6.2 Операции
- •1.2.7 Операторы
- •2. Лексический анализ
- •2.1 Типы лекскем.
- •2.2 Диаграммы переходов
- •2.3 Структуры данных
- •2.4 Тестирование лексического анализатора
- •3 Синтаксический анализ и перевод во внутреннюю форму
- •3.1 Кс-грамматика входного языка
- •3.1.1 Основная грамматика.
- •3.1.2 Грамматика описывающая составной оператор.
- •3.1.3 Грамматика описывающая выражение
- •3.2 Диаграмма переходов
- •3.3 Описание промежуточного языка
- •3.4 Описание перевода
- •3.4.1 Атг для программы
- •3.4.2 Атг для оператора
- •3.4.3 Атг для выражения
- •3.4.4 Описание конструкций языка при помощи триад
- •3.5 Алгоритм работы дмп-процессора
- •3.6 Тестирование синтаксического анализатора
- •4 Генерация кода
1.2.6.1 Операнды
Операндами могут быть выражения, множители. Множитель – идентификатор переменной, константы, элемент булевской матрицы.
1.2.6.2 Операции
В выражениях синтаксически различаются семь классов операций с разными приоритетами (порядком выполнения).
Старшинство операций:
Знак Операции |
Название операции |
Порядок выполнения |
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.
Операнды этих операций должны иметь либо структурно эквивалентный тип, либо совместимый тип.
1.2.7 Операторы
Оператор присваивания: старое значение переменной заменяется новым значением, которое получается в результате вычисления выражения.
Оператор перехода: метка в операторе перехода должна быть предварительно описана и должна встречаться в блоке один раз.
Условный оператор: Вычисляется логическое выражение. Если значение логического выражения «истина», то выполняется оператор, следующий за ключевым словом then, в противном случае выполняется оператор, следующий за ключевым словом else. Если после слова then следует условный оператор, то он должен заключатся в begin – end для избежания неопределенности типа: if <выр> then if <выр> then <оператор> else <оператор>
Оператор цикла:
Выполняются операторы, за ключевым словом repeat.
Вычисляется логическое выражение за ключевым словом until, если выражение истинно, то происходит выход из цикла, если ложно, то повторяется п.1.
Оператор ввода, переменная, указанная в параметрах оператора принимает значение полученное с консоли. Считываемое значение должно быть того же типа, что и переменная указанная в параметрах.
Операторы вывода, если среди параметров встречается выражение, то оно вычисляется, далее список параметров последовательно выводится на консоль.