Порождающие грамматики

Словами языка, заданного грамматикой, являются все последовательности терминалов, выводимые (порождаемые) из начального нетерминала по правилам вывода.

Чтобы задать грамматику, требуется задать алфавиты терминалов и нетерминалов, набор правил вывода, а также выделить в множестве нетерминалов начальный.

Итак, грамматика определяется следующими характеристиками:

Σ – набор (алфавит) терминальных символов

N – набор (алфавит) нетерминальных символов

P – набор правил вида: «левая часть» «правая часть», где:

«левая часть» – непустая последовательность терминалов и нетерминалов, содержащая хотя бы один нетерминал

«правая часть» – любая последовательность терминалов и нетерминалов

S – стартовый (начальный) символ из набора нетерминалов.

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

Конечной строкой является строка, полностью состоящая из терминалов, и, следовательно, являющаяся словом языка.

Существование вывода для некоторого слова является критерием его принадлежности к языку, определяемому данной грамматикой.

Пример – арифметические выражения

Рассмотрим простой язык, определяющий ограниченное подмножество арифметических формул, состоящих из натуральных чисел, скобок и знаков арифметических действий.

Терминальный алфавит:

Σ={'0','1','2','3','4','5','6','7','8','9','+','-','*','/','(',')'}.

Нетерминальный алфавит:

{ ФОРМУЛА, ЗНАК, ЧИСЛО, ЦИФРА }

Правила:

1. ФОРМУЛА→ФОРМУЛА ЗНАК ФОРМУЛА – (формула есть две формулы, соединенные знаком)

2. ФОРМУЛА→ЧИСЛО – (формула есть число)

3. ФОРМУЛА→(ФОРМУЛА) – (формула есть формула в скобках)

4. ЗНАК→+ | - | * | / – (знак есть плюс или минус или умножить или разделить)

5. ЧИСЛО→ЦИФРА – (число есть цифра)

6. ЧИСЛО→ЧИСЛО ЦИФРА – (число есть число и цифра)

7. ЦИФРА→0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 (цифра есть 0 или 1 или... 9)

Начальный нетерминал:

ФОРМУЛА

Вывод:

Выведем формулу (12+5) с помощью перечисленных правил вывода.

ФОРМУЛА→(ФОРМУЛА)

(ФОРМУЛА) → (ФОРМУЛА ЗНАК ФОРМУЛА)

(ФОРМУЛА ЗНАК ФОРМУЛА) → (ФОРМУЛА + ФОРМУЛА)

(ФОРМУЛА + ФОРМУЛА) → (ФОРМУЛА + ЧИСЛО)

(ФОРМУЛА + ЧИСЛО) → (ФОРМУЛА + ЦИФРА)

(ФОРМУЛА + ЦИФРА) → (ФОРМУЛА + 5)

(ФОРМУЛА + 5) → (ЧИСЛО + 5)

(ЧИСЛО + 5) → (ЧИСЛО ЦИФРА + 5)

(ЧИСЛО ЦИФРА + 5) → (ЦИФРА ЦИФРА + 5)

(ЦИФРА ЦИФРА + 5) → (1 ЦИФРА + 5)

(1 ЦИФРА + 5) → (12 + 5)


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



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