Задача разбора. Разновидности алгоритмов разбора. Домино де Ремера. Общая схема распознавателя. Классификация распознавателей по типам. Примеры
Вид материала | Задача |
СодержаниеСписок литературы |
- Программа курса лекций «Математические методы и модели исследования операций», 27.98kb.
- Последовательность и образцы синтаксического разбора Порядок разбора словосочетания, 412.38kb.
- Андрияновой Наталии Анатольевны 5 класс Русский язык Тема: Корни с чередованием букв, 96.91kb.
- Д. С. Осипенко Понятие алгоритма. Примеры алгоритмов. Свойства алгоритмов. Способы, 96.46kb.
- «Понятие об алгоритме. Примеры алгоритмов. Свойства алгоритмов. Типы алгоритмов, построение, 84.9kb.
- 07. 08. 02 день заезда 08. 08., 17.83kb.
- Урок русского языка по теме «морфологический разбор наречия», 46.56kb.
- Положение о порядке служебного расследования, разбора и учета нарушений безопасности, 967.32kb.
- Список произведений для аналитического разбора на экзаменационных испытаниях (гак), 23.13kb.
- Построение и анализ комбинаторных алгоритмов, 62.76kb.
«Теория языков программирования и методы трансляции»
(лето 2011 года)
- Определение транслятора, компилятора, интерпретатора. Входной язык, целевой язык, язык реализации. T-диаграммы. Кросс-трансляторы. Автоматическое построение компилятора и его частей. Самокомпилятор. Раскрутка. Примеры раскрутки.
- Структура транслятора. Многопроходные и однопроходные трансляторы. Таблицы транслятора. Компиляция «на лету». Cхема трансляции программ в .NET. Примеры.
- Трансляторы с языка ассемблера (ассемблеры). Конструкция простого двухпроходного ассемблера. Особенности построения интерпретаторов. Примеры.
- Виртуальные машины, ее архитектура и реализация. Язык ассемблера виртуальной машины. Программирование в коде виртуальной машины. Примеры.
- Цепочки символов и операции над ними. Языки, их классификация. Синтаксис и семантика языка. Способы определения языка. Примеры.
- Формальное определение грамматики. Четыре типа грамматик по Н. Хомскому. Сентенции и сентенциальные формы. Примеры.
- Способы задания грамматик. Форма Бэкуса-Наура. Расширенная форма Бэкуса-Наура. Примеры.
- Вывод. Цепочки вывода. Дерево вывода. Методы построения дерева вывода. Примеры.
- Эквивалентность и однозначность грамматик. Проверка однозначности и эквивалентности грамматик. Различные типы конфликтов в неоднозначных грамматиках и их разрешение. Примеры.
- Задача разбора. Разновидности алгоритмов разбора. Домино де Ремера. Общая схема распознавателя. Классификация распознавателей по типам. Примеры.
- Назначение и особенности построения таблиц идентификаторов. Построение таблиц идентификаторов по методу бинарного дерева, xеш-функции и хеш-адресация, комбинированные способы построения таблиц идентификаторов. Примеры.
- Основные задачи лексического анализа. Назначение лексического анализатора (сканера). Принципы и проблемы построения лексических анализаторов. Примеры.
- Виды и значения лексем. Токены, шаблоны, лексемы. Атрибуты токенов. Лексические ошибки. Определение и распознавание токенов. Примеры.
- Регулярные и автоматные грамматики и языки. Пример автоматного языка. Граф автоматной грамматики. Дерево разбора в автоматной грамматике. Примеры.
- Детерминированные (Д) и недетерминированные (Н) конечные автоматы (КА). Преобразование НКА в ДКА. Таблица переходов ДКА. Минимизация КА. Автоматы с магазинной памятью (МП-автоматы). Примеры.
- Программная реализация автоматного распознавателя. Использование конечного автомата для распознавания автоматного языка. Примеры.
- Регулярные выражения и регулярные множества. Эквивалентность регулярных выражений и автоматных грамматик. Регулярные языки и их свойства. Расширенная нотация для регулярных выражений. Примеры.
- Табличный LL(1)-анализатор. Принципы построения, область применения. Примеры.
- Автоматизация построения лексических анализаторов. Утилита Lex. Примеры.
- КС-грамматики в нормальной форме Хомского, КС-грамматики в нормальной форме Грейбах. Примеры.
- Виды КС-грамматик: S, Q, LL и LR грамматики. Грамматики предшествования. Грамматики простого и операторного предшествования. Примеры.
- Однозначность КС-грамматики. Левосторонний и правосторонний вывод. Нисходящий и восходящий разбор КС-языков. Общий алгоритм распознавания КС-языков. Самовложение в КС-грамматиках. Примеры.
- Алгоритмы распознавания КС-языков. Требование детерминированного распознавания. Распознающий автомат для КС-языков. Примеры.
- Синтаксические диаграммы КС-языков. Определение языка с помощью синтаксических диаграмм. Примеры.
- Преобразование КС-грамматик: удаление бесплодных и недостижимых символов, устранение λ-правил, аннулирующих и цепных правил, устранение левой рекурсии. Цель преобразования КС-грамматик. Приведенные грамматики. Примеры.
- Синтаксический анализ КС-языков методом рекурсивного спуска. Левосторонний разбор по методу рекурсивного спуска. Расширенные варианты метода рекурсивного спуска. Рекурсивный спуск и табличный анализатор. Примеры.
- Синтаксический анализатор. Его назначение. Принципы работы распознавателей с возвратом. Нисходящий распознаватель с подбором альтернатив. Восходящий распознаватель на основе алгоритма «сдвиг—свертка». Нисходящие распознаватели КС-языков без возвратов. Примеры.
- LL(k) и LL(1) - грамматики. Левая и правая рекурсия. SLR(1) и LALR(1)-грамматики. Примеры.
- Синтаксический разбор для LR(0)-грамматик. Синтаксический разбор для LL(1)-грамматик. Табличный LL(1)-анализатор. Примеры.
- Перевод арифметических выражений в польскую запись. Алгоритм вычисления выражений в польской записи. Алгоритм Э. Дейкстры трансляции выражений в польскую запись (метод стека с приоритетами). Примеры.
- Грамматика и синтаксический анализ арифметических выражений. Интерпретация выражений. Контекстный анализ. Контекстный анализ модуля выражений операторов. Примеры.
- Включение действий в синтаксис. Семантические процедуры. Пример разработки синтаксического анализатора заданных конструкций языка С++.
- Автоматизация построения синтаксических анализаторов (генератор анализаторов YACC). Грамматики и YACC. Примеры.
- Синтаксические распознаватели на основе грамматик предшествования. Примеры.
- Анализ потока управления. Граф потока управления. Доминирование. Глубинное остовное дерево. Основные виды фрагментов графа потока управления и их свойства. Примеры.
- Анализ потоков данных. Достижимые определения и живые переменные. Формализация задач анализа потоков данных. Итеративный алгоритм для решения задач анализа потоков данных. Примеры.
- Промежуточные языки и причины их использования в компиляторах: атрибутные деревья разбора; прямая и обратная польская запись; триады/тетрады; RTL. Примеры.
- Формы промежуточного представления программы. Унификация промежуточного представления. Основные черты промежуточного представления, используемого в .NET (MSIL). Примеры.
- Семантический анализ. Его назначение и этапы. Внутреннее представление. Семантические таблицы. Семантический анализатор. Семантическое дерево выражения. Примеры.
- Общие принципы генерации кода. Синтаксически управляемый перевод. Работа с таблицами. Идентификация лексических единиц языков программирования. Примеры.
- Управление памятью и сборка мусора с точки зрения разработчика компилятора. Менеджеры памяти. Управление кучей. Подсчет ссылок и разметка памяти. Статическое и динамическое связывание. Стековый механизм управления памятью. Дисплей памяти процедуры (функции). Стековая организация дисплея памяти. Управление памятью в .NET. Примеры.
- Трансляция описаний. Трансляция списка импорта. Распределение памяти. Назначение адресов переменным. Примеры.
- Выбор инструкций при генерации кода. Постановка задачи выбора оптимальных инструкций. Генератор кода. Генерация кода для выражений. Генерация кода для операторов. Примеры.
- Трансляция процедур без параметров, с параметрами-значениями, параметрами-переменными и локальными переменными. Трансляция процедур-функций. Примеры.
- Контроль типов данных при трансляции. Идентификация. Простые и сложные структуры данных. Выравнивание границ данных. Память для типов данных (RTTI-информация). Трансляция линейных массивов. Примеры.
- Исключительные ситуации и их обработка. Обработка ошибок при трансляции. Примеры.
- Общие принципы оптимизации кода. Виды оптимизирующих преобразований. Представления программы, используемые в оптимизирующих преобразованиях. Примеры оптимизирующих преобразований. Машинно-зависимые методы оптимизации. Примеры.
- Оптимизация линейных участков программы. Оптимизация вычисления логических выражений. Оптимизация циклов. Оптимизация передачи параметров в процедуры и функции. Примеры.
- Понятие и структура современной системы программирования. Интегрированные среды разработки. Функции текстовых редакторов в системах программирования. Компилятор как составная часть системы программирования. Примеры.
- Компоновщик. Назначение и функции компоновщика. Загрузчики и отладчики. Функции загрузчика. Библиотеки подпрограмм как составная часть систем программирования. Статические и динамические библиотеки подпрограмм. Ресурсы пользовательского интерфейса. Редакторы ресурсов. Примеры.
Список литературы
1. Молчанов А.Ю. Системное программное обеспечение. – СПб.: Питер, 2010 г.
2. Молчанов А.Ю. Системное программное обеспечение. Лабораторный практикум – СПб.: Питер, 2005 г.
3. Вояковская Н.Н., Москаль А.Е., Булычев Д.Ю., Терехов А.А. Разработка компиляторов. Учебный курс Интернет-Университета Информационных технологий t.ru
4. Гагарина Л.Г., Кокорева Е.В. Введение в теорию алгоритмических языков и компиляторов. – М.: ИД «Форум», 2009 г.
5. Свердлов С. З. Языки программирования и методы трансляции. – СПб.: Питер, 2007 г.
6. Ахо А., Компиляторы: принципы, технологии и инструментарий / А. Ахо (и др.).– М.: Издательский дом «Вильямс», 2008 г.
7. Карпов Ю.Г. Основы построения трансляторов. – СПб.: «БХВ-Петербург», 2005 г.