- •Вариант №5
- •Управляющая таблица детерминированного конечного автомата по автоматной
- •Языку принадлежат цепочки, содержащие четное число нулей (не равное нулю), а также каждый ноль находится между единицами:
- •Для этого должны существовать правила исходной грамматики вида
- •Для этого должны существовать правила исходной грамматики вида
Для этого должны существовать правила исходной грамматики вида
AXВR , B+Y (т.е. в правиле за этим символом Х должен следовать нетерминал, из которого нетривиальным образом выводится цепочка, начинающаяся на Y).
Если из начального символа грамматики S+Y, то <•Y.
Итак, ищем правила, в правой части которых есть нетерминал, перед которым стоит какой-либо символ. Затем смотрим, с каких символом могут начинаться выводы из этого нетерминала.
1-ое: E E or T, из Т возможы выводы: T T and P P and P i and P
( E ) and P
-
not P and P
Получили: or <• T, or <• P, or <• i, or <• ( , or <• not
3-е: T T and P, из P возможны выводы: P i , P ( E ), P not P
Получили отношения: and <• i, and <• (, and <• not
6-ое: P ( E ), ищем все возможные символы, с которых начинаются цепочки,
выводимые из Е:
E E or T T or T P or T i or T
( E ) or T
not P or T
Отсюда отношения: (<• E, (<• T, (<•P, (<• i, (<• ), (<• not.
7-ое: P not P, в предыдущем правиле на промежуточном этапе мы уже нашли все
возможные символы, с которых начинаются цепочки, выводимые из P: i, (, not.
Отношения: not<• i, not<• (, not<• not
Из начального символа грамматики выводятся цепочки, начинающиеся с символов:
E E or T T or T P or T i or T
( E ) or T
not P or T
Отсюда отношения: <• E, <• T, <•P, <• i, <• ), <• not.
-
Ищем отношения вида X •> Y (Х сворачивается раньше, чем У).
Для этого должны существовать правила исходной грамматики вида
AВYR , B+X (т.е. в правиле перед символом Y должен находиться нетерминал, из которого нетривиальным образом выводится цепочка, заканчивающаяся на X).
Если из начального символа грамматики S+X (вывод заканчивается на Х), то X•>.
В исходной грамматике ищем правила, содержащие нетерминал, непосредственно за которым следует какой-либо символ. Затем смотрим, на какие символы могут заканчиваться цепочки, выводимые из нетерминала.
1-ое : E E or T , найдем все символы, на которые могут заканчиваться выводы
из Е E or T E or P E or i
E or ( E )
Можем занести в матрицу отношения: T•> or, P•> or, i•> or, ) •> or
3-е: T T and P , в превыдущем правиле мы нашли символы, на которые
заканчиваются цепочки из T: P, i,)
Отношения: P•> and, i•> and, ) •> and
6-ое: P ( E ), все возможные символы, заканчивающие цепочки из E, найдены:
T•> ), P•> ), i•> ), ) •> )
Так как E является начальным символом грамматики, то также можем добавить следующие отношения: T•> , P•> , i•> , ) •>
Т.о. мы рассмотрели все возможные отношения между символами и занесли их в таблицу – матрицу предшествования.
|
|
E |
T |
P |
or |
and |
i |
not |
( |
) |
Eps |
|
E |
|
|
|
|
|
|
|
|
|
|
|
T |
|
|
|
•> |
|
|
|
|
•> |
•> |
|
P |
|
|
|
•> |
•> |
|
|
|
•> |
•> |
|
or |
|
<• |
<• |
|
|
<• |
<• |
<• |
|
|
|
and |
|
|
|
|
|
<• |
<• |
<• |
|
|
|
i |
|
|
|
•> |
•> |
|
|
|
•> |
•> |
|
not |
|
|
|
|
|
<• |
<• |
<• |
|
|
|
( |
<• |
<• |
<• |
|
|
<• |
<• |
<• |
|
|
|
) |
|
|
|
•> |
•> |
|
|
|
•> |
•> |
|
|
<• |
<• |
<• |
|
|
<• |
<• |
<• |
|
|
В построенной матрице существуют ячейки, в которых два отношения пересекаются, следовательно, исходная грамматика не является грамматикой простого предшествования. В то же время отношение •> не пересекается с объединением отношений <• и - грамматика операторного предшествования.
Построение функции переноса f.
Функция переноса f зависит только от верхнего символа магазина X и самого левого необработанного символа a входной цепочки. Поэтому f определяется на множестве (V { }) (T { }) :f(X, а) = ПЕРЕНОС, если Х <• а или Х а ;
f(X, а) = СВЕРТКА, если Х •> а ;
f(S, ) = ДОПУСК;
f(X, а) = ОШИБКА в остальных случаях.
Построение функции свертки g.
Функция свертки g зависит от верхней части магазинной цепочки, включающей основу и еще один символ ниже нее. Необработанная часть входной цепочки на g не влияет, поэтому g задается только на (V { }): Функция свертки g определяется так, чтобы при свертке применялось самое длинное правило из списка альтернатив.
а) g(X,) = i, если B R и имеет номер i и в R нет правила
вида A X;
-
g() = ОШИБКА во всех остальных случаях.
Цепочка соответствует правой части правила исходной грамматики , а Х - первый символ слева от основы, т.е. между этим символом и первым символом основы должно выполняться отношение <• .
По матрице предшествования определяем множества символов, которые могут находится под каждой основой.
|
(правая часть) |
g() |
|
|
X |
|
|
|
( |
E or T |
1 |
|
|
E or T |
1 |
|
( |
T |
2 |
|
|
T |
2 |
|
or |
T and P |
3 |
|
( |
T and P |
3 |
|
|
T and P |
3 |
|
or |
P |
4 |
|
( |
P |
4 |
|
|
P |
4 |
|
or |
i |
5 |
|
and |
i |
5 |
|
not |
i |
5 |
|
( |
i |
5 |
|
|
i |
5 |
|
or |
( E ) |
6 |
|
and |
( E ) |
6 |
|
not |
( E ) |
6 |
|
( |
( E ) |
6 |
|
|
( E ) |
6 |
|
or |
not P |
7 |
|
and |
not P |
7 |
|
not |
not P |
7 |
|
( |
not P |
7 |
|
|
not P |
7 |
