java用什么来代表内部代码?
据我所知,它构建了一个树 - 因为它有Compiler Tree API
,但同时它似乎与Abstract Syntax Tree
构建的Groovy
不同,并且可以修改通过AST转换。 (Clojure
中的代码应该按照我的想法表示)
Java
的树和Groovy
的树之间有什么区别?为什么Groovy
允许将其修改为开箱即用,而Java
则不允许?
答案 0 :(得分:1)
不同语言的抽象语法树通常不兼容。这是因为AST代表用相应语言编写的代码。这意味着您可以遍历树并将其格式化为具有相同语法的代码(即,空格将不同,其余部分相同)。但是它们不兼容,因为语言具有不同的结构。例如,Groovy有闭包,而Java则不然。您通常可以找到相同的不同概念的映射,但这不是AST的重点。
AST转换是Groovy的一部分,而它们不是Java的一部分,同样的闭包是Groovy的一部分,而不是Java的一部分:不同的设计决策。 Java的设计很简单。容易进入并易于阅读,虽然经常冗长。 Groovy有不同的侧重点。语法更简洁,需要特定于域的语言。
如果您对编译器的内部更感兴趣,我推荐"Dragon Book"。据我所知,你在学术界读到的标准(我在读书的时候读过它)。