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

Матеріал з testwiki
Версія від 19:14, 1 грудня 2020, створена imported>Goo3Bot (дивіться також → див. також)
(різн.) ← Попередня версія | Поточна версія (різн.) | Новіша версія → (різн.)
Перейти до навігації Перейти до пошуку

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((|ω|=kxϵ)(|ω|<kx=ϵ))}

Властивості 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 практично неможливо.

Див. також

Шаблон:Math-stub