Определение грамматики

Элементы, приведенные в грамматике, такие как < подлежащее> или < существительное>, играющие роль членов предложения или частей речи, называются нетерминальными (вспомогательными) символами или просто нетерминалами. В грамматике может быть любое количество нетерминалов. При определении языка программирования нетерминалами служат такие элементы как <оператор>, < выражение > и т.д.

Нетерминалы –это конструкции языка.

Такие элементы как дуб, заслоняет играющие роль слов – символов языка – называются терминальными (основными) символами, или просто терминалами.

Грамматика может содержать любое количество терминалов. В языках программирования терминалами являются используемые в них слова и символы, BEGIN, DO, + и т.д. Терминалы – это символы предложений порождаемого языка.

Правила грамматики (продукции) показывают как конструкция языка строится из других конструкций и символов.

Простейший вид продукции:

< один нетерминал>® любая конечная цепочка из терминалов и нетерминалов.

Цепочка справа от стрелки может быть пустой.

Пример такого правила: <A>® e.

Правило с пустой правой частью будем называть эпсилон-правилом. Грамматика может содержать любое количество правил.

Пример: продукция языка программирования:

<оператор>® IF <логическое выражение> THEN <оператор>

Один из нетерминалов выделяется как начальный нетерминал или начальный символ (или аксиома), с которого должны начинаться выводы цепочек языка. Для естественных языков таким нетерминалом может быть <предложение>, для языков программирования - <программа>. Один и тот же язык может быть определен бесконечным множеством различных грамматик.

Таким образом, порождающая грамматика Хомского определяется как четверка:

G= (Т, N, S, R), где

Т – конечное непустое множество символов (терминалов),

N – конечное непустое множество символов (нетерминалов),

причем ТÇN= Æ,

S – начальный символ грамматики (выделенный элемент нетерминального словаря),

R – конечное непустое множество продукций, каждая из которых имеет вид a®b. Здесь a и b – это цепочки из символов объединенного словаря, ® – разделитель правила на правую и левую части.

Ограничения:

1. Символ «®» не входит в объединенный словарь U= ТÈN,

2. a не должна быть пустой цепочкой.

Пример: G0= (Т0, N0, S, R0), Т0= {a, b, c}, N0= {A, B, S},

R0: S®caS

bA®abc

aS®bAc

bAB®ab

В литературе часто используется еще один способ записи грамматики, называемый формой Бекуса-Наура или БНФ. В этих обозначениях стрелка заменяется знаком ::=, за которым может следовать любое количество правых частей, разделенных вертикальной чертой. Обычно нетерминалы заключаются в угловые скобки или выделяются другим шрифтом. БНФ были впервые применены при описании языка программирования в сообщении об АЛГОЛе-60.

Вопросы и упражнения

1. К какому описанию языка применим термин формальная грамматика?

2. Опишите при помощи грамматики язык, состоящий из следующих предложений:

Зеленый крокодил видит зеленый лес.

Большой зеленый крокодил видит лес.

Крокодил видит большой зеленый лес.

Крокодил видит зеленый лес.

3. Дайте определение порождающей грамматики Хомского.

4. Задайте с помощью грамматики Хомского следующий язык: L={aab, abab, abc, aabc}. Постройте дерево вывода для одной из цепочек языка.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: