
- •Упрощенная модель компилятора. Проходы компилятора.
- •3. Проходы компиляторов
- •Задача идентификации. Транслитерация.
- •Методы лексического анализа.
- •Использование автомата для решения задачи идентификации слов (различные классы лексем).
- •Контекстно-свободные грамматики. Основные определения.
- •Задание кс грамматики. Способы задания грамматик: синтаксические диаграммы, форма Бекуса-Наура.
- •Выводы. Деревья синтаксического разбора.
- •Праволинейная грамматика.
- •Лишние нетерминалы.
- •Атрибутные грамматики. Наследуемые и синтезируемые атрибуты.
- •1 Синтезируемые атрибуты
- •2 Наследуемые атрибуты
- •Использование автоматов с магазинной памятью для нисходящего разбора.
- •Общие правила построения нисходящего распознающего автомата.
- •Распознающий автомат для s - грамматик.
- •Ll(1) - грамматики. Множество выбора.
- •Метод рекурсивного спуска.
- •Обработка ошибок при нисходящем разборе.Обнаружение и нейтрализация ошибок.
- •Восходящие методы синтаксического разбора. Метод перенос-свертка.
- •Задачи семантического анализа. Семантические соглашения.
Атрибутные грамматики. Наследуемые и синтезируемые атрибуты.
Атрибуты переменной: имя, значение, тип.
1 Синтезируемые атрибуты
Грамматика (атрибутные правила):
<S> <E>p{res}r r
p
<E>q <E>p+<T>r q p+r
<E>q <T>r q r
<T>q <T>p*<P>r q p*r
<T>q <P>r q r
<P>q (<E>r) q r
<P>q cr q r
Терминальные символы: {+, *, (, ), }
Проверим, принадлежит ли выражение c*(c+c) данной грамматике. Подставим в выражение значения 4*(6+2)
<S> {res32}
<E>32
<T>32
<T>4 * <P>8
<P>4 ( <E> )8
c4 <E>6 + <T>2
<T>6 <P>2
<P>6 c2
c6
В рассмотренном примере атрибуты были определены только у терминальных символов. Далее мы определяли атрибуты у нетерминальных символов, поднимаясь от листьев синтаксического дерева к его корню. Такая операция называется синтезом атрибутов. Значения переменных p,q,r – значения атрибутов (в данном случае констант), которые были получены на этапе лексического анализа и записаны в таблицу констант. Итак, атрибуты есть как у терминальных, так и у нетерминальных символов.
{res} – процедура, которая произведет операцию замены всего выражения на константу.
Синтезируемыми атрибутами также могут быть метки.
2 Наследуемые атрибуты
Грамматика:
<описание> type V <список переменных>
<список переменных> , V <список переменных>
<список переменных> ε
Терминальные символы: {type, V, “,”, }
Соответствует грамматике: type V,V,V
Не соответствуют грамматике: V, type; type ,V; type V,
Примеры: int a,b,c; char ch,chr
Можно получить атрибутивную грамматику:
<описание> typet Vp {DT}t1,p1 <список переменных>t2 (t1,t2) t; p1 p
<список переменных>t , Vp {DT}t1,p1 <список переменных>t2 (t1,t2) t; p1 p
<список переменных>t ε
Проверим, принадлежит ли выражение typereal V1,V2,V3 данной грамматике
<описание>
typereal V1 {DT}real,1 <список переменных>real
, V2 {DT}real,2 <список переменных>real
, V3 {DT}real,3 <список переменных>real
ε
В приведенном примере мы имели распространение атрибутов от корня дерева к его листьям (нисходящий метод распространения атрибутов). Этот метод называется наследованием атрибутов, а атрибуты, полученные таким образом, называются наследуемыми атрибутами.
Использование автоматов с магазинной памятью для нисходящего разбора.
1 Метод МП-автомата (автомата с магазинной памятью)
Автомат с МП – это математическая модель, с помощью которой мы можем решать задачи распознавания КСЕ.
Автомат с МП:
Состояние (S)
Сменить состояние (S’)
Магазин (синоним: стек)
Втолкнуть в магазин (A)
Вытолкнуть из магазина (берется верхний элемент)
Оставить без изменения
Входная цепочка
Сдвиг указателя
Держать (не давать сдвигаться)
Использовать состояния в дальнейшем мы не будем.
МП-автомат определяется пятью элементами:
конечное множество входных символов (алфавит), дополненное знаком окончания цепочки
конечное множество магазинных символов, дополненное знаком окончания цепочки
конечное множество состояний, причем одно из состояний выделено как начальное
управляющий механизм, который каждой комбинации входного символа, магазинного символа и состояния ставит в соответствие либо выход, либо переход. Переход от выхода отличается тем, что при переходе выполняются операции над магазинным состоянием и входом.
начальное содержимое магазина