I couldn&#x27;t disagree more. Working with that kind of AST is many orders of magnitude harder than Lisp macros. None of it is first class. You brush over it in your comment like writing a Java parser is trivial. My clojure parser returning the AST in its entirety is: (read-string (slurp &quot;my-source.clj&quot;)). What does your Java one look like?<p>The proof that it is so much harder is that no one ever does it. Yet people do this all the time in Lisps. If its &quot;not much harder&quot; I&#x27;d expect to see more of it, but I don&#x27;t, because it is just so much work.<p>Aside from parsing, what about templating. Yes, you can manipulate the AST once you have it, but what would templating AST look like? Would it look just like the Java code? With the syntax quote in clojure it looks very much like the output. How would you even begin to template syntax in your hypothetical Java implementation?