se eu tiver uma gramática com uma produção que contenha recursão esquerda e fatoração esquerda como
qual deles tem prioridade, recursão esquerda ou fatoração esquerda?
se eu tiver uma gramática com uma produção que contenha recursão esquerda e fatoração esquerda como
qual deles tem prioridade, recursão esquerda ou fatoração esquerda?
Respostas:
Transformações como fatoração à esquerda ou remoção da recursão à esquerda não têm regras de precedência. Obviamente, as gramáticas resultantes podem ser diferentes, mas reconhecerão o mesmo idioma.
O exemplo de gramática da pergunta é mais difícil do que o típico problema de lição de casa na graduação. Portanto, mostrar nosso trabalho será útil.
Vamos definir uma transformação que remove a recursão esquerda.
Dado
,
removemos a recursão esquerda assim:
A generalidade acima não é normalmente apresentada nos textos do compilador, mas a análise de textos como Grune e Jacobs cobre isso. O fatorial esquerdo pode ser aplicado à gramática transformada acima, mas apenas introduzirá regras extras que não mudarão a resposta. Portanto, simplificaremos a apresentação sem que seja realizado um fator extra à esquerda.
Nesta resposta, não abordaremos questões de recursão à esquerda indireta, porque estamos preocupados apenas com as regras de um único não terminal. Observe que a recursão indireta à esquerda pode ser tratada. (Abra uma pergunta separada, se isso for importante.)
A remoção do fatoramento esquerdo está na maioria dos textos introdutórios do compilador, feitos dessa maneira. Dado
rendimentos de fatoração à esquerda:
Agora isso é realizar as transformações nos dois pedidos.
Vamos deixar de lado a gramática da pergunta
e remova a recursão esquerda:
E para os outros pedidos, vamos remover a recursão esquerda da gramática da pergunta
e então deixou o fator terminal :
Ah, as gramáticas resultantes são as mesmas!
Em geral, provar que duas gramáticas são equivalentes é indecidível. Portanto, se uma série de transformações gramaticais pudesse influenciar o idioma reconhecido , seria desastroso.