Uno de mis proyectos Java es una bifurcación de parboiled y, a diferencia de, por ejemplo, Antlr o JavaCC, los analizadores se generan en tiempo de ejecución. Las gramáticas generadas son gramáticas de expresión de análisis, o PEG (escuché que otro término para ellas es "packrat").
Mientras que la generación de tiempo de ejecución agrega complejidad (generación de código de bytes involucrada), otro aspecto se relaciona con la teoría del analizador en sí. Como desafortunadamente no tengo antecedentes sólidos en ciencias de la computación, me falta conocimiento teórico para mapear el código existente con los conceptos existentes, en este caso, analizadores.
¿Existe un buen libro de referencia sobre analizadores que pueda comprar y leer, o incluso enlaces en Internet, que pueda ayudarme a construir tal "mapeo", teniendo en cuenta mi escaso conocimiento teórico?
Si no le importa la diferencia de idioma, el Capítulo 8 de Higher Order Perl trata sobre el análisis y, en particular, crea un analizador de descenso recursivo utilizando combinadores de analizador. Es accesible (si no tienes miedo de Perl) y está disponible para leer de forma gratuita si lo deseas. Me ayudó a despertar mi interés en las técnicas de análisis hace varios años.
fuente
Si bien Parsing Techniques es un gran libro y he leído algunas partes varias veces, se centra en el análisis LR que no será interesante para usted. En su caso particular, está buscando PEG que son una especie de análisis descendente recursivo descendente con retroceso basado en el orden de alternativas.
Me gustaría sugerirle que mire los combinadores de analizador sintáctico, que utilizan la misma estrategia. Por ejemplo, puede consultar este documento http://research.microsoft.com/pubs/65201/parsec-paper-letter.pdf que utiliza Haskell para construir combinadores de analizadores. Verifique la sección
try
donde incorporan el retroceso (Sección 3.4).En cualquier caso, lo que necesita aprender es:
fuente