Comment éliminer la récursion gauche pour la grammaire suivante?Élimination de la récursivité à gauche pour E: = EE + | EE- | id
E := EE+|EE-|id
Utilisation de la procédure commune:
A := Aa|b
se traduit:
A := b|A'
A' := ϵ| Aa
Appliqué à la grammaire originale que nous obtenons:
A = E, a = (E+|E-) and b = id
Par conséquent:
E := id|E'
E' := ϵ|E(E+|E-)
Mais cette grammaire est incorrecte parce que
ϵE+ -> ϵ id +
serait valable mais qui est une expression de Postfix incorrecte.
Vous devriez peut-être mentionner que '' e' est vraiment ε'. Trompé moi, en tout cas. –
Vous avez un problème dans votre définition de «traduire vers»: vous avez introduit un terme non défini «e». Vous pouvez probablement faire quelque chose en regroupant l'original comme 'E: = (EE (+ | -)) | id'. Votre dernier commentaire "qui est une expression de postfix incorrect" est quelque peu radicale; pourquoi 'e id +' est-il incorrect? Cela ressemble à 'pousser e; push id; évaluer + 'qui est généralement OK. –
@Konrad: ah - 'e' est vide? ... cela fait une différence. –