Как устранить как прямую, так и косвенную левую рекурсию? - PullRequest
1 голос
/ 08 января 2020

Для этой грамматики:

A -> B a | A a | c
B -> B b | A b | d

Как убрать левую рекурсию?

====== Мои попытки ======

  1. Устранить прямой left_re c первый.
A -> (B a | c) A'
A' -> a A' | ε
B -> (A b | d) B'
B' -> b B' | ε
Тогда косвенный. Поместите B в A.

A -> A b B' a A ' | d B' A' | c A'

И тогда я получил:

A -> (d B A' | c A') A''
A' -> a A' | ε
A'' -> b B' a A' A'' | ε

Этот результат довольно сложный. Как я могу использовать только одну букву «А» для представления этого?

...