2

我想编写 Java 代码来为我的语法构建一个 LALR 解析器。有人可以推荐一些书籍或一些链接,我可以在其中学习如何为 LALR 解析器编写 Java 代码吗?

4

4 回答 4

3

手动编写 LALR 解析器很困难,但他可以做到。如果您想了解为它们手动构建解析器背后的理论,请考虑查看 Grune 和 Jacobs 的“Parsing Techniques: A Practical Guide”。这是一本关于通用解析技术的优秀书籍,LR解析的章节特别好。

如果您对获得用 Java 编写的 LALR 解析器更感兴趣,请考虑查看 Java CUP,它是 Java 的通用解析器生成器。

希望这可以帮助!

于 2011-03-23T05:17:59.550 回答
1

您可以将 LALR 功能分为两部分:准备表和解析输入。

第一部分是复杂且容易出错的,所以即使你想知道它是如何工作的,我建议使用经过验证的工作表生成器来处理 LALR 状态(以及标记器 DFA)。

第二部分包括使用一些非常简单的算法来使用这些表,以将输入标记化并处理成解析树/具体语法树。如果您愿意,这更容易自己实现,并且您仍然可以完全控制它的工作方式和作用。

在执行解析任务时,我个人使用免费的GOLD Parsing System,它有一个很好的 UI 用于创建和调试语法,它还生成表文件,然后可以由现有引擎或您自己的实现加载和处理(文件这些 CGT 文件的格式有据可查)。

于 2011-03-27T18:23:47.537 回答
1

如前所述,您将始终使用解析器生成器来生成 LALAR 解析器。一些这样的 Java 工具是:

于 2011-03-27T18:32:07.500 回答
0

只想提一下我的项目 CookCC ( http://coconut2015.github.io/cookcc/ ) 是一个 LALR(1) 解析器 + Lexer (很像 flex)。

CookCC 的独特之处在于您可以使用 Java 注释在 Java 中编写词法分析器和解析器。请参阅此处的计算器示例:https ://github.com/coconut2015/cookcc/blob/master/tests/javaap/calc/Calculator.java

于 2017-05-04T18:13:36.393 回答