Pregunta

Disfruté mucho usando YARD:

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

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

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

Pude construir una calculadora completamente funcional.Estoy evaluando YARD para hacer un analizador PHP.Por favor, informe sobre las limitaciones de los generadores de analizadores y gramática PEG.¡Muchas gracias!

¿Fue útil?

Solución

Creo que el gran "problema" de los PEG es que no encajan en la taxonomía normal de gramáticas, ya que operan de una manera fundamentalmente diferente.Las gramáticas normales son "al revés" en el sentido de que describen todas las oraciones (programas) posibles que se pueden generar.Los PEG describen cómo analizar: abordan el problema desde el otro extremo.

En mi opinión, esta es una forma más natural de pensar en el problema y, ciertamente, para cualquier analizador escrito a mano (de descenso recursivo) no haría nada más.

Otros consejos

La principal limitación de las gramáticas de PEG es que no se ocupan de la ambigüedad en absoluto.

Sin duda, ésta es también su fuerza ya que se trata de ambigüedades es una de las partes más frustrantes de la utilización de una herramienta CFG (independiente del contexto gramatical).

Con los PEG a lidiar con las ambigüedades de forma explícita al ordenar la regla que desea igualar antes de que otra regla que coincida con ambigüedad, pero que no desea.

El problema es que no siempre se sabe aún acerca de algunas o incluso cualquiera de las ambigüedades en un idioma o una gramática y generadores de PEG, al menos los que yo he probado, no analizan la gramática para la ambigüedad de ayudarle a encontrarlos y luego diseñar y solicitar sus reglas para tratar con ellos de la manera correcta.

Los generadores de analizadores sintácticos CFG como yacc y bisontes analizar la gramática y el informe de todas las ambigüedades. Por desgracia, a menudo les informan de una manera bastante críptica que puede ser difícil de dar sentido. Y, por supuesto, a menudo es difícil de solucionar la gramática para tratar con ellos. Pero al menos usted será consciente de que existen.

Con una gramática de PEG que puede ser felizmente ignorante de las ambigüedades en su gramática conceptual porque una vez que lo convierten en un PEG que no tiene ambigüedades más, que acaba de reglas de coincidencia y las reglas tal vez en silencio inalcanzables que también se correspondería si tenían mayor precedencia. Estos podrían no aparecer en su prueba, pero pueden aparecer después de la liberación.

Con CFG las gramáticas que se ven obligados a hacer frente a las ambigüedades durante el desarrollo, pero no será fácil.


En el caso de que no estoy dejando claro, aquí hay una discusión de seis años de edad, por Joshua Haberman más en el Lambda el último los lenguajes de programación blog: PEG y de Packrat de análisis no son la respuesta .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top