Question

Je jouissais en utilisant YARD beaucoup:

http://www.ootl.org/yard/

http://code.google.com/p/yardparser/

http://www.codeproject.com/KB/recipes/yard- tokenizer.aspx

Je suis en mesure de construire calculatrice entièrement fonctionnel. J'évaluation YARD faire analyseur PHP. S'il vous plaît veuillez en informer sur les limites de la grammaire PEG et générateurs analyseur. Merci beaucoup!

Était-ce utile?

La solution

Je pense que le grand « problème » avec PEGs est qu'ils ne rentrent pas dans la taxonomie normale des grammaires qu'ils fonctionnent d'une manière fondamentalement différente. sont normaux grammaires « à rebours » dans le sens où ils décrivent toutes les phrases possibles (programmes) qui peuvent être générés. Décrivent comment PEGs parse - ils viennent au problème de l'autre extrémité

.

À mon avis cela est un analyseur plus moyen naturel de réfléchir sur le problème, et certainement pour tout écrit à la main (descente récursive) Je ne ferais rien d'autre.

Autres conseils

La principale limite de PEG est grammaires qu'ils ne traitent pas d'ambiguïté du tout.

Pour être sûr, cela est également leur force depuis le traitement des ambiguïtés est l'une des parties les plus frustrants de l'utilisation d'un outil CFG (grammaire libre de contexte).

Avec PEGs vous traitez avec des ambiguïtés explicitement en ordonnant la règle que vous voulez faire correspondre avant une autre règle qui correspondrait, mais que vous ambigüe ne voulez pas.

Le problème est que vous ne savez même pas toujours une partie ou même l'une des ambiguïtés dans une langue ou une grammaire et des générateurs PEG, au moins ceux que je l'ai essayé, ne pas analyser la grammaire à l'ambiguïté de aider à vous les puis concevoir et commander vos règles pour traiter les trouver dans le bon sens.

générateurs d'analyseur CFG comme yacc et bison analyser votre grammaire et de faire rapport toutes les ambiguïtés. Malheureusement, ils les font souvent d'une manière assez cryptique qui peut être difficile de comprendre. Et bien sûr, il est souvent difficile de corriger la grammaire à traiter avec eux. Mais au moins vous serez conscients du fait qu'ils existent.

Avec une grammaire PEG vous pouvez être parfaitement ignorants des ambiguïtés dans votre grammaire conceptuelle, car une fois que vous en faire un PEG il n'a pas d'ambiguïtés plus, il a juste règles de correspondance et des règles peut-être inatteignables sans bruit qui serait également vrai si ils avaient une priorité plus élevée. Ceux-ci pourraient ne pas apparaître dans votre test, mais peuvent apparaître après la libération.

Avec CFG vous êtes obligé de grammaires traiter les ambiguïtés au cours du développement, mais il ne sera pas facile.


Dans le cas où je ne fais pas clairement, voici une discussion de six ans par Joshua Haberman sur le Lambda Ultimate blog de langages de programmation: et Packrat PEGs Parsing ne sont pas la réponse .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top