![](/user_photo/1549_7W_y5.jpg)
- •1 Общая модель компилятора. Блоки компилятора и их функции
- •2 Общее понятие синтаксиса и семантики языка. Бнф и др. Методы описания синтаксиса и семантики языка.
- •3 Понятие языка. Способы задания языка. Операции над языком
- •4 Регулярные выражения. Способы задания регулярных выражений. Операции над регулярными выражениями.
- •5.Конечные автоматы. Способы задания. Методы построения конечных автоматов. Преобразование конечных автоматов.
- •6 Лексический анализ. Методы и средства построения лексического анализатора.
- •7 Распознавание цепочек символов с помощью конечных автоматов.
- •8 Распознавание цепочек символов с помощью автоматов с магазинной памятью.
- •9 Грамматики языков. Классификация языков по Хомскому.
- •11 Методы представления грамматики в памяти.
- •12 Нисходящий синтаксический анализ. Метод рекурсивного разбора.
- •14 Нисходящий синтаксический анализ. Методы восстановления после ошибок.
- •16 Синтаксический анализ приоритета операторов. Функция приоритета
- •18 Slr-анализаторы. Построение таблиц для slr-анализатора.
- •19 Методы анализа ошибок. Восстановление после ошибок.
- •20 Семантика языка, методы описания и анализа.
- •21 Понятие атрибутивные грамматики
- •22 Синтаксически управляемая трансляция.
- •23 Таблица символов, таблица меток и др. Методы построения, доступа и анализа.
- •24 Генерация промежуточного кода.
- •25 Методы оптимизация промежуточного кода.
- •29 Имена, связывание, проверка типов.
- •30 Область видимости имен. Способы реализации.
- •31 Типы данных. Способы реализации.
- •32 Выражения и операторы присваивания. Способы реализации.
- •36. Абстрактные типы данных. Способы реализации.
- •37 Объектно-ориентированные языки программирования. Способы реализации.
- •38 Обработка исключительных ситуаций. Способы реализации.
- •39 Языки параллельного программирования. Способы реализации.
- •40 Императивные языки программирования. Способы реализации.
- •41 Функциональные языки программирования. Способы реализации.
- •42 Языки логического программирования. Способы реализации.
- •43 Графовые грамматики. Назначение и основные понятия.
- •44 Antlr. Tree grammars.
- •46 Case-средства. Назначение, классификация и основные понятия.
- •47 Case-средства. Направления интеллектуализации.
22 Синтаксически управляемая трансляция.
Другим формализмом, используемым для определения переводов, является схема синтаксически управляемого перевода. Фактически, такая схема представляет собой КС-грамматику, в которой к каждому правилу добавлен элемент перевода. Всякий раз, когда правило участвует в выводе входной цепочки, с помощью элемента перевода вычисляется часть выходной цепочки, соответствующая части входной цепочки, порожденной этим правилом.
Схемы синтаксически управляемого перевода
Определение.
Cхемой синтаксически управляемого
перевода (или трансляции, сокращенно:
СУ-схемой) называется пятерка Tr = (N, T,
,
R, S), где N - конечное множество нетерминальных
символов; T - конечный входной алфавит;
-
конечный выходной алфавит; R - конечное
множество правил перевода вида
где
u
(N
T)*,
v
(N
)*
и вхождения нетерминалов в цепочку v
образуют перестановку вхождений
нетерминалов в цепочку u, так что
каждому вхождению нетерминала B в цепочку
u соответствует некоторое вхождение
этого же нетерминала в цепочку v; если
нетерминал B встречается более одного
раза, для указания соответствия
используются верхние целочисленные
индексы;
S - начальный символ, выделенный нетерминал из N.
Процесс построения дерева разбора, а затем вычисления атрибутов (нетерминал к терминалу) и называется синтаксически управляемой трансляцией
23 Таблица символов, таблица меток и др. Методы построения, доступа и анализа.
24 Генерация промежуточного кода.
Задачи промежуточного кода:Оптимизация программы,Данные для интерпретации
Виды записи промежуточного кода:В виде синтаксических деревьев (элементы дерева – операторы).
Синтаксическое дерево изображает естественную иерархическую структуру исходной программы. Даг дает ту же информацию, но в более компактном виде (одинаковые подвыражения в нем объединены).
Постфиксная запись представляет собой линеаризованное представление синтаксического дерева; такая запись — не что иное, как список узлов дерева, в котором узлы располагаются сразу после своих дочерних узлов.
Дуги синтаксического дерева явным образом в постфиксной записи не участвуют, но могут быть восстановлены в соответствии с порядком, в котором узлы появляются в постфиксной записи, и числом операндов оператора в узле. Восстановление дуг подобно вычислениям постфиксной записи с использованием стека.
Синтаксические деревья для инструкций присвоения строятся с помощью синтаксически управляемого определения, представляющего собой расширение определения. Нетерминал S порождает инструкцию присвоения. Два бинарных оператора + и * представляют собой примеры полного множества операторов типичного языка программирования. Ассоциативность и приоритет операторов — обычные, несмотря на то, что они не внесены в грамматику. Приведенное определение строит дерево для входного потока а := b*-c+b*-c.
Это же синтаксически управляемое определение позволит построить даг, показанный, если функции mkunode(op, child) и mknode(op, left, right) будут, если возможно, возвращать указатель на уже существующий узел, а не строить новый. Токен id имеет атрибут place, указывающий на запись в таблице символов для данного идентификатора. Если лексический анализатор хранит все лексемы в едином массиве символов, атрибут пате может представлять собой индекс первого символа лексемы.
Представление в виде трехадресного кода
z = x op y (бинарная операция)
z = op x (унарная операция)
z = x (копирование ячейки x в z)