Pregunta

Tengo un AST generado a través de antlr, y necesito para convertirlo en un ser compatible con el DLR (árboles de expresión). Sin embargo, parecería que no puedo utilizar comparadores patrón del árbol para esto como árboles de expresión necesitan sus subárboles en instanciación (que no puedo conseguir). ¿Qué solución sería el mejor para mí para su uso?

¿Fue útil?

Solución

Me hizo algo muy similar hace algunos años -. Yo no construyo una estructura DLR, pero construido mi propia estructura de árbol de expresión, que también necesita los argumentos en el tiempo de construcción (para lograr la inmutabilidad)

En aquel entonces, yo trabajaba con antlr v2 - y tengo que admitir, que no estoy familiarizado con la nueva sintaxis v3, además de que no recuerdo todos los detalles de cómo lo hice en ese entonces - lo que en lugar de proporcionarle con un ejemplo resuelto completamente, sólo voy a tratar de contar mi historia (no estoy seguro, si se aplica a su problema, también!):

En primer lugar, no fue necesaria la construcción de la estructura de mi de de la AST. Yo sólo se utiliza constructor de AST ANLTR como vehículo: regla de la construcción Cada AST puede devolver un objeto, además del nodo AST sí. El valor de retorno puede ser utilizado en la regla externa como un argumento para el constructor, y así sucesivamente. De manera que la estructura se construye automáticamente parte inferior para usted!

OIA, a construir la estructura final, al mismo tiempo que la AST se construye (AST solamente se construye para garantizar las reglas de sintaxis, y puede ser desechado.) Este enfoque es muy sólido, y es incluso más rápido que el primero la construcción de la AST, y luego transformar eso! Sin embargo, todavía utiliza el poder del analizador AST (en lugar de sólo utilizar el Analizador normales / lexer solo). Y si necesita la AST, también -. Sólo tiene que guardar en algún sitio

Si por el contrario quieres caminar un AST acabada - Me imagino que se puede utilizar cualquier rutina de programación a hacer eso - sólo asegúrese de que funciona arriba abajo para construir su resultado

!

Espero que esto ayude de alguna manera!

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