ВУЗ:
Составители:
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→+|-|*|/
Страницы
- « первая
- ‹ предыдущая
- …
- 47
- 48
- 49
- 50
- 51
- …
- следующая ›
- последняя »
