¿Buenos libros sobre teoría del analizador sintáctico?

9

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?

fge
fuente

Respuestas:

3

Si quieres aprender sobre la teoría de los analizadores sintácticos, te recomiendo el volumen 1 de este libro clásico:

Aho, Alfred V .; Ullman, Jeffrey D., La teoría del análisis, traducción y compilación , Prentice-Hall (1972).

Zsbán Ambrus
fuente
Esta era una enciclopedia sobre el tema en el momento de la publicación. Pero ha habido un trabajo de investigación realizado desde entonces.
babou
1

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.

hobbs
fuente
0

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:

  • análisis de descenso recursivo y gramáticas LL
  • lookahead fijo versus lookahead infinito (hecho a través de retroceso)
  • estrategias de retroceso
  • Cómo lidiar con las reglas recursivas a la izquierda
  • Memorización de los resultados parciales para evitar comportamientos exponenciales.
Wickoo
fuente