Scala中的Scala AST

15

是否有一个Scala库可以解析Scala并创建抽象语法树(AST)?

理想情况下,我对Scala库感兴趣。备选方案是Java库。

(我知道可以利用来自 Scala Syntax Summary的EBNF。)

6个回答

9
我认为访问AST的最佳方式是使用编译器插件。在深入了解之前,您应该先阅读简介。请点击此处

1
Scala编译器插件看起来很有前途。 - AWhitford

4

一些现有的解析器:

如果使用规范中的EBNF,请小心,因为显然存在以下问题:

"附录和内联语法之间存在不匹配,以及scalac编译的语言(在Scala源代码中使用)与语法声明的语言之间存在不匹配" -- Scala Trac bug #1826


你提到的EBNF技巧很有用。这意味着JavaCC、ANTLR等工具可能会有一些挑战。IDE编译器通常有自己的细微差别,因为它们对实时编译感兴趣——而这并不是我所需要的。 - AWhitford

2

2
你不能仅凭语法构建Scala的AST。需要考虑到隐式转换,而为了考虑它们,需要考虑类型推断器。
但是,你可以调用编译器本身——它只是一个jar文件。特别是Scala 2.8有很多钩子供其他程序使用,这是Miles Sabin正在做的工作,以便Scala的Eclipse插件可以利用编译器。
我建议你去Scala Tools邮件列表,并与那里的人联系。

3
你可以构建Scala的AST而不考虑语言的语义方面,例如类型和隐式转换。对于许多应用程序,考虑这些方面是必要的,但并非全部需要。 - Matt R
1
我可以想象出需要AST的目的,既包括用户编写的内容,也包括反映隐式和其他因素对最终用于代码生成的精确AST的贡献。 - Randall Schulz
起初,我认为我并不关心Scala代码的真正语义解释,但你提到的隐式和类型推断确实很有道理... 我想我肯定需要后者,所以更仔细地研究Scala编译器似乎是明智的选择。 - AWhitford

1

0

关于纯Scala解决方案我不确定,但如果你发现自己需要实施备选方案B,可以先查看ANTLRRats!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接