Ask HN: Easiest way to code AST transformations
When writing macros the main idea is to convert the tree that represents the code into a modified tree.
What is the best way to describe such alterations in non ad-hoc, more declarative manner?
The only thing that comes to my mind is something with a functionality of XSLT.
Do you know of some more light weight libraries in any language with similar capabilities as XSLT when it comes to transforming trees into other trees?
4 comments
[ 51.8 ms ] story [ 89.1 ms ] threadThe body in your example is AST sub tree. What I want to do, is check it for occurence of some (multi-node) patterns and alter it so that those patterns transform into some other target patterns.
I would like to be able to specify those patterns in declarative manner.
Same way I describe transformations in xslt to transform one xml file into different similar xml file.
I could, in lisp macro, convert ast of `body` to xml tree, write xslt, apply it to that xml, convert back resulting xml into lisp ast and return if from macro.
But that seems like a bit of overkill. I'm searching for something that does descrptive tree transformations similar to xslt but more lightweight. More suitable for use in writing macros.
1) Use gui interface to "draw" a grammer diagram describing the AST/modified
2) Take latex drawing & transform to lex/yacc description. 3) Rust grmtools, https://softdevteam.github.io/grmtools/master/book has relevant libraries/tools to make use of files generated in step 2.----------------
Automation idea: No programmer history/preferences for OS/language/environment specified.
So, shell script to "automate"/glue this all togehter as one command line program left as a reader exercise. ;)