Що таке IELR (1) -паратор?


14

Я намагаюся навчити себе вживати зубрів. Сторінка бізона (1) говорить про зубра:

Створіть детермінований LR або узагальнений парсер LR (GLR), використовуючи LALR (1), IELR (1) або канонічний LR (1) парсер таблиць.

Що таке IELR-аналізатор? Усі релевантні статті, які я знайшов у всесвітній мережі Інтернету, платні.



@reinierpost Я зараз відчуваю себе таким дурним. Чому я цього не знайшов?
FUZxxl

Я не знаю - Google персоналізує результати ...
reinierpost

@reinierpost, чи хотіли б ви відповісти на це питання, цитуючи своє посилання, щоб очистити це питання ?
Мербс

Гммм ... якщо це все потрібно, гаразд.
reinierpost

Відповіді:


3

Алгоритм розбору IELR (1)

Алгоритм розбору IELR (1) був розроблений в 2008 році Джоелом Е. Денні в рамках його доктора наук. дослідження під керівництвом Брайана А. Маллой в Клемсонському університеті. Алгоритм IELR (1) - це варіація так званого алгоритму «мінімального» LR (1), розробленого Девідом Пейджером у 1977 р. , Який сам по собі є варіантом алгоритму розбору LR (k), винайденого Дональдом Кнутом у 1965 році . IE в IELR (1) означає усунення неадекватності (див. Останній розділ).

LR (1) Алгоритми

Частина LR (1) IELR (1) означає L eft вправо, R найменше виведення з 1 токеном lookahead. LR (1) парсери також називають канонічними аналізаторами. Цей клас алгоритмів розбору використовує стратегію розбору знизу вгору, зменшення зсуву зі зміною таблиці та стану переходу, визначаючи наступну дію, яку слід здійснити під час розбору.

Історично склалося, що алгоритми LR (1) були обмежені великими потребами в пам'яті для їх таблиць переходу. Удосконалення Пейджера полягало в розробці методу поєднання перехідних станів при створенні таблиці переходу, значно зменшуючи розмір таблиці. Таким чином, алгоритм Пейджера робить аналізатори LR (1) конкурентоспроможними щодо інших стратегій розбору щодо ефективності простору та часу. Фраза «мінімальний аналізатор LR (1)» стосується мінімального розміру таблиці переходу, введеного алгоритмом Пейджера.

Обмеження алгоритму Пейджера

Алгоритми мінімальних LR (1) виробляють таблицю переходу на основі конкретної вхідної граматики для розбору мови. Різні граматики можуть створювати одну і ту ж мову. Дійсно, для граматики, яка не є LR (1), можна створити мову, що розбирається LR (1). На практиці генератори LR (1) парсера приймають граматики не LR (1) із специфікацією для вирішення конфліктів між двома можливими переходами стану ("конфлікти зрушень-зменшення") для задоволення цього факту. Денні та Маллой встановили, що алгоритм Пейджера не може генерувати парсери, досить потужні для розбору мов LR (1), коли надаються певні граматики не LR (1), навіть якщо граматика не LR (1) генерує мову LR (1).

Денні і Маллой показують, що це обмеження не є просто академічним, демонструючи, що Gawk і Gpic, широко використовуване, зріле програмне забезпечення, виконують неправильні дії парсера.

Поліпшення IELR (1)

Денні та Маллой вивчили джерело недоліків алгоритму Пейджера, порівнявши таблицю переходів, згенеровану алгоритмом Пейджера, до таблиці переходу еквівалентної граматики LR (1) та визначили два джерела того, що вони називають недостатками, які відображаються в таблиці переходу від Пейджера алгоритм, але не в таблиці переходу LR (1). Алгоритм IELR (1) Денні і Маллой (1) (Iadequacy Elimination LR (1)) - це алгоритм, призначений для усунення цих недоліків при формуванні таблиці переходів, яка практично однакова за розмірами з алгоритмом Пейджера.


6

Стаття, яка стверджує, що її запровадили: IELR (1): Практичні LR (1) Роздільні таблиці для не-LR (1) Граматики з вирішенням конфлікту (через archive.org) Джоел Е. Денні та Брайан А. Маллой, Університет Клемсона , є у вільному доступі з сайту Malloy.

Що вони варті - це те, на що я не можу відповісти. (Особисто я не розумію необхідності такого каліченого розбору CFG - навіщо обмежувати свою експресивну силу, коли можна просто використовувати GLR ? Що для мене має сенс - щось на зразок TAG або PEG (вони здаються природними і додають виразної сили) або дерево граматики (для мов, таких як XML, в яких розпізнавання дерев розбору непроблемно за конструкцією.)


Хоча я погоджуюся з принципом щодо технологій, проблема часто полягає в тому, що традиційний детермінований синтаксичний аналіз має кращі, повніші реалізації. Інше питання полягає в тому, що загальний синтаксичний аналіз сильніший, але GLR може бути не найкращою його версією.
бабу

4
Основна причина, чому люди розробили спустошені парсери CFG, полягає в тому, що парсер GLR не обов'язково працює в лінійний час - це величезна проблема для багатьох програм. Аналізатор IELR може гарантувати лінійне виконання та багато іншого.
FUZxxl

Я не розумію, чому це було б проблемою.
reinierpost

2
O(n4)O(n3)limxO(nx). Люди не живуть вічно і мають багато чого зробити. Втрачати час взагалі погано.
користувач

3
Я хотів би зазначити, що "особисто я не розумію необхідності такого каліченого розбору CFG - навіщо обмежувати свою виражальну силу, коли можна просто використовувати GLR?" є досить неправильним у цьому контексті. IELR (1) використовується для генерування більш ефективних таблиць парсерів LR (1), що дозволяє отримати більш ефективні парсери GLR .
orlp
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.