
- •Обзорная лекция по курсу «языки программирования и методы трансляции»
- •Основная литература
- •1 Описание языка программирования
- •2 Введение в трансляцию
- •3 Способы описания языка
- •4 Формальные языки и грамматики. Основные термины и определения
- •5 Порождающие грамматики (Грамматики н.Хомского1)
- •6 Классификация формальных грамматик
- •7 Автоматные грамматики и конечные автоматы
- •7.1. Механизмы распознавания и преобразования
- •7.2 Конечные автоматы
- •7.3 Способы задания конечных автоматов
- •Контекстно-свободные грамматики и языки
- •Проверка существования языка
- •Удаление бесполезных символов грамматики
- •Эквивалентные преобразования кс-грамматик
- •9.1 Устранение цепных правил
- •Удаление произвольного правила
- •9.3 Левая факторизация правил
- •9.4 Преобразование к нормальной форме Хомского
- •Распознающий автомат для кс- языков (автомат с магазинной памятью)
- •Разнозновидности мп-автоматов
- •11 Методы синтаксического анализа
- •Нисходящий разбор
- •Восходящий разбор
- •12 Генерация внутреннего представления программ
- •12.1 Польская запись
- •2 Алгоритм перевода на промежуточный язык
- •2.1 Полиз как промежуточный язык
5 Порождающие грамматики (Грамматики н.Хомского1)
Порождающие грамматики – мощный механизм, позволяющий задавать множество правил вывода, порождающих цепочки над , принадлежащие языку L.
Порождающей грамматикой называется четверка:
G=(T, N, P, S)
Где
Т – конечное множество терминальных (основных) символов- основной алфавит. Элементами множества Т являются символы, из которых в конечном итоге и состоят цепочки языка, порождаемые грамматикой. Т – это не что иное, как алфавит языка, порождаемого грамматикой. В дальнейшем терминалы будем обозначать малыми латинскими буквами a, b, c, .. и. т.д;
N - конечное множество нетерминальных (вспомогательных) символов – вспомогательный алфавит. Нетерминалы – это понятия грамматики (языка), которые используются при его описании. Нетерминалы будем обозначать заглавными латинскими буквами A, B, C, …;
Р –
конечное множество правил вывода,
называемых также продукциями. Каждое
правило множества имеет вид:
,
(символ «»
читается как «это есть»)
где
и
- цепочки терминальных и нетерминальных
символов. Цепочка
не должна быть пустой, цепочка
может быть пуста:
;
.
Правило вывода определяет возможность
подстановки
вместо
в процессе вывода (порождения) цепочек
языка;
S (S N) - начальный символ грамматики – один из множества нетерминальных символов, начальный нетерминал. Начальный нетерминал – это понятие грамматики, соответствующее правильному предложению языка.
6 Классификация формальных грамматик
Н.Хомский предложил разделение грамматик на четыре типа в зависимости от вида их правил.
Тип 0 . Произвольная грамматика (грамматика общего вида). На вид их правил не накладывается никаких ограничений. Правила имеют вид: , где и - цепочки терминалов и нетерминалов. Цепочка не должна быть пустой.
Примером грамматики типа 0 является грамматика G=({A,S}, {0,1},P,S), где P={S0A1,0A00A1,A}.
Тип 1 .
Контекстно-зависимая грамматика
(КЗ-грамматика) – это грамматика,
правила вывода которой имеют вид:
,
где
- цепочки терминалов и нетерминалов, А-
нетерминальный символ. Цепочки
и называются
соответственно правым и левым
контекстом. Они задают условия
вывода: для любой цепочки замена
нетерминала А возможна только в контексте
и . Языки,
порождаемые КЗ-грамматиками называются
контекстно-зависимыми языками.
Примером КЗ-грамматики является грамматика G=({B,C,S},{a,b,c},P,S),
где P={ SaSBC, SabC, CB BC, bBbb, bCbc,cCcc}
Тип 2 . Контекстно-свободная грамматика (КС-грамматика) . Правила имеют вид:
,
где А- нетерминал, - цепочка терминалов и нетерминалов. Характерная особенность – в левой части правил всегда один нетерминальный символ.
Языки, порождаемые КС-грамматиками называются контекстно-свободными языками.
Примером КС-грамматики является грамматика G=({Е,Т,В},{I,+,*,(,)}, P, E),
где P = {ЕЕ+Т, ЕТ, Т Т*В, ТВ, Вi, B(E)}
Тип 3 . Автоматные (регулярные) грамматики. Все правила имеют одну из трех форм:
AaB
Aa
A,
Где A, B – нетерминалы, a- терминал, - пустая цепочка
Языки, порождаемые автоматными-грамматиками называются автоматными (регулярынми) языками.
Примером автоматной грамматики является грамматика G=({А,S},{0,1}, P, S),
где P = {S0A, S1A, A 0A, A0, A1}