Quelqu'un pourrait-il m'expliquer pourquoi les analyseurs récursifs-descendants ne peuvent pas fonctionner avec une grammaire contenant une récursion gauche?Pourquoi un analyseur récursif-descendant ne peut-il pas gérer la récursivité?
19
A
Répondre
27
considèrent:
A ::= A B
le code équivalent est
boolean A() {
if (A()) {
return B();
}
return false;
}
voir la récursion infinie?
16
Car celui qui est intéressé
A ::= A B | A C | D | E
peut être réécrite comme:
A ::= (D | E) (B | C)*
La forme générale de la transformation est: une quelconque des disjoints récursif non gauche suivie d'un nombre quelconque de gauche disjonctions récursives sans le premier élément.
Réformer le code d'action est un peu rusé mais je pense que cela peut aussi être plug-n-chug.
Questions connexes
- 1. Flex: Pourquoi ne puis-je pas gérer certains événements?
- 2. Éviter la récursivité
- 3. différence entre la récursivité structurelle et la récursivité accumulative
- 4. Pourquoi un appel PageMethods ne fonctionne pas?
- 5. Pourquoi la requête GQL ne correspond pas?
- 6. pourquoi ne pointeur sur un tableau ne retourne pas comme **
- 7. Pourquoi rawurldecode ne fonctionne pas?
- 8. FilterExpression ne fonctionne pas? Pourquoi?
- 9. ContextMenu ne s'affiche pas, et je ne sais pas pourquoi
- 10. Un analyseur pour la trame SPDH
- 11. C++ Insérer un arbre de recherche binaire via la récursivité
- 12. Comment tester un analyseur CSS?
- 13. Analyseur pour la syntaxe Mathematica?
- 14. Pourquoi Char.MinVal/.MaxVal ne sont pas statiques? Pourquoi ne pas rendre ces champs statiques?
- 15. Pourquoi ne devriez-vous PAS retourner un tableau ref?
- 16. Ruby, comment devrais-je concevoir un analyseur?
- 17. Pourquoi ne puis-je pas inclure un blog?
- 18. Pourquoi un script Ajax ne fonctionne-t-il pas localement?
- 19. Pourquoi cl.exe ne produit-il pas un module Windows valide?
- 20. Pourquoi XSPF Player ne fonctionne pas sur un Mac?
- 21. Pourquoi un python dict.update() ne renvoie-t-il pas l'objet?
- 22. Pourquoi ne puis-je pas acquérir un verrou exclusif?
- 23. La libération d'autorelease ne plante pas mon application pourquoi?
- 24. Pourquoi ne puis-je pas exécuter ce code? Pourquoi ne puis-je pas exécuter ce code?
- 25. Techniques de récursivité Perl?
- 26. Suppression d'éléments d'IDictionary avec la récursivité
- 27. Pourquoi la chaîne vide ne correspond-elle pas à Seq.empty?
- 28. Pourquoi mes événements ne sont pas enregistrés après la publication?
- 29. Flex modulleader url, pourquoi ne pas juste regarder la racine?
- 30. Pourquoi la réécriture de sous-domaine ne fonctionne pas?
La première fois que j'ai vu ça, j'ai toujours vu des conseils pour utiliser un nouveau terminal non-terminal, généralement appelé A ' –
Bien certains outils basés sur BNF ne permettent pas() de se retrouver avec la nouvelle règle . Je suis un peu partial par rapport à la forme que j'ai proposée car mon générateur d'analyseur doit aussi faire la transformation de l'action, donc il est beaucoup plus facile de le faire fonctionner sans nouvelle règle. – BCS
Cela ne répond pas vraiment à la question. Serait mieux comme commentaire. –