Xy, если в правой части правила они находятся рядом, т.Е. Axy
Т.о. ищем в нашей грамматике символы, находящиеся рядом и в соответствующие ячейки матрицы заносим обозначение одновременного сворачивания:
В 1-ом правиле: begin D, D ; , ; P, P end
В 3-ем правиле: D ; , ; d
В 5-ом правиле: P ; , ; P
-
Ищем отношения вида X <• Y (Х сворачивается позже, чем У).
Для этого должны существовать правила исходной грамматики вида
AXВR , B+Y (т.е. в правиле за этим символом Х должен следовать нетерминал, из которого нетривиальным образом выводится цепочка, начинающаяся на Y).
Если из начального символа грамматики S+Y, то <•Y.
Итак, ищем правила, в правой части которых есть нетерминал, перед которым стоит какой-либо символ. Затем смотрим, с каких символом могут начинаться выводы из этого нетерминала.
(1) S->begin D ; P end Из D возможны выводы, начинающиеся на d , D
Получили: begin <• d , begin <• D
(5) P->P ; P Из P возможны выводы, начинающиеся на P
Получили: ; <• p , ; <• P
Из начального символа S грамматики выводятся цепочки, начинающиеся с символa begin
Отсюда отношение: <• begin
-
Ищем отношения вида X •> Y (Х сворачивается раньше, чем У).
Для этого должны существовать правила исходной грамматики вида
AВYR , B+X (т.е. в правиле перед символом Y должен находиться нетерминал, из которого нетривиальным образом выводится цепочка, заканчивающаяся на X). Если из начального символа грамматики S+X (вывод заканчивается на Х), то X•>.
В исходной грамматике ищем правила, содержащие нетерминал, непосредственно за которым следует какой-либо символ. Затем смотрим, на какие символы могут заканчиваться цепочки, выводимые из нетерминала.
(1) S->begin D ; P end Цепочки, выводимые из D могут заканчиваться на d : d •> ;
Цепочки, выводимые из P могут заканчиваться на p : p •> end;
(3) D->D ; d Цепочки, выводимые из D могут заканчиваться на d : d •> ;
Все возможные символы, заканчивающие цепочки из S: end - end •>
|
S |
D |
P |
beg |
; |
end |
d |
p |
Eps |
S |
|
|
|
|
|
|
|
|
|
D |
|
|
|
|
= |
|
|
|
|
P |
|
|
|
|
= |
= |
|
|
|
beg |
|
=<• |
|
|
|
|
<• |
|
|
; |
|
|
=<• |
|
|
|
= |
=<• |
|
end |
|
|
|
|
|
|
|
|
•> |
d |
|
|
|
|
•> |
|
|
|
|
p |
|
|
|
|
•> |
•> |
|
|
|
|
|
|
|
<• |
|
|
|
|
|
Существуют пары символов из V для которых выполняется более одного отношения простого предшествования. Следовательно грамматика не является прямого предшествования ( а операторного).
Функции “перенос- свертка” для грамматики операторного предшествования.
(алгоритм – см. Вариант № 5)
функция "перенос"
|
beg |
; |
end |
d |
p |
Eps |
S |
|
|
|
|
|
|
D |
|
П |
|
|
|
|
P |
|
П |
П |
|
|
|
beg |
|
|
|
П |
|
|
; |
|
|
|
П |
П |
|
end |
|
|
|
|
|
C |
d |
|
C |
|
|
|
|
p |
|
C |
C |
|
|
|
|
П |
|
|
|
|
|
S |
|
|
|
|
|
Д |
функция "свертка"
|
(1) S->begin D ; P end |
(2) D->d |
(3) D->D;d |
(4) P->p |
(5) P->P;p |
S |
|
|
|
|
|
D |
|
|
|
|
|
P |
|
|
|
|
|
beg |
|
2 |
3 |
|
|
; |
|
|
|
4 |
5 |
end |
|
|
|
|
|
d |
|
|
|
|
|
p |
|
|
|
|
|
|
1 |
|
|
|
|