Я пытаюсь устранить левую рекурсию из CFG, устраняя косвенную рекурсию, а затем прямую рекурсию, как показывает этот алгоритм .
Я буду использовать эту грамматику:
A = A a | A B C | B C | D D
Когда i = 1 и j = 1 , мы планируем заменить все произведения вида A -> A r на:
A -> δ 1 γ |δ 2 γ |.. |δ k γ
Поэтому, когда я смотрю на A -> A a , что соответствует, я должен заменить его на
A -> A a a | A B C a a | B C a | D D a
, чтоконечно, это неправильно
Может кто-нибудь указать мне правильное направление для замены производств, когда вы заменяете их производством?
ПРИМЕЧАНИЕ. Кроме того, я застрял только в первом правилепоэтому опускаем другие для простоты
Любая помощь будет принята с благодарностью
[ОБНОВЛЕНИЕ] Найден как можно ближе к оригинальным греческим символам.Кроме того, я, возможно, подхожу к этому в неправильном направлении.Когда i = 1 и j = 1 , A j -> A a |ABC |До н.э.ДД, НО мне следует использовать A j -> BC |ДД Если так, то я бы получил:
A -> B C A | B C B C | D D A | D D B C | B C | D D
Так как это исключило бы рекурсию в этом производстве.Это лучшее направление?