Pregunta

Tengo que escribir un compilador. Es tarea de la Univ. El profesor nos dijo que podíamos usar cualquier API que queremos hacer el análisis del código, siempre y cuando se trata de una buena. De esta manera podemos centrarnos más en la JVM vamos a generar.

Así que sí, voy a escribir un compilador en Java para generar Java.

¿Conoces alguna buena API para esto? ¿Debo usar expresiones regulares? Yo suelo escribir mis propios programas de análisis con la mano, aunque no es aconsejable en este escenario.

Cualquier ayuda sería apreciada.

¿Fue útil?

Solución

Regex es bueno utilizar en un compilador, pero sólo para el reconocimiento de fichas (es decir, no hay estructuras recursivas).

La forma clásica de escribir un compilador está teniendo un analizador léxico para los tokens que reconocen, una analizador de sintaxis para el reconocimiento de la estructura, una analizador semántico para el reconocimiento de significado, un generador de código intermedio , un optimizador , y durar un generador de código de destino . Cualquiera de esos pasos se pueden combinar, o saltarse por completo, si se hace que el compilador más fácil de escribir.

Ha habido muchas herramientas desarrolladas para ayudar en este proceso. Para Java, se puede ver en

Otros consejos

Yo recomendaría antlr , principalmente debido a sus capacidades de generación de salida a través de StringTemplate.

Lo que es mejor es que libro de Terence Parr en el mismo está por lejos uno de los mejores libros orientados hacia la escritura compiladores con un generador de analizadores sintácticos.

A continuación, usted tiene ANTLRWorks que le permite estudiar y depurar la gramática sobre la marcha.

Para colmo de males, el antlr wiki de documentación + , (aunque no lo suficiente para mi gusto integral), es un buen lugar para comenzar para cualquier principiante. Me ayudó a refrescar los conocimientos sobre la escritura del compilador en una semana.

Tener un vistazo a JavaCC , un analizador de lenguaje para Java. Es muy fácil de usar y conseguir la caída de

Ir clásico - Lex + Yacc. En Java se explica JAX y javacc . Javacc incluso tiene algunos de Java gramáticas listos para su inspección.

Me gustaría recomendar el uso ya sea un metacompiler como antlr , o un simple biblioteca analizador combinador. Java funcional tiene un analizador API combinador . También hay JParsec . Ambos se basan en la biblioteca de Haskell Parsec .

JFlex es un generador de escáner que, de acuerdo con la manual, está diseñado para trabajar con el generador de análisis CUP .

  

Uno de los principales objetivos de diseño de JFlex era hacer interfaz con el generador de análisis libre de Java CUP tan fácil como posiblemente [sic].

También tiene apoyo a byacc / J , que, como su nombre indica, es un puerto de Berkeley YACC para generar código Java.

He utilizado JFlex sí y me gustó. Howeveer, el proyecto que estaba haciendo era bastante simple que escribí el analizador a mano, así que no sé lo bueno que sea taza o byacc / J es.

He usado SableCC en mi curso compilador, aunque no por elección.

Me acuerdo resulta muy voluminoso y pesado, con más énfasis en la limpieza de conveniencia. (Sin precedencia de los operadores o cualquier cosa, hay que indicar que en la gramática)

probablemente me quiero usar algo más si tuviera la opción. Mis experiencias con yacc (para C) y feliz (por Haskell) han sido tanto agradable.

combinadores analizador es una buena opción. popular implementación Java es JParsec.

Si vas a ir duro, tirar un poco de http://llvm.org en el mezclar:)

Le sugiero que mire en la fuente de BeanShell. Tiene un compilador de Java y es bastante fácil de leer.

Utilice un combinador analizador, como JParsec . Hay un buen tutorial de vídeo sobre cómo usarlo .

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