Java的Yacc等效工具

31

我正在使用Java进行编译器设计项目。词法分析已完成(使用jflex),我想知道哪种类似yacc的工具最适合(最高效,最易于使用等)进行语法分析,并说明原因。

5个回答

23

如果你特别需要类似YACC的行为(基于表格的),我唯一知道的就是CUP

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

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


1
难度:CUP不再维护,而CUP 2仍处于测试阶段。这还可以吗? - minopret
@minopret - 我已经十几年没有使用CUP了,但除非存在重大未修复的错误,否则即使不进行积极维护,它也应该是可以的。然而,除非您需要类似YACC的行为,否则我建议您看看ANTLR。 - kdgregory
我正在开发一个GitHub markdown文件(.md)创建器,它可以接受任何语言编写的代码文件,并为其生成.md文件。我是用Java来实现的。这些软件能够处理任何语言吗?还是只能处理Java? - Mike Warren
1
@MikeWarren - 解析器生成器可以为任何具有正则语法的语言创建解析器。这包括大多数编程语言。然而,从头开始创建语法是一项非常棘手的任务,特别是如果你不熟悉它。我建议寻找各种工具的预先编写的语法,并选择(1)输出您喜欢的工具,以及(2)您可以适应最多语法的工具。 - kdgregory

5

过去我使用ANLTR进行词法分析和语法分析,而JFlex主页上说它可以与ANTLR互操作。我不认为ANTLR的在线文档非常优秀。最终我投资购买了'The Definitive ANTLR reference'这本书,在很大程度上帮助了我。


2
根据我的经验,ANTLR是迄今为止最受欢迎的Java词法分析/语法分析工具。 - Dónal

5

3

还有一个叫做jacc。

jacc与yacc非常接近,但它是用纯java实现的,并生成java解析器。

它与jFlex接口良好。

http://web.cecs.pdx.edu/~mpj/jacc/


2
另一个选择是GOLD Parser

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

我没有特别使用过Java实现,但使用Delphi引擎的效果相当不错。


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