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

UptoLike

49
если Aнетерминал, то его направляющими символами будут
S(A) + (все символы, следующие за A, если A может генерировать
пустую строку).
Иными словами, это множество всех символов-предшественников +
все символы, следующие за A, если A может генерировать пустую строку. В
общем случае для заданного варианта α нетерминала P (P
α) имеем:
DS (P,α) = {а | а
S(α) или (α
ε и a
F(P))}
где F(P) есть множество символов, которые могут следовать за P. Так,
в приведенном выше примере направляющие символыэто символы
DS (A, PQ) = {p,q,b,e}
DS (A, BC) = {b,e}
Поскольку указанные множества пересекаются, данная грамматика не
может служить основой для детерминированного нисходящего анализатора,
использующего один предварительно просматриваемый символ для
различения
альтернативных правых частей.
Уточним определение LL(1)-грамматики. Грамматику называют LL(1)-
грамматикой, если для каждого нетерминала, появляющегося в левой части
более одного порождающего правила, множества направляющих символов,
соответствующих правым частям альтернативных порождающих правил
непересекающиеся. Все LL(1)-грамматики можно разбирать
детерминировано сверху вниз.
Контрольные вопросы
1. Дайте определение LL(1)-грамматики.
2. Какой тип разбора (восходящий или нисходящий) подразумевает LL(1)-
грамматика.
3. Что такое направляющий символ?
4. Является ли
приведенная ниже грамматика (S - начальный символ) LL(1)-
грамматикой? Обосновать ответ.
S
- P | P P
(S) | o | P B P B
+ | - | * | /
                                                                            49
     если A – нетерминал, то его направляющими символами будут
     S(A) + (все символы, следующие за A, если A может генерировать
пустую строку).
     Иными словами, это множество всех символов-предшественников +
все символы, следующие за A, если A может генерировать пустую строку. В
общем случае для заданного варианта α нетерминала P (P → α) имеем:
     DS (P,α) = {а | а ∈ S(α) или (α ⇒ ε и a ∈ F(P))}
     где F(P) есть множество символов, которые могут следовать за P. Так,
в приведенном выше примере направляющие символы – это символы
     DS (A, PQ) = {p,q,b,e}
     DS (A, BC) = {b,e}
     Поскольку указанные множества пересекаются, данная грамматика не
может служить основой для детерминированного нисходящего анализатора,
использующего     один     предварительно       просматриваемый   символ   для
различения альтернативных правых частей.
     Уточним определение LL(1)-грамматики. Грамматику называют LL(1)-
грамматикой, если для каждого нетерминала, появляющегося в левой части
более одного порождающего правила, множества направляющих символов,
соответствующих правым частям альтернативных порождающих правил –
непересекающиеся.         Все      LL(1)-грамматики       можно     разбирать
детерминировано сверху вниз.


                             Контрольные вопросы
1. Дайте определение LL(1)-грамматики.
2. Какой тип разбора (восходящий или нисходящий) подразумевает LL(1)-
грамматика.
3. Что такое направляющий символ?
4. Является ли приведенная ниже грамматика (S - начальный символ) LL(1)-
грамматикой? Обосновать ответ.
S→-P|P                    P → (S) | o | P B P           B→+|-|*|/