Вопросы об устранении левой рекурсии

Я работаю над удалением левой рекурсии в грамматике. (3 грамматики)

1. A->Ab | aC
   B->BaBB | BA       
   C->bC | BA                     

2. T->Txxy | TaabT | TTa               


3. A-> BA | Baa         
   B-> Ab | Abb           

Я пытался это сделать, но я не уверен в своих ответах. Во-первых, я понятия не имею, как это сделать. Второй, третий, я думаю, не получится. Верен ли мой ответ? Как я могу это изменить? Пожалуйста, кто-нибудь, объясните это подробно.


person JUN_0    schedule 01.05.2020    source источник


Ответы (1)


Я написал решение. У меня не было много времени, чтобы напечатать все это, а также я не был уверен, что этот вопрос будет доступен из-за оффтопа.

Проверьте решение для первой грамматики здесь: первое решение грамматики

Для второй грамматики либо грамматика неполная, либо левая рекурсия не может быть удалена, нет нулевой продукции и нет продукции только с терминалами. Он бесконечно повторяется и, следовательно, не может удалить левую рекурсию.

Для третьей грамматики мы можем сделать

A-> BA | Baa         
B-> Ab | Abb  

Replace All B's into A
A-> AbA | Abaa | AbbA | Abbaa

Теперь снова все произведения рекурсивны и не могут даже завершить грамматику. Вам нужно либо нулевое производство, либо производство только с терминалами.

person CodeTalker    schedule 01.05.2020