Формальные языки, грамматики и основы построения трансляторов. Кревский И.Г - 54 стр.

UptoLike

54
S
aSX
S
ε
X
b
X
c
и полученной в результате грамматикой будет LL(1).
Процесс факторизации, однако, нельзя автоматизировать,
распространив его на общий случай. Следующий пример показывает, что
может произойти. Рассмотрим правила
1. P
Qx
2. P
Ry
3. Q
sQm
4. Q
q
5. R
sRn
6. R
r
Оба множества направляющих символов для двух вариантов P
содержат s, и, пытаясь "вынести s за скобки", мы замещаем Q и R в правых
частях правил 1 и 2:
P
sQmx
P
sRny
P
qx
P
ry
Эти правила можно заменить следующими:
P
qx
P
ry
P
sP
1
P
1
Qmx
P
1
Rny
Правила для P
1
аналогичны первоначальным правилам для P и имеют
пересекающиеся множества направляющих символов. Мы можем
преобразовать эти правила так же, как и правила для P:
P
1
sQmmx
P
1
qmx
P
1
sRnny
P
1
rny
Факторизуя, получаем
P
1
qmx
P
1
rny
P
1
sP
2
P
2
Qmmx
P
2
Rnny
Правила для P
2
аналогично правилам для P
1
и P, но длиннее их, и
теперь уже очевидно, что этот процесс бесконечный. Таким образом, не
                                                                           54
              S → aSX                              X→b
              S→ε                                  X→c
и полученной в результате грамматикой будет LL(1).
     Процесс      факторизации,      однако,     нельзя     автоматизировать,
распространив его на общий случай. Следующий пример показывает, что
может произойти. Рассмотрим правила
              1. P → Qx                            4. Q → q
              2. P → Ry                            5. R → sRn
              3. Q → sQm                           6. R → r
     Оба множества направляющих символов для двух вариантов P
содержат s, и, пытаясь "вынести s за скобки", мы замещаем Q и R в правых
частях правил 1 и 2:
              P → sQmx                             P → qx
              P → sRny                             P → ry
Эти правила можно заменить следующими:
              P → qx                               P1 → Qmx
              P → ry                               P1 → Rny
              P → sP1
     Правила для P1 аналогичны первоначальным правилам для P и имеют
пересекающиеся     множества      направляющих     символов.    Мы    можем
преобразовать эти правила так же, как и правила для P:
              P1 → sQmmx                           P1 → sRnny
              P1 → qmx                             P1 → rny
     Факторизуя, получаем
              P1 → qmx                             P2 → Qmmx
              P1 → rny                             P2 → Rnny
              P1 → sP2
     Правила для P2 аналогично правилам для P1 и P, но длиннее их, и
теперь уже очевидно, что этот процесс бесконечный. Таким образом, не