Предположим, у меня есть грамматика:
S -> Aaa
A -> a | ε
Ясно, что эта грамматика может анализировать только последовательности aa
и aaa
. Простой синтаксический анализатор LR (1) (или даже LL) может анализировать их при преобразовании в эквивалентную грамматику:
S -> aaA
A -> a | ε
Хотя эти грамматики эквивалентны, сгенерированные ими деревья синтаксического анализа различны. Рассмотрим для последовательности aaa
:
S S
/ \ / \
A aa aa A
| |
a a
Грамматики определяют, является ли последовательность языком, вместо того, чтобы предоставлять дерево синтаксического анализа, которое представляет ее на языке. Непреобразованная грамматика не может проанализировать последовательность (без более тщательного анализа); Хотя преобразованная грамматика может ее анализировать, но строит неверное дерево синтаксического анализа.
Как можно построить дерево синтаксического анализа для последовательности, чья (контекстно-свободная) грамматика (без преобразования) не может быть представлена LR-анализатором?