
- •Московский автомобильно-дорожный государственный технический университет (мади)
- •I.Формальные языки и грамматики
- •I.1. Цепочки символов
- •I.2. Операции над цепочками символов
- •I.3. Понятие языка
- •I.4. Способы задания языка
- •I.5. Синтаксис и семантика языка
- •I.6. Определение грамматики
- •I.7. Пример грамматики
- •I.8. Принцип рекурсии в правилах грамматики
- •I.9. Способы задания грамматик
- •I.9.1. Использование метасимволов
- •I.9.2. Запись правил грамматики в графическом виде
- •I.10. Распознаватель
- •I.10.1. Схема распознавателя
- •I.10.2. Задача разбора
- •I.11. Классификация грамматик
- •I.12. Классификация языков
- •I.13. Примеры классификаций языков и грамматик
- •I.14. Цепочки вывода
- •I.14.1. Понятие о выводе
- •I.14.2. Сентенциальная форма грамматики
- •I.14.3. Левосторонние и правосторонние выводы
- •I.14.4. Дерево вывода и методы его построения
- •I.15. Однозначности и эквивалентности грамматик
- •I.15.1. Однозначные и неоднозначные грамматики
- •I.15.2. Проверка однозначной и эквивалентной грамматик
- •I.15.3. Правила, задающие неоднозначность в грамматиках
- •II. Принципы построения трансляторов
- •II.1. Определения транслятора
- •II.2. Определение компилятора
- •II.3. Определения интерпретатора
- •II.4. Этапы трансляции
- •II.5. Фазы компиляции
- •II.6. Ти ( таблицы идентификаторов)
- •II.6.1. Назначение и особенности построения
- •II.6.2. Простейшие методы
- •II.6.3. Построение ти по методу бинарного дерева
- •II.6.5. Выбор Хэш-функции при построении ти
- •II.6.7. Построение ти по методу цепочек
- •II.7. Лексические анализаторы
- •II.7.1. Назначение ла
- •II.7.2. Определение границ лексем
- •II.7.3. Выполнение действий, связанных с лексемами
- •II.7.4. Применение конечных автоматов (ка) для построения ла
- •II.7.5. Алгоритм построения ка
- •II.7.6. Пример применения ка для построения ла
- •II.8. Принципы построения синтаксических анализаторов (са)
- •II.8.1. Значение са
- •II.8.2. Автоматы с магазинной памятью
- •II.9. Принципы построения семантического анализатора (с-а)
- •II.9.1. Назначение с-а
- •II.9.2. Проверка соблюдения во входной программе семантических соглашений
- •II.9.3. Дополнение внутреннего представления программы
- •II.9.4. Проверка смысловых норм языка программирования
- •II.10. Принципы генерации кода
- •II.11. Оптимизация кода
I.15.2. Проверка однозначной и эквивалентной грамматик
Гр. я.п. всегда должна быть однозначной. Нужно:
1) проверить, является ли она однозначной;
2)если она неоднозначная, то как ее преобразовать к однозначному виду.
Однозначность – это свойство гр., а не языка. Для некоторых языков, заданных неоднозначными гр., можно построить эквив. однознач. гр., задающую тот же язык. Чтобы убедиться, что заданная гр. является неоднознач. , достаточно в заданном ею языке найти хотя бы одну цепочку, которая допускала бы более чем 1 левосторон. или правосторон. вывод.
Не всегда легко обнаружить такую цепочку символов. Кроме того, если такая цепочка не найдена, нельзя утверждать, что данная гр. является однозначной, поскольку перебрать все цепочки невозможно, их количество бесконечно. Если всё же гр. является неоднозначной, то необходимо попытаться преобразовать ее к однозначному виду.
Например, для рассмотренной ранее неоднозначной гр. ариф. выражений существует эквивалентная ей однозначная гр. a b
G’({+,-,*,/,(,),a,b},{S,T,E},P’,S)
С правилом
P’ :
S→ S+T|S-T|T
T→T*E|T/E|E
E→(S) |a|b
В этой гр. для рассмотренной выше цепочки символов языка(a*b+a) возможен только 1 левосторонний вывод
S⇒ S+T ⇒ T+T⇒T*E+T⇒E*E+T⇒a*E+T⇒a*b+T⇒a*b+E⇒a*b+a
Этому выводу соответствует единственное возможное дерево вывода
Хотя цепочка вывода несколько удлинилась, приоритет операции в данном случае единственно возможный и соответствует их порядку в арифметике.
Задача эквивалентности грамматик в общем виде формируется так:
Имеются две гр. G и G’. Необходимо построить алгоритм, который позволял бы установить являются ли они эквивалентными, т.е. надо проверить утверждение L(G)=L(G’)
Задача установления экв. гр. в общем случае, так же как и задача однозначности в общем случае, не разрешимы. Однако неразрешимость этих задач в общем случае совсем не означает, что они неразрешимы вообще. Во многих частных случаях для определенных классов (типов) гр. ,в частности для регулярных гр. , эти задачи решены. Например, приведенная выше гр. G’ для ариф. выражений над операндами a и b относится к классу гр. КС гр. На основе этой гр. можно построить распознаватель на основе МП-автомата, а потому можно утверждать, что она является однозначной.
I.15.3. Правила, задающие неоднозначность в грамматиках
Для КС гр. существуют определенного вида правила,по наличию которых все множество наличия гр. G(VT,VN,P,S) можно утверждать, что она является неоднозначной.
Правила:
1) A →AA| α
2) A→AαA| β
3)A→ αA|A β | γ
4)A→ αA|αA β A| γ
Если в заданной гр. встречается хотя бы одно правило подобного вида, то такая гр. всегда будет неоднозначной. Однако, если подобных правил во всем множестве гр. нет – это совсем не означает, что она является однозначной, т.е. это условие необходимое, но недостаточное. Установленные условия при удовлетворении которых гр. всегда является однозначной. Они справедливы для всех регулярных и многих классов КС гр. Однако известно, что эти условия являются достаточными, но необходимыми для данных грамматик.
Например, для гр. ариф. выражений с операндами a и b
a…b
G({+,-,*,/,(,),a,b},{S},P,S)
Во множестве правил
P:S→S+S|S-S|S*S|S/S|(S) |a|b
Встречаются правила 2 типа
S→S+S
S→a,
поэтому данная гр. является неоднозначной.