![](/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-средства. Направления интеллектуализации.
5.Конечные автоматы. Способы задания. Методы построения конечных автоматов. Преобразование конечных автоматов.
Конечный автомат – это математическая модель, которая задается множествами состояний Q, входных символов , функций переходов , начальное состояние , и конечных состояний Z.
Распознавателем языка называется программа, которая получает на вход строку х и отвечает "да", если х — предложение языка, или в противном случае "нет". Мы компилируем регулярное выражение в распознаватель путем построения обобщенной диаграммы переходов, называемой конечным автоматом. Такой автомат может быть детерминированным или недетерминированным (недетерминированный автомат может иметь более одного перехода из состояния при одном и том же входном символе).
Как детерминированные, так и недетерминированные конечные автоматы способны к распознаванию точных регулярных множеств. Таким образом, они могут распознавать все, что могут обозначать регулярные выражения. Однако детерминированные конечные автоматы, которые приводят к более быстрому распознаванию, обычно больше по размеру, чем эквивалентные недетерминированные.
Для описания конечных автоматов используется 2 метода: таблицы состояний, диаграммы переходов
Таблицы состояний: Li (столбец) – i-ый входной символ, Qi (строка) – i-ое состояние
Диаграмма имеет вид графа. Li – i-ый входной символ (дуги диаграммы),Qi – i-ое состояние (узлы диаграммы)
При этом двойной узел обозначает конечное состояние автомата.
Состояние конечного автомата описывается парой Qi Lj, т.е. конечный автомат переходит в данное состояние при условии что на вход подан входной символ Li и автомат находится в состоянии Qi.
6 Лексический анализ. Методы и средства построения лексического анализатора.
Исходное текстовое представление программы совсем не для работы компилятора, поэтому во время анализа программа прежде всего разбивается на последовательность строк, или, как принято говорить, лексем (lexeme). Множество лексем разбивается на непересекающиеся подмножества (лексические классы). Лексемы попадают в один лексический класс, если они неразличимы с точки зрения синтаксического анализатора.
В большинстве языков программирования имеются следующие лексические классы: ключевые слова (по одному на каждое ключевое слово), идентификаторы, строковые литералы, числовые константы. Каждому подмножеству сопоставляется некоторое число, называемое идентификатором лексического класса (token) или, короче, лексическим классом
7 Распознавание цепочек символов с помощью конечных автоматов.
|
При анализе цепочки w = ababa автомат из примера 3.3, а, может сделать следующую последовательность тактов:
(1,
ababa)
(1,
baba)
(1,
aba)
(2,
ba)
(3,
a)
(4,
e).
Состояние 4 является заключительным, следовательно, цепочка w допускается этим автоматом.
При анализе цепочки w = ababab автомат из примера 3.3, б, должен сделать следующую последовательность тактов:
(1,
ababab)
(2,
babab)
(7,
abab)
(8,
bab)
(7,
ab)
(8,
b)
(7,
e).
Так как состояние 7 не является заключительным, цепочка w не допускается этим автоматом.