2009-11-02 14 views
9

Empecé a aprender ANTLR y tengo el libro de 2007 "The Definitive ANTLR Reference" y ANTLRWorks (una herramienta interactiva para crear gramáticas). Y, siendo ese tipo de persona, comencé en el Capítulo 3. ("Una visita rápida para los impacientes").Comenzando con ANTLR y evitando errores comunes

Es un proceso bastante doloroso, especialmente porque algunos errores son bastante impenetrables (por ejemplo, ANTLR: "missing attribute access on rule scope" problem, lo que para mí significa "tienes algo mal"). También tengo algunas gramáticas muy simples (3-4 producciones solamente) y entrada simple (2 líneas) que cuando se ejecutan dan el error "OutOfMemory".

El sitio ANTLR es útil pero algo fragmentado y algunos usuarios de SO han comentado (https://stackoverflow.com/questions/278480/good-tutorial-for-antlr) que el libro y los tutoriales esperan un alto nivel de entrada. He sido reacio a acercarme a la lista de discusión ANTLR debido a esto.

MÁS TARDE Estamos empezando a entenderlo. Sería útil contar con ejemplos simples y confiables que podrían expandirse suavemente. Ciertamente vale la pena dominarlo ya que hemos remodelado bastante nuestro pensamiento basado en ANTLR.

Un problema es que ANTLR V3 tiene cambios significativos de V2. Una respuesta en SO (y en las páginas ANTLR) se refería a una sintaxis V2 que ya no está disponible.

Algunas de las preguntas ANTLR sobre SO me han ayudado mucho, pero encontrarlas es un poco ad hoc. Así que me gustaría saber cómo los usuarios de SO pueden ayudar a que el proceso de aprendizaje sea menos doloroso. (Si consulta el libro de referencia, sería útil señalar páginas concretas).

EDIT. @duffymo y @JamesAnderson han confirmado que ANTLR es un trabajo duro, en gran parte porque los analizadores son difíciles. (FWIW He pasado por LEX/YACC, etc. y no hay duda de que ANTLR es más potente y más fácil de usar.) Creo que aún sería útil tener áreas donde es posible evitar el ensuciamiento como:

  • asegurar la correcta capitalización de los nombres de las variables
  • nombre de paquete complementario a lexer, así como analizador
  • cuidar sobre el orden de las reglas, ya que afecta precedencia

vez más de este tipo sería útil.

+0

Aunque no específicamente sobre ANTLR, Ter escribió un libro posterior llamado Language Implementation Patterns. Es un * excelente * trabajo con relevancia tanto para principiantes como para veterinarios. I | MVHO es una necesidad absoluta para cualquiera que realice un análisis sintáctico. –

Respuesta

7

Estoy de acuerdo - ANTLR no es para los débiles. Espera un alto nivel de entrada, porque las gramáticas y los analizadores sintácticos no son triviales.

Con eso dicho, aquí están algunas sugerencias:

  1. Olvídate de v2. La versión 3 es el estándar; ni siquiera pierdas el tiempo teniendo en cuenta la versión anterior o su documentación.
  2. OutOfMemoryError le dice que hay algo circular en la gramática que ha definido.
  3. IntelliJ tiene un maravilloso IDE para trabajar con ANTLR v3. Le dará una representación gráfica de su gramática, depuración paso a paso, etc. Si va a trabajar mucho con ANTLR, valdría unos dólares comprar una licencia.

ANTLR no será fácil de dominar. El libro es bueno, pero denso. Los mensajes de error son crípticos, como habrás notado.Me sorprendería si alguien aquí pudiera hacerlo más fácil.

+0

Solo para señalar, ANTLRWorks también es increíble para crear gramáticas y tiene funciones muy parecidas a las que mencionas para IntelliJ. – RCIX

+0

ANTLRWorks es un plug-in IntelliJ. No lo he usado fuera del IDE. – duffymo

5

Lo siento, pero mi experiencia de ANTLR (de hecho javacc, bison o cualquier analizador de funciones completas) es que la mayor parte de su aprendizaje será al corregir sus propios errores.

Obtener buenos ejemplos del código de otras personas lo reducirá un poco, los mejores ejemplos parecen muy simples, pero te falta todo el sudor y el tirón de pelo necesarios para que se vean así de fácil.

+0

+1 Esto es realmente útil. –

+5

Estoy empezando con esto, y "tirar del pelo" es de hecho la terminología técnica correcta para la curva de aprendizaje asociada con ANTLR. Aunque tengo la sensación de que una vez que alcanzas el pico de Mt ANTLR, la vista desde la cima es espectacular. –

2

Incluso si prefiere la línea de comandos, vale la pena utilizar AntlrWorks cuando tenga problemas. La representación diagramática puede hacer que sea más fácil ver lo que salgo mal.

Una imagen vale más que mil mensajes de error.