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?
1) Use gui interface to "draw" a grammer diagram describing the AST/modified
tree (aka transition diagram / BNF / EBNF / w3 grammer specificatation(s)
XSLT to use isn't in original request. XSLT grammer for "gui" is version dependent.
w3 specification(s) http://www.w3.org Note: things other XSLT too!
Example program(s) for the 'gui' edit:
https://tikzit.github.io/index.html or https://latex-cookbook.net/graph/
Perhaps bootup a livecd (https://www.tug.org/texlive)
or online https://www.overleaf.com/
Use tikzi library from github or graph.tex from latex-cookbook
2) Take latex drawing & transform to lex/yacc description. https://github.com/rajnitish/Latex-to-Html-Lex-Yacc/blob/master/parser
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. ;)
(define-syntax-rule (repeat3 body ...)
(begin
body
body
body))
and you just use it (repeat3 (print "Hello!"))
expands to (begin
(print "Hello!")
(print "Hello!")
(print "Hello!"))
and the output is Hello!Hello!Hello!