- •Цели лексического анализа:
- •Основные функции лексического анализатора:
- •Общие принципы построения лексических анализаторов
- •Конечные автоматы
- •Преобразования нка
- •Задачи синтаксич анализа:
- •Роль синтаксического анализатора
- •Контекстно-свободные грамматики
- •Стековая реализация пс-анализа
- •Грамматики предшествования
- •Алгоритм синтаксического анализа простого предшествования
- •Алгоритм синтаксического анализа приоритета операторов
- •Нерекурсивный предиктивный анализ
- •Множества first и follow
- •Внутреннее представление программы
- •Способы внутреннего представления программ.
- •Триады – многоадресный код с неявно именуемым результатом.
- •Алгоритм преобразования дерева вывода в дерево операций:
- •Ассемблерный код и машинные команды
- •Синтаксически управляемые определения
- •Вид синтаксически управляемого определения
- •Восходящее выполнение s-атрибутных определений
- •Синтезируемые атрибуты в стеке синтаксического анализатора
- •Наследование атрибутов в стеке синтаксического анализатора
- •Замена наследуемых атрибутов синтезируемыми
Ассемблерный код и машинные команды
Машинные команды используют внутр представление прогр-мы полностью соответствующее объектному коду и сложные преобразования не требуются. Команды ассемблера представляют собой форму записи машинных команд, поэтому в качестве формы внутр представления прогр-мы практически ничем не отличается от них.
Однако использование команд ассемблера или машинных команд для внутреннего представления программы требует дополнительных структур для отображения взаимосвязи операций. В этом случае внутреннее представление программы получается зависимым от архитектуры вычислительной системы, на которую ориентирован результирующий код. Значит, при ориентировании компилятора на другой результирующий код потребуется перестраивать и внутреннее представление программы и методы его обработки (при использовании триад или тетрад этого не требуется).
Тем не менее, машинные команды – это язык, на котором должна быть записана результирующая программа. Поэтому компилятор, так или иначе, должен работать с ними. Кроме того, только обрабатывая машинные команды (или их представление в форме команд ассемблера), можно добиться наиболее эффективной результирующей программы. Любой компилятор работает с представлением результирующей программы в форме машинных команд, однако их обработка происходит, как правило, на завершающих этапах фазы генерации кода.
72. Атрибутные транслирующие грамматики: синтаксически управляемые определения и схемы трансляции как способы записи семантических правил, связанных с продукциями грамматик, понятие атрибута, синтезируемые и наследуемые атрибуты, вычисление значений атрибутов, L-атрибутные и S-атрибутные транслирующие грамматики, реализация атрибутного перевода.
Для трансляции конструкций языка программирования компилятору, помимо генерации кода может потребоваться отследить множество различных параметров. Например, компилятору может понадобиться информация о типе конструкции, расположении первой инструкции в целевом коде или количестве сгенерированных инструкций. Таким образом, можно говорить о некоторых абстрактных атрибутах, связанных с языковыми конструкциями – типах, строках, адресах памяти.
Значения атрибутов вычисляются согласно семантическим правилам, связанным с продукциями грамматики. Существует два вида записи для связанных с продукциями семантических правил:
1) синтаксически управляемые определения – представляют собой высокоуровневые спецификации трансляции, скрывающие множество деталей реализации и освобождающие пользователя от явного указания порядка выполнения трансляции;
2) схемы трансляции - указывают порядок, в котором выполняются семантические правила; так что эти схемы показывают определенную часть деталей реализации.
Концептуально при обоих методах разбирается входной поток лексем, строится дерево разбора и обходится так, как необходимо для выполнения семантических правил в узлах дерева разбора (рис. 48). Выполнение семантических правил может генерировать код, сохранять информацию в таблице символов, выводить сообщения об ошибках или выполнять какие-либо другие действия. Результат трансляции потока лексем будет получен путем выполнения указанных семантических правил.
Рис. 48. Концепция синтаксически управляемой трансляции