Мовне теоретичне порівняння граматики LL та LR


67

Люди часто кажуть, що LR (k) парсери є більш потужними, ніж LL (k) парсери. Ці твердження більшу частину часу є невиразними; зокрема, чи слід порівнювати класи для фіксованого або об'єднання по всіх ? То як справді ситуація? Зокрема, мене цікавить, як LL (*) вписується.kk

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

Мене цікавлять такі відносини:

  • LL(k)⊆?LR(k)
  • ⋃i=1∞LL(k)⊆?⋃i=1∞LR(k)
  • ⋃i=1∞LL(k)=?LL(∗)
  • LL(∗)∘?⋃i=1∞LR(k)

Деякі з них, ймовірно, прості; моя мета - зібрати "повне" порівняння. Список літератури оцінений.


2
Можливо, це може вам допомогти! Образ граматичної ієрархії
— Андреа Туччі

1
@AndreaTucci: Так, але це стосується лише граматик, а не створених мов.
— Рафаель

Відповіді:


60

Відомо численні утримання. Нехай позначає стримування та належне утримання. Нехай позначає непорівнянність.⊆⊂×

Нехай , .LL=⋃kLL(k)LR=⋃kLR(k)

Граматичний рівень

Для LL

  • LL(0)⊂LL(1)⊂LL(2)⊂LL(2)⊂⋯⊂LL(k)⊂⋯⊂LL⊂LL(∗)
  • SLL(1)=LL(1),SLL(k)⊂LL(k),SLL(k+1)×LL(k)

Більшість з них виявилися в властивості детермінованих зверху вниз граматик по Розенкранц і Stearns. - досить тривіальна вправа. Ця презентація Теренса Парра розміщує на слайді 13. У паперових LL-звичайних граматиках Ярзабека та Кравчика відображаються , і їх доказ тривіально поширюється наSLL(k+1)×LL(k)LL(∗)LL⊂LLRLL⊂LL(∗)

Для LR

  • LR(0)⊂SLR(1)⊂LALR(1)⊂LR(1)
  • SLR(k)⊂LALR(k)⊂LR(k)
  • SLR(1)⊂SLR(2)⊂⋯⊂SLR(k)
  • LALR(1)⊂LALR(2)⊂⋯⊂LALR(k)
  • LR(0)⊂LR(1)⊂LR(2)⊂⋯⊂LR(k)⊂⋯⊂LR

Це все прості вправи.

LL проти LR

  • LL(k)⊂LR(k) ( властивості детермінованих граматик зверху вниз плюс будь-яка ліва рекурсивна граматика)
  • LL(k)×SLR(k),LALR(k),LR(k−1) (проста вправа)
  • LL⊂LR (будь-яка ліва рекурсивна граматика)
  • LL(∗)×LR (ліва рекурсія проти довільної точки пошуку)

Мовний рівень

Для LL

  • LL(0)⊂LL(1)⊂LL(2)⊂⋯⊂LL(k)⊂⋯⊂LL⊂LL(∗)
  • SLL(k)=LL(k)

Більшість із них підтверджені у властивостях детермінованих граматик зверху вниз . Проблема еквівалентності граматичних норм для та LR від Nijholt посилається на документи, що показують . Паперові звичайні граматики Ярзабека та Кравчика показують , і їх доказ тривіально поширюється наLL(k)⊂LL(∗)LL⊂LLRLL⊂LL(∗)

Для LR

  • LR(0)⊂SLR(1)=LALR(1)=LR(1)=SLR(k)=LALR(k)=LR(k)=LR

Деякі з них було доведено Кнутом у своїй праці "Переклад мов з лівої на праву", в якій він ввів LR (k), решта - у " Трансформації граммарів LR (k) у LR (1), SLR (1)", та (1,1) Обмежені право-контекстні граматики Mickunas et al.

LL проти LR

  • LL⊂LR(1) (стримування випливає з вищесказаного, є канонічним прикладом для суворого стримування){aibj|i≥j}
  • LL(∗)×LR (мова показує половину твердження, і введення Ніехолтом задачі про еквівалентність граматиків LL- та LR-регулярних посилань на документи показ другої половини){aibj|i≥j}
  • LR(1)=DCFL (див., Наприклад, тут посилання ).

Чудова відповідь, хоча я вже підтримав. Я міг би подумати, що Френк де Ремер виявив LALR <= LR у своєму оригінальному документі LALR? (1969?)
— користувач207421

@EJP: є негайним, якщо ви визначаєте шляхом згортання станів . deRemer лише довів, що його конструкція створила той самий аналізатор. Граматичні заняття не рівні, що це приємна вправа (або навіть приємне запитання для цього сайту). Рівність мовного класу набагато складніша: прочитайте документ, якщо ви дійсно хочете деталі;)LALR(k)⊆LR(k)LALRLR
— Олексій десять Бринк

1
@AlextenBrink Я читав статтю, і її навчав Франк де Ремер, але це вже 30 років тому ;-) Дякую за всі подробиці.
— користувач207421

Можливо, буде непогано зібрати приклади граматики для кожної нерівності.
— o11c

1
@ o11c Я думаю, що це обтяжене єдиною відповіддю. Моє враження, що Алекс дав хороші довідники там, де це було потрібно; він заявляє, що "легкі вправи" для деяких. Я думаю, якщо читач не може придумати граматику, він може поставити нове запитання, задаючи конкретний випадок.
— Рафаель
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.