4

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

以纯 READABLE Java 代码输出,以便我可以修改它(这就是我不使用 ANTLR 的原因)成熟的库,至少可以在 Java 1.4 上运行和工作

我查看了以下内容,它们可能会起作用:JavaCC、jlex、Ragel?

4

7 回答 7

4

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

编辑生成的解析器代码是一个非常糟糕的主意——编辑语法文件然后重新编译它要容易得多。除非您是出于教育目的而这样做,在这种情况下,ANTLR 以为如此强大的解析器生成器生成非常易读的代码而自豪。

于 2009-05-04T19:24:04.190 回答
2

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

于 2009-05-04T19:27:32.497 回答
1

我有很好的经验SableCC

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

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

于 2009-05-04T19:33:58.220 回答
1

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

于 2009-05-04T22:27:47.850 回答
1

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

于 2010-02-05T06:47:37.427 回答
0

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

它是一个词法分析器,而不是解析器,但它可以轻松地与CUPBYAcc /J接口。同样,对于一种简单的语言,编写自己的解析器可能更容易(我以前做过)。

于 2009-05-04T19:20:23.277 回答
0

我们将 JavaCC 用于我们的(以及相当小的语言)并且对它感到满意。

于 2009-05-04T19:27:22.590 回答