Видалення лівої рекурсії в граматиці при збереженні лівої асоціації оператора


13

У мене проблема з цією вправою:

Нехай G - наступна неоднозначна граматика λ-числення:

E → v | λv.E | EE | (E)

де E - єдиний нетермінальний символ, λv.E являє собою абстракцію wrt змінної v в E, а EE являє додаток.

  1. Визначте граматику LL (1) G 'так, що L (G ′) = L (G), і неоднозначність G вирішується шляхом накладення наступних звичайних умов:
    1. абстракція - правильна асоціативна;
    2. додаток залишається асоціативним;
    3. додаток має більший пріоритет, ніж абстракція.
  2. Покажіть таблицю розбору LL (1) для G 'та дерево розбору, отримане при розборі рядка λv1. λv2. v1v2v1.

Я усунув неоднозначність встановлення пріоритету та асоціації, отримавши цю граматику:

E -> EF | F
F -> λv.G | G
G -> (E) | v

що не є LL (1), оскільки виробництво E -> EFзалишається рекурсивним. Однак, виключаючи ліву рекурсію з цього виробництва, я отримую:

E -> FE¹
E¹-> FE¹ | ɛ
F -> λv.G | G
G -> (E) | v

що не відповідає вимозі 1.2.

Я шукав рішення в Інтернеті, але здається, що усунути ліву рекурсію, що зберігає ліву асоціативність, неможливо.

Однак ця вправа з’явилася на іспиті з укладачів кілька років тому, тому повинна бути правильна відповідь.

Дякую за твою допомогу.

Відповіді:


11

Сумісність лівої асоціативності та LL (1) розбору

Ви просто натрапили на одну з головних невідповідностей у використанні без контексту (CF) синтаксису. Люди хочуть вибрати граматики, щоб дерево розбору відображало призначену структуру речення, наближене до його семантики, особливо у випадку неасоціативних операторів, таких як додаток . Це було майже оригінальним наміром граматики CF у лінгвістиці. Але в той же час вони обмежують технологію розбору, яка буде терпіти лише деякі види граматик.

Дійсно, якщо дерево розбору має відображати ліву асоціативність оператора, то граматика обов'язково ліво-рекурсивна, оскільки верхній вузол додатка в дереві розбору обов'язково додає крайній правий термін непартезованих послідовних додатків .. Тож про розбір LL не йдеться. Ти правий.

З цього є два шляхи. Не можна покладатися на аналізатор, щоб дати жорсткості «розбору дерева», яка буде використана для наступних етапів обробки (наприклад, зменшення вираження лямбда, тут). Це призводить до концепції абстрактних синтаксичних дерев (AST), які можна побудувати з дерева розбору, але з іншою структурою.

Іншим рішенням є використання більш загальних методів розбору, які приймуть будь-яку граматику CF, і аналізують відповідно до неї. Загальні аналізатори CF - це добре розвинена технологія (і я не перестаю дивуватися, чому LL залишається такою популярною).

Я не маю уявлення, що можна вважати правильною відповіддю на ці суперечливі вимоги.

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

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

Про цей конкретний приклад

Якщо говорити, перша граматика, яку ви пропонуєте, здається не зовсім коректною. Він не має способу отримання λu.λv.v.

Один трюк, який потрібно знати, - почати з операторів (тут абстракція чи застосування) з найнижчим пріоритетом (абстракція). Це те саме для арифметичних виразів.


Дуже дякую за детальний коментар. Ви маєте рацію, я помилився з першою граматикою, дякую також за це. Я тоді запитаю професора.
Марко ДаллаГ

Я можу додати відповідь з невеликою запискою про граматичне оформлення для манекенів (мене теж), якщо вас цікавить. Також розкажіть, що з цього приводу говорить ваш професор.
бабу

Я оновлю тему, коли професор відповість на це запитання. У будь-якому разі, не соромтеся додавати більше інформації, якщо це для вас не проблема, я, звичайно, дуже ціную це. Дякую ще раз за допомогу
Marco DallaG

@MarcoDallaG Наткнувся на це під час роботи над TAPL Pierce. Чи траплялося вашому професору щось інше, ніж ця відповідь? :)
lcn

0

Моя спроба:

E  -> A | λv.E
A  -> FA'
A' -> A | ɛ
F  -> (E) | v

Ця граматика є LL (1) і повинна відповідати необхідним властивостям.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.