Parser,Generator for Java具有以下要求

时间:2009-05-04 19:15:32

标签: java parsing parser-generator javacc

我正在寻找一个Java解析器生成器,它执行以下操作:我的语言项目非常简单,只包含一小组令牌。

输出纯READABLE Java代码,以便我可以修改它(这就是为什么我不使用ANTLR) 成熟的库,至少可以运行和使用Java 1.4

我看过以下内容并且它们可能有效:JavaCC,jlex,Ragel?

7 个答案:

答案 0 :(得分:4)

也许您正在寻找解析器组合器而不是解析器生成器?请参阅this paperJParsec

编辑生成的解析器代码是一个非常糟糕的主意 - 编辑语法文件然后重新编译它会容易得多。除非你是出于教育目的而做的,否则ANTLR会为这样一个强大的解析器生成器生成非常可读的代码而自豪。

答案 1 :(得分:2)

您应该使用Rats ...这样,您就不必分离词法分析器和解析器,然后如果您想扩展您的项目将是微不足道的。它在java中然后你可以用Java处理你的AST ...

答案 2 :(得分:1)

我有很好的经历SableCC

它与大多数生成器的工作方式不同,因为您获得了扩展的AST /访问者模型(通过继承)。

我无法评论其代码在可读性方面的“质量”(自从我使用它以来已经有一段时间了),但它确实具有您不必阅读代码的质量所有。只是子类中的代码。

答案 3 :(得分:1)

也许ANTLR会为你做这件事。它是一个很好的解析器生成器,有一个很好的book可用于文档。

答案 4 :(得分:1)

看看SableCC。 Sablecc是一个易于使用的解析器生成器,它接受您的语言语法为EBNF,无需混合动作代码,并生成一个Java解析器,生成一个可以使用树节点访问者遍历的语法树。 SableCC功能强大,但比ANTLR,JavaCC,yacc等更简单易用。它也不需要单独的词法分析器。构造语言处理器相当于扩展从语法生成的访问者类,并覆盖其在解析器遇到语法结构时调用的方法。对于每个语法规则XYZ,访问者将在解析器匹配规则时调用onAXYZ(Node xyz).... outAXYZ(Node xyz)。

答案 5 :(得分:0)

对于简单的语言,JFlex可能就足够了。它类似于JLex,但是faster(这也可能意味着可读性较差,但我没有看到JLex的输出)。

它是词法分析器,而不是解析器,但built可以轻松与CUPBYacc/J进行交互。再说一次,对于一种简单的语言,可能更容易编写自己的解析器(之前我已经完成了)。

答案 6 :(得分:0)

我们正在使用JavaCC(以及相当小的语言),并对此感到满意。