У меня проблема с этим упражнением:
Пусть G будет следующей неоднозначной грамматикой для λ-исчисления:
E → v | λv.E | EE | (E)
где E - единственный нетерминальный символ, λv.E представляет абстракцию относительно переменной v в E, а EE представляет приложение.
- Определите LL (1) грамматику G ′ так, что L (G ′) = L (G) и неоднозначность G разрешается путем наложения следующих обычных соглашений:
- абстракция правильная ассоциативная;
- приложение остается ассоциативным;
- Приложение имеет более высокий приоритет, чем абстракция.
- Покажите таблицу разбора 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.
Я искал решение в Интернете, но кажется, что невозможно устранить левую рекурсию, сохраняя левую ассоциативность.
Однако это упражнение появилось на экзамене компиляторов несколько лет назад, поэтому должен быть правильный ответ.
Спасибо за помощь.
источник
Моя попытка:
Эта грамматика LL (1) и должна соответствовать требуемым свойствам.
источник