Главная страница

Построение распознователя грамматик. Построение распознавателя для заданной грамматики и реализация е. Курсовая работа по дисциплине "Основы дискретной математики"


Скачать 227 Kb.
НазваниеКурсовая работа по дисциплине "Основы дискретной математики"
АнкорПостроение распознователя грамматик
Дата28.04.2022
Размер227 Kb.
Формат файлаdoc
Имя файлаПостроение распознавателя для заданной грамматики и реализация е.doc
ТипКурсовая
#502707
страница3 из 6
1   2   3   4   5   6

1.2 Классификация грамматик



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

Каждый тип грамматик включает грамматики более высоких типов, как частные случаи.


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


1.3 Эквивалентные преобразования грамматик



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

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

1 Удаление или добавление бесполезных (непродуктивных и недостижимых) нетерминалов

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

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

Алгоритм поиска непродуктивных нетерминалов в множестве правил P грамматики G:

- составить список нетерминалов, для которых найдется хотя бы одно правило, правая часть которого состоит только из терминалов;

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

- если на предыдущем шаге список не пополняется, то получен исчерпывающий список всех продуктивных нетерминалов.

Hетерминалы грамматики, не попавшие в список, построенный по приведенному выше алгоритму, являются непродуктивными и, не нарушая эквивалентности, из множества правил Р можно удалить все правила, содержащие такие нетерминалы.

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

Свойство Б. Если нетерминал в левой части правила является достижимым, то достижимы все нетерминалы, стоящие в правой части этого правила.

Алгоритм поиска недостижимых нетерминалов в множестве правил P грамматики G:

- образовать одноэлементный список из начального нетерминала грамматики;

- если в множестве Р найдено правило, левая часть которого уже в списке, то включить в список все нетерминалы из его правой части;

- если на предыдущем шаге список не пополняется, то получен исчерпывающий список всех достижимых нетерминалов.

Hетерминалы грамматики не попавшие в список, построенный по приведенному выше алгоритму, являются недостижимыми и, не нарушая эквивалентности, из множества правил Р можно удалить все правила, содержащие такие нетерминалы.

Пример проверки нетерминалов грамматики:
G [S]: VN = {S, A, B, C, D}; VT = {a, b, c, d}; P = {S  aS (1), S  aA (2), A  bB (3),

A  bC (4), B  d (5) D  c (6) }.
1. Проверка нетерминалов на продуктивность.

В правых частях правил (5) и (6) только терминалы. Внесем в создаваемый список продуктивных нетерминалы B и, D. Затем в соответствии с правилом (3) - A (в правой части терминал и продуктивный нетерминал); в соответствии с правилом (2) - S; анализ других правил список не пополняет. Получен исчерпывающий список продуктивных нетерминалов - { B, D, A, S}. В списке отсутствует нетерминал С (непродуктивный, правило (4) для минимизации исходной грамматики исключим из множества P).

2. Проверка нетерминалов на достижимость.

Внесем на первом шаге в создаваемый список достижимых нетерминалов начальный символ грамматики S, затем на основании правила (2) дополним список нетерминалом A; правило (3) дает основания внести в список нетерминал В. Дальнейший анализ правил в соответствии с алгоритмом поиска достижимых нетерминалов список не пополняет. Получен исчерпывающий список продуктивных нетерминалов - {S,A,B}. В списке отсутствует нетерминал D (недостижимый, правило (6) для минимизации исходной грамматики исключим из множества P).

В результате этих преобразований получим минимальную грамматику G1 [S], эквивалентную исходной.
G1 [S]: VN = {S, A, B}; VT = {a, b, d}; начальный символ S;

P = { S  aS (1), S  aA (2), A  bB (3), B  d (4) }.
1   2   3   4   5   6


написать администратору сайта