java和groovy中的内部代码表示

时间:2017-07-17 12:54:54

标签: java groovy

java用什么来代表内部代码?

据我所知,它构建了一个树 - 因为它有Compiler Tree API,但同时它似乎与Abstract Syntax Tree构建的Groovy不同,并且可以修改通过AST转换。 (Clojure中的代码应该按照我的想法表示)

Java的树和Groovy的树之间有什么区别?为什么Groovy允许将其修改为开箱即用,而Java则不允许?

1 个答案:

答案 0 :(得分:1)

不同语言的抽象语法树通常不兼容。这是因为AST代表用相应语言编写的代码。这意味着您可以遍历树并将其格式化为具有相同语法的代码(即,空格将不同,其余部分相同)。但是它们不兼容,因为语言具有不同的结构。例如,Groovy有闭包,而Java则不然。您通常可以找到相同的不同概念的映射,但这不是AST的重点。

AST转换是Groovy的一部分,而它们不是Java的一部分,同样的闭包是Groovy的一部分,而不是Java的一部分:不同的设计决策。 Java的设计很简单。容易进入并易于阅读,虽然经常冗长。 Groovy有不同的侧重点。语法更简洁,需要特定于域的语言。

如果您对编译器的内部更感兴趣,我推荐"Dragon Book"。据我所知,你在学术界读到的标准(我在读书的时候读过它)。