
Формальные грамматики.
синтаксис - определения, которые точно устанавливают какие строки имеют смысл в данном языке(для его описания ф-лы Бэкуса - Наура и синтаксические диаграммы, формальные грамматики.). семантика языка - правила интерпретации синтаксических определений, задающие смысл допустимым конструкциям языка. Грамматика - математическая система, порождающая язык. Строки языка строятся способом, точно определенным правилами грамматики.
Формальная
грамматика
- это четверка
где
- конечное мн-во нетерминалов;
- конечное мн-во терминалов,
;
- конечное мн-во правил-продукций вида
,
где
- строка левой части продукции
,
- строка правой части продукции
,
- начальный символ грамматики
.
Символ
в продукции
означает возможность замены строки
на строку
.
Грамматика
рекурсивным образом определяет
порождаемый язык, который содержит
мн-во выводимых из начального символа
строк. Строка
называется выводимой
строкой
грамматики
,
если
продукция из множества
и
строка терминальных и нетерминальных
символов длиной 1. Выводимая строка
получается путем замены строки
на строку
в строке
.
Такое преобразование строки записывают
в виде
.
Преобразование
можно рассматривать как отношение на
множестве
.
Это отношение является рефлексивным,
так как допустима замена строки
на самое себя. Однако оно определено не
для всех элементов
,
нетранзитивно и несимметрично.
Отношение
на множестве
задается как
,
если существует последовательность
для
и
.
В этом случае говорят, что строка
выводится из строки
за один более шагов. Отношение
рефлексивно
и транзитивно, но несимметрично.
Если
строка
является выводимой из начального символа
строкой (
),
то ее называют сентенциальной
формой.
Не
содержащая нетерминальных символов
сентенциальная форма называется
предложением
(или сентенцией).
Множество всех предложений грамматики
называют языком, порождаемым этой
грамматикой и обозначают
.
Таким образом
Если
и
порождают один и тот же язык
.
О таких грамматиках говорят, что они
эквивалентны.
Классификация грамматик.
Грамматика
называется :
праволинейной
или автоматной
(тип 3), если
,
или
,
т.е. каждое правило из множества продукций
имеют вид
,
где
и
контекстно-свободной
(тип
2), если
,
;
контекстно-зависимой
неукорачивающей
(тип 1), если
,
и длина строки
не превышает длину строки
;
контекстно-зависимой
без ограничений
(тип 0), если
,
.
Язык,
порождаемый грамматикой типа
,
называется языком типа
.
Определенные
выше четыре типа языков и грамматик
называют иерархией Хомского. В приведенном
определении контекстно-свободной
грамматики недопустимыми являются так
называемые
-
продукции, продукции вида
.
Однако многие авторы включают такие
продукции в число допустимых продукций
контекстно-свободных грамматик, а
контекстно-свободные грамматики без
-
продукций называют
-свободными
грамматиками. Конечно при разработке
трансляторов более удобно использовать
именно такие грамматики без
-
продукций. Но и при наличии в грамматике
-
продукции ситуация не является
безнадежной, поскольку доказано, что
для любого контекстно-свободного языка
существует
-
свободная контекстно-свободная грамматика
,
такая, что
.
Построение такой грамматики несложно.
С точки зрения приложений к языкам программирования наиболее подходящими являются контекстно-свободные грамматики. Это связано с тем, что с помощью этих грамматик удается достаточно полно описать синтаксис существующих языков программирования. С точки зрения трансляции наиболее важным вопросом, на который необходимо иметь ответ, является вопрос о наличии нескольких выводов из начального символа одного и того же предложения языка.
Для
представления вывода
,
где
обычно используется дерево вывода.
Вершины дерева помечены символами из
множества
.
Корнем дерева является вершина, помеченная
начальным символом
,
а листьями вершины с терминальными
символами. Все промежуточные вершины
дерева помечены нетерминалами множества
.
Схема
вывода предложения
называется левосторонней(правосторонней),
если подстановка очередного правила
осуществляется всегда на место самой
левой (правой) сентенциальной формы.
Контекстно-свободную
грамматику, в которой все возможные
схемы выводов строки
соответствуют одному и тому же дереву
вывода будем называть однозначной..