YaChudo

LL(k)-граматика

Переглядів: 0. Оновлено 06.11.2026.

LL(k)-граматики — це клас контекстно-вільних граматик з додатковими обмеженнями, а саме:

КВ-граматика G=⟨N,Σ,P,S⟩ називається LL(k)-граматикою, для деякого фіксованого k, якщо дія двох лівосторонніх виводів:

  1. S⇒∗ω1Aω2⇒ω1αω2⇒∗ω1x
  2. S⇒∗ω1Aω2⇒ω1βω2⇒∗ω1y,

для яких з Firstk(x) = Firstk(y) випливає що α=β (A→α|β).

Неформально, граматика G буде LL(k)-граматикою, якщо для ланцюжка ω1Aω2∈(N∪Σ) k перших символів (за умови, що вони існують) решти непроаналізованого ланцюжка визначають, що з Aω2 існує не більше однієї альтернативи виведення ланцюжка, що починається з ω та продовжується наступними k термінальними символами.

Означення: Firstk(α)={ω|α⇒∗ωx∧((|ω|=k→x≠ϵ)∨(|ω|<k→x=ϵ))}

Властивості LL(k)-граматик

  1. Не існує алгоритму, який перевіряє належність КВ-граматики класу LL(k)-граматик.
  2. Існує алгоритм, який для конкретного k перевіряє, чи є задана граматика LL(k)-граматикою.
  3. Якщо граматика є LL(k)-граматикою, то вона є LL(k+p)-граматикою, (p>0).
  4. Клас LL(k)-граматик — це підклас КВ-граматик, який не покриває його.

На практиці найчастіше користуються найвужчим класом LL(1), і до недавнього часу взагалі вважалось, що побудувати аналізатор для LL(k)-граматики, де k>1 практично неможливо.

Див. також


Джерело: стаття у Вікіпедії та історія редагувань (автори).