Pregunta

Estoy buscando un generador de analizadores para Java que haga lo siguiente: Mi proyecto de lenguaje es bastante simple y solo contiene un pequeño conjunto de tokens.

Salida en código Java READABLE puro para que pueda modificarlo (por eso no usaría ANTLR) Biblioteca madura, que se ejecutará y funcionará con al menos Java 1.4

He observado lo siguiente y podrían funcionar: JavaCC, jlex, Ragel?

¿Fue útil?

Solución

Debes usar Rats ... De esta manera, tú no es necesario que separe el lexer y el analizador y, si desea extender su proyecto, será trivial. Está en java y luego puedes procesar tu AST en Java ...

Otros consejos

Tal vez esté buscando analizadores combinators en lugar de analizadores generators ? Consulte este documento y JParsec .

Es realmente una mala idea editar el código del analizador generado. Es mucho más fácil editar el archivo de gramática y luego volver a compilarlo. A menos que lo esté haciendo con fines educativos, en cuyo caso ANTLR se enorgullece de generar código bastante legible para un generador de analizador tan poderoso.

Tuve una buena experiencia SableCC .

Funciona de manera diferente a la mayoría de los generadores, ya que se le otorga un modelo AST / Visitante que usted extiende (a través de la herencia).

No puedo comentar sobre la " calidad " de su código en términos de legibilidad (ha pasado un tiempo desde que lo he usado), pero tiene la calidad de que no tiene que leer el código en absoluto. Solo el código en tu subclase.

Tal vez ANTLR lo haga por usted. Es un buen generador de analizador con un buen libro disponible para documentación.

Eche un vistazo a SableCC . Sablecc es un generador de analizador fácil de usar que acepta la gramática de su lenguaje como EBNF, sin mezclar código de acción, y genera un analizador de Java que produce un árbol de sintaxis que se puede recorrer utilizando un visitante de nodo de árbol. SableCC es potente, pero mucho más simple de usar que ANTLR, JavaCC, yacc, etc. Tampoco requiere un lexer separado. Construir el procesador de su idioma equivale a extender una clase de visitante generada a partir de su gramática y anular los métodos a los que se llama cuando el analizador encuentra una construcción sintáctica. Para cada regla gramatical XYZ, el visitante tendrá un método inAXYZ (Nodo xyz) .... outAXYZ (Nodo xyz) llamado cuando el analizador coincida con la regla.

Para un lenguaje tan simple, JFlex podría ser suficiente. Es similar a JLex pero más rápido (lo que también puede significar menos legible, pero no he visto Salida de JLex).

Es un lexer, no un analizador, pero es construido para interactuar fácilmente con CUP o BYacc / J . Y nuevamente, para un lenguaje simple, podría ser más fácil simplemente escribir su propio analizador (ya lo he hecho antes).

Estamos utilizando JavaCC para nuestro lenguaje (también bastante pequeño) y estamos contentos con él.

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