Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теория языков программирования и методы трансляции..pdf
Скачиваний:
28
Добавлен:
05.02.2023
Размер:
3.41 Mб
Скачать

133

При третьем проходе новые элементы во множествах F(B) не появятся,

поэтому он будет последним.

· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

4.2.2.3 Множество направляющих символов

Если A – нетерминал в левой части правила, то его направляющими символами T(A) будут символы-предшественники A и все символы, следую-

щие за A, если A может генерировать пустую строку:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A

 

e S A ,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

T

 

A

 

 

 

S

 

A

e

 

F

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

e S A .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

· · · · · · · · · · · · · · · · · · · · · · · ·

 

 

 

 

 

 

Пример · · · · · · · · · · · · · · · · · · · · · · ·

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Для рассмотренной выше грамматики получим результат, приведенный в табл. 4.9.

Таблица 4.9 – Множества направляющих символов

P

 

S(A)

F(A)

T(A)

 

 

 

 

 

E T E

(, a

 

, )

(, a

 

 

 

 

 

E′ + T E

+

 

, )

+

 

 

 

 

 

Ee

e

 

 

, )

 

 

 

 

 

T F T

(, a

 

, +, )

(, a

 

 

 

 

 

T′ * F T

*

 

, +, )

*

 

 

 

 

 

Te

e

 

 

, +, )

 

 

 

 

 

F ( E )

(

 

, +, *, )

(

 

 

 

 

 

F a

a

 

 

a

 

 

 

 

 

· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·

Обратите внимание, что множество символов-предшественников ищет-

ся для цепочки, а множество предшествующих символов – для нетерминала.

134

Поэтому для альтернатив порождающего правила с одним и тем же нетерминалом A в левой части множества S(A) будут разными, а множества

F(A) будут совпадать.

Как следует из данного ранее определения, для грамматики типа LL(1)

множества направляющих символов для порождающих правил с одинаковым символом в левой части не должны пересекаться. То есть, если имеются аль-

тернативы порождающего правила:

A1 α1

A2 α2

………

An αn

и A1 = A2 = … = An соответственно, то

T(Ai) T(Aj) = при i j.

В рассмотренной выше грамматике это условие выполняется. Из этого условия следуют и другие требования к LL(1)-грамматикам. В частности, за-

прет левой рекурсии. Действительно, если в грамматике есть правила вида:

A Aα

A β

то элементы множества S(β) войдут во множества T(A) для обеих альтерна-

тив.

· · · · · · · · · · · · · · · · · · · · · · · ·

 

Пример · · · · · · · · · · · · · · · · · · · · · · ·

 

 

 

Рассмотрим грамматику:

E T + T

E T * T E T

T ( E )