
- •Упрощенная модель компилятора. Проходы компилятора.
- •3. Проходы компиляторов
- •Задача идентификации. Транслитерация.
- •Методы лексического анализа.
- •Использование автомата для решения задачи идентификации слов (различные классы лексем).
- •Контекстно-свободные грамматики. Основные определения.
- •Задание кс грамматики. Способы задания грамматик: синтаксические диаграммы, форма Бекуса-Наура.
- •Выводы. Деревья синтаксического разбора.
- •Праволинейная грамматика.
- •Лишние нетерминалы.
- •Атрибутные грамматики. Наследуемые и синтезируемые атрибуты.
- •1 Синтезируемые атрибуты
- •2 Наследуемые атрибуты
- •Использование автоматов с магазинной памятью для нисходящего разбора.
- •Общие правила построения нисходящего распознающего автомата.
- •Распознающий автомат для s - грамматик.
- •Ll(1) - грамматики. Множество выбора.
- •Метод рекурсивного спуска.
- •Обработка ошибок при нисходящем разборе.Обнаружение и нейтрализация ошибок.
- •Восходящие методы синтаксического разбора. Метод перенос-свертка.
- •Задачи семантического анализа. Семантические соглашения.
Контекстно-свободные грамматики. Основные определения.
Грамматики
представляют собой наиболее распространенный
класс описаний языков. При описании
грамматики необходимо начать с определения
алфавита языка, который задается как
набор допустимых терминальных
символов.
Кроме того, необходимо определить набор
правил
вывода вида
a->b
с помощью которых строятся все цепочки
языка. В левой и правой части этих правил
могут встречаться специальные
нетерминальные
символы;
в процессе вывода нетерминальные символы
заменяются с помощью соответствующих
правил до полной замены на соотвествующие
терминалы. Наконец, грамматика должна
включать в себя начальный
символ ,
или аксиому, с которой начинается
получение любого предложения языка.
Итак, грамматика
определяется
как следующая четверка:
,
где
- конечное множество терминальных символов;
- не пересекающееся с конечное множество нетерминальных символов;
- конечный набор порождающих правил вида ( ,
), где
,
- начальный символ, где
По классификации Хомского: Грамматика называется:
выровненной вправо (праволинейной) , если любое правило из имеет вид
или
, где
,
- нетерминалы, а
- терминал (возможно, пустой).
контекстно-свободной (бесконтекстной) , если любое правило из имеет вид
, где - нетерминал, - нетерминал или терминал
контекстно-зависимой (неукорачивающей) , если все правила из
имеют вид
, где
общего вида (без ограничений) , если грамматика не удовлетворяет ни одному из указанных выше ограничений.
Задание кс грамматики. Способы задания грамматик: синтаксические диаграммы, форма Бекуса-Наура.
Знак – графическое начертание.
Символ – знак, в который вложен смысл.
Словарь – набор слов, из которых строятся конструкции языка.
Терминальные символы (терминалы) – слова из словаря, из которых строятся цепочки (a,b,c).
Нетерминальные символы – вспомогательные символы, требующиеся для построения правил грамматики (<A>,<B>,<C>).
Правило грамматики – выражение, в левой части которого всегда стоит нетерминальный символ, а в правой – цепочка из терминальных и нетерминальных символов, которые показывают, как стоятся синтаксически верные конструкции языка.
<IF> if <логическое_выражение> then <блок>
<A> a<B>b<C>
Формы записи правил:
Синтаксические диаграммы
терминал
нетерминал
Нормальная форма Бэкуса-Наура (БНФ)
if, else // терминал
<оператор>, <блок> // нетерминал
::= // по определению есть
| // или
[] // необязательная часть
() // повторение
Теоретическая форма
<A> a<B><C>
КСГ задается следующими множествами:
множество терминалов Lт
множество нетерминалов Lн (причем Lт в пересечении с Lн дает пустое множество)
множество правил (грамматик)
<A>
,
где
- цепочка из терминальных и нетерминальных
символов (
может быть пустой цепочкой)
один нетерминал, помеченный как стартовый