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

UptoLike

48
где α и βстроки терминалов и/или нетерминалов (β может быть
пустой строкой).
Необходимым условием того, чтобы грамматика обладала признаком
LL(1), является непересекаемость множеств символов-предшественников для
альтернативных правых сторон порождающих правил.
Следует проявлять осторожность в тех случаях, когда нетерминал в
начале правой части может генерировать пустую строку. Например, в
грамматике
P
AB
P
BG
A
aA
A
ε
B
bB
B
c
имеем S (AB) = {a, b ,c}, причем b и c входят в множество, т.к. А может
генерировать пустую строку; S (BG) = {b, c} – множества пересекаются,
следовательно грамматика не будет LL(1).
Рассмотрим также грамматику с порождающими правилами
T
AB
A
PQ
A
BC
P
pP
P
ε
Q
qQ
Q
ε
B
bB
B
е
C
cC
C
f
для которой S(PQ) = {p, q} и S(BC) = {b, e}
Однако так как PQ может генерировать пустую строку, следующим
просматриваемым символом при применении порождающего правила A
PQ может быть b или e (вероятные символы, следующие за A), и одного
следующего просматриваемого символа недостаточно, чтобы различить две
альтернативные правые части для A (b и e являются также символами
предшественниками для BC).
Поэтому вводится понятие направляющих символов
, которые
определяются так:
                                                                          48
     где α и β – строки терминалов и/или нетерминалов (β может быть
пустой строкой).
     Необходимым условием того, чтобы грамматика обладала признаком
LL(1), является непересекаемость множеств символов-предшественников для
альтернативных правых сторон порождающих правил.
     Следует проявлять осторожность в тех случаях, когда нетерминал в
начале правой части может генерировать пустую строку. Например, в
грамматике
     P → AB                                   A→ε
     P → BG                                   B → bB
     A → aA                                   B→c
     имеем S (AB) = {a, b ,c}, причем b и c входят в множество, т.к. А может
генерировать пустую строку; S (BG) = {b, c} – множества пересекаются,
следовательно грамматика не будет LL(1).
     Рассмотрим также грамматику с порождающими правилами
     T → AB                                   Q→ε
     A → PQ                                   B → bB
     A → BC                                   B→е
     P → pP                                   C → cC
     P→ε                                      C→f
     Q → qQ
для которой S(PQ) = {p, q} и S(BC) = {b, e}
     Однако так как PQ может генерировать пустую строку, следующим
просматриваемым символом при применении порождающего правила A →
PQ может быть b или e (вероятные символы, следующие за A), и одного
следующего просматриваемого символа недостаточно, чтобы различить две
альтернативные правые части для A (b и e являются также символами
предшественниками для BC).
     Поэтому вводится понятие направляющих символов, которые
определяются так: