Удаление косвенной левой рекурсии
У меня есть интересная проблема непрямой рекурсии, которую, я думаю, я решил, но я не совсем уверен, что она правильная.
Начальная грамматика:
A-> Bxy | x
B-> CD
C-> A | c
D-> d
Мое решение состояло в том, чтобы сначала развиваться на A, получая:
A -> ADxy | cDxy | x
Теперь, имея это, я вижу, где у меня есть рекурсия, и я удаляю ее, получая:
A-> cDxyA' | xA'
A'-> DxyA' | empty
Полное решение будет тогда
A-> cDxyA' | xA'
A'-> DxyA' | empty
B-> CD
C-> A | c
D-> d
Правильна ли эта грамматика?