Конспект лекций «Методы построения компиляторов» — различия между версиями

Материал из Вики ИТ мехмата ЮФУ
Перейти к: навигация, поиск
(Восходящий синтаксический анализ)
(Восходящий синтаксический анализ)
Строка 101: Строка 101:
  
 
Неоднозначности вида shift-reduce и их разрешение.
 
Неоднозначности вида shift-reduce и их разрешение.
 +
 +
== Генераторы лексических и синтаксических анализаторов ==
 +
 +
Обзор.
 +
Yacc, Lex
 +
Byson, Flex
 +
CoCo
 +
ANTLR
 +
Gold Parser Builder
 +
GPPG
 +
 +
===Создание лексического анализатора с помощью gplex===
 +
 +
Общая структура .l файла
 +
 +
Особенности .l файла gplex
 +
 +
Типы лексем
 +
 +
Лексемы идентификаторов, чисел.
 +
 +
Ключевые слова
 +
 +
Вырезание комментариев
 +
 +
Позиция лексемы
 +
 +
===Создание синтаксического анализатора с помощью gppg===
 +
 +
Общая структура .y файла
 +
 +
Типы лексем
 +
 +
Таблица приоритетов и ассоциативности
 +
 +
Особенности .y файла gppg
 +
 +
Примеры
 +
# Простейший калькулятор
 +
## Простейший калькулятор с приоритетом операций
 +
## Создание дерева разбора программы
 +
## Преобразование в XML
 +
## Добавление переменных. Представление о таблице символов
 +
## Добавление присваивания
 +
## Добавление типов
 +
## Добавление управляющих конструкций

Версия 15:11, 4 января 2009

Контекстно свободные грамматики

Определение. Терминалы, нетерминалы, символы. Продукции. Стартовый символ.

Обозначения

a,b,c, ... - терминалы
u,v,w,x,y,z - строки терминалов
A,B,C, ... - нетерминалы
α,β,γ, ... - строки нетерминалов

Пример. Грамматика арифметических выражений.

E → E+E | E*E | (E) | -E | id

Порождение (вывод)

Обозначения

=>
=>*
=>+

Опр. Сентенциальной формой (цепочкой) грамматики называется строка, которая может быть выведена из стартового символа.

Опр. Предложением грамматики называется сентенциальная форма, состоящая из одних терминалов.

Опр. Языком L(G) грамматики G называется множество всех ее предложений.

Левое, правое порождение. Примеры.

Обозначения

=>(lm)
=>(lm)*
=>(rm)+

Дерево разбора строки грамматики. В отличие от порождения, из него исключена информация о порядке вывода.

Грамматика, которая дает более одного дерева разбора для некоторого предложения, называется неоднозначной.

Пример неоднозначной грамматики.

stmt → if expr then stmt
     | if expr then stmt else stmt
     | other  

Леворекурсивные грамматики, их проблемы. Алгоритм устранения левой рекурсии.

Синтаксический анализ

Понятие синтаксического анализатора.

Нисходящие (top-down) и восходящие (bottom-up) синтаксические анализаторы

Нисходящий синтаксический анализ

Опр. Синтаксический анализатор, работающий методом рекурсивного спуска и не требующий откатов, называется предиктивным синтаксическим анализатором.

Нерекурсивный предиктивный анализ

Схема работы со стеком, таблицей разбора, входным буфером

Алгоритм нерекурсивного предиктивного анализа

Пример

Множества FIRST и FOLLOW

Пример

Алгоритм построения таблиц предиктивного анализа

Определение LL(1) грамматики. Пояснение названия.

Утв. LL(1) грамматика не может быть лворекурсивной или неоднозначной.

Эквивалентное определение LL(1) грамматики.

Восстановление после ошибок в предиктивном анализе

Восходящий синтаксический анализ

Наиболее распространенная разновидность - ПС-анализ (перенос-свертка - shift-reduce)

Понятие основы. Примеры.

Обращенное правое порождение и обрезка основ.

Стековая реализация ПС-анализа. Основные операции:

Перенос (shift)
Свертка (reduce)
Допуск  (accept)
Ошибка  (error)

Утв. Основа всегда находится на вершине стека и никогда - внутри него. Доказательство.

Понятие активного префикса.

LR-анализаторы. SLR, канонический LR и LALR анализаторы.

Общая схема и алгоритм LR-анализа. Пример.

LR-грамматики.

Неоднозначности вида shift-reduce и их разрешение.

Генераторы лексических и синтаксических анализаторов

Обзор.

Yacc, Lex
Byson, Flex
CoCo
ANTLR
Gold Parser Builder
GPPG

Создание лексического анализатора с помощью gplex

Общая структура .l файла

Особенности .l файла gplex

Типы лексем

Лексемы идентификаторов, чисел.

Ключевые слова

Вырезание комментариев

Позиция лексемы

Создание синтаксического анализатора с помощью gppg

Общая структура .y файла

Типы лексем

Таблица приоритетов и ассоциативности

Особенности .y файла gppg

Примеры

  1. Простейший калькулятор
    1. Простейший калькулятор с приоритетом операций
    2. Создание дерева разбора программы
    3. Преобразование в XML
    4. Добавление переменных. Представление о таблице символов
    5. Добавление присваивания
    6. Добавление типов
    7. Добавление управляющих конструкций