- •Исключение бесполезных символов
- •Исключение бесполезных символов
- •Исключение -правил
- •Исключение -правил
- •Исключение цепных правил
- •Исключение цепных правил
- •Исключение цепных правил
- •Исключение левой рекурсии
- •Исключение левой рекурсии
- •Граф переходов полученного детерминированного автомата
- •Функции переходов
- •Описание языка, допускаемого конечным автоматом
- •Построение детерминированного конечного автомата по автоматной грамматике
- •Построение детерминированного конечного автомата по автоматной грамматике
- •Построение детерминированного конечного преобразователя
- •Построение детерминированного конечного преобразователя
- •Построение детерминированного автомата (распознаватель) с магазинной памятью Формулировка задания
- •Функции переходов:
- •Построение детерминированного автомата (распознаватель) с магазинной памятью
- •Построение детерминированного преобразователя с магазинной памятью.
- •Построение детерминированного преобразователя с магазинной памятью.
- •Построение недетерминированного расширенного мп-автомата по кс-грамматике
- •Построение недетерминированного расширенного мп-автомата по кс-грамматике
- •Формулировка задания
- •Задание
- •Решение
- •Формулировка задания
- •Задание
- •Построение управляющей таблицы
- •Формулировка задания:
- •Пример разбора цепочки, порождаемой заданной грамматикой предшествования
Исключение бесполезных символов
Алгоритм 3.7.1.1. Определение множества производящих нетерминальных символов КС-грамматики.
Вход. КС-грамматика G = (, , P, S).
Выход. Множество производящих нетерминальных символов p = {A | A + x, A , x +}.
Описание алгоритма.
Построить рекурсивно множества производящих нетерминалов 0p, 1p, … , ip, … следующим образом:
Положить 0p = , i = 1.
Положить ip = i-1p {A | A P, (i-1p )+}
Если ip i-1p, положить i = i + 1 и перейти к шагу 2.
Положить p = ip.
Конец алгоритма
Алгоритм 3.7.1.2. Определение множества достижимых символов КС-грамматики.
Вход. КС-грамматика G = (, , P, S).
Выход. Множество достижимых символов r = {X | S * X, X (S È N), , ( )*}.
Описание алгоритма.
Построить рекурсивно множества достижимых символов 0r, 1r, … , ir, … , следующим образом:
Положить 0r = {S}, i = 1.
Положить ir = i-1r {X | A X R и A i-1r }.
Если ir i-1r, положить i = i + 1 и перейти к шагу 2.
Положить r = ir.
Конец алгоритма
Алгоритм 3.7.1.3. Устранение бесполезных символов.
Вход. КС-грамматика G = (, , P, S), для которой L(G) .
Выход. КС-грамматика G = (¢, ¢, P¢, S), у которой L(G) и в ¢ ¢ нет бесполезных символов.
Описание алгоритма.
Построить множество p производящих нетерминалов грамматики G.
Положить G1 = (p, , P1, S,), где P1 состоит из правил множества P, содержащих только символы из p.
Построить множество r достижимых символов грамматики G1.
Положить G¢ = (¢, ¢, P¢, S,) , где ¢ = r, ¢ = r , а P¢ состоит из правил множества P1 , содержащих только символы из множества r.
Конец алгоритма
Пример 3.7
Исключить из грамматики G = (, , P, S), где = {А, В. С. S}, = {a, b, c}, P = {S аС, S А, А сАВ, В b, С а}, бесполезные символы.
После выполнения шага 1 алгоритма 3.7.1.3 множество p = {В, С, S}.
После исключения непроизводящих нетерминалов получим новую грамматику G1 = ({В, С, S}, {a, b, с}, P, S), где P = { S аС, В b, С а}.
Множество достижимых символов грамматики G1 r = {a, C, S}.
После исключения множества недостижимых символов из грамматики G1 получим грамматику G¢ = ({С, S}, {a}, {S аС, С а}, S), L(G¢) = {aa}.
Если применить к исходной грамматике сначала алгоритм 3.7.1.2, то получим, что все символы достижимы. Множество производящих символов грамматики G1 = {В, С, S }. После исключения непроизводящих символов из грамматики G1 имеем G¢ = ({В, С, S}, {a, b, с}, P¢, S ), где P¢ = {S аС, В b, С а}, L(G¢) = L(G) = {aa}, но грамматика G¢ содержит бесполезные символы B и b.
Исключение бесполезных символов
Задание.
2.2.1.3. T = { a, b, c, d, e, f }, N = { A, B, C, S }, R = { S b, S C, S cCB, A e, A Ab, B Bb, B cB, C Ca, C Bf, C d };
Решение:
Построим множество NPпроизводящих нетерминалов грамматики G.
Определим множество достижимых символов.
Новая грамматика, эквивалентная исходной имеет следующий вид:
G’ = <T’, N’, S, R’>
T’= { a, b, c, d, f}; N’ = { S, B, C}; R’= {S b, S C, S cCB, B Bb, B cB, C Ca, C Bf, C d }
Исключение бесполезных символов
Преобразовать КС-грамматику G = < T, N, S, R > в эквивалентную грамматику, не содержащую бесполезных символов:
2.2.1.3. T = { a, b, c, d, e, f }, N = { A, B, C, S }, R = { S b, S C, S cCB, A e, A Ab, B Bb, B cB, C Ca, C Bf, C d };
множество производящих нетерминалов Np={C,A,S}
- N0 = 0
A e, C d , S b -> значит N1={S,A,C}
N2 = {S,A,C}, т.к. больше нет правил вывода X,{ a, b, c, d, e, f ,S,A,C}
Np={C,A,S}