2009-10-28 88 views
24

我正在使用Java编译器设计项目。词汇分析完成(使用jflex),我想知道哪种类似yacc的工具最适合做语法分析和原因分析(效率最高,最容易使用等)。Yacc等效于Java

回答

16

如果你特别想要YACC般的行为(表驱动),我唯一知道的就是CUP

在Java世界中,似乎有更多人倾向于递归下降解析器,如ANTLRJavaCC

效率很少是选择解析器生成器的原因。

+0

难度:CUP不再维持,[CUP 2](http://www2.in.tum.de/cup2)为测试版。它还好吗? – minopret 2012-12-27 16:20:04

+0

@minopret - 十多年来我一直没有使用过CUP,但除非有一个重大的未修正的bug,否则即使没有积极维护也应该可以。但是,除非你需要YACC的行为,否则我会看ANTLR。 – kdgregory 2012-12-29 23:30:48

+0

我正在研究一个GitHub markdown文件(.md)创建器,该创建器需要使用任何语言编写的代码文件并为其生成.md文件。我在Java中这样做。这些软件可以处理*任何*语言或只是Java? – 2017-02-11 00:02:49

5

在过去,我已经将ANLTR用于词法分析器和解析器,而JFlex主页表示它可以与ANTLR进行互操作。我不会说ANTLR的在线文档非常棒。我最终投资于'The Definitive ANTLR reference',这对我有很大的帮助。

+1

在我的经验以及接口,ANTLR是迄今为止词法/解析最流行的Java工具。 – 2009-10-28 19:40:43

2

另一种选择是GOLD Parser

与许多替代方案不同,GOLD解析器从语法生成解析表并将它们放置在二进制,不可执行的文件中。然后,每种受支持的语言都有一个引擎,它读取二进制表并分析源文件。

我没有专门使用Java实现,但使用了相当不错的Delphi结果。