我想编写Java代码来为我的语法构建一个LALR解析器。有人可以建议一些书籍或一些链接,我可以学习如何为LALR解析器编写Java代码吗?
答案 0 :(得分:3)
手工编写LALR解析器很困难,但可以做到。如果你想学习手工构建解析器背后的理论,可以考虑一下Grune和Jacobs的“解析技术:实用指南”。这是一本关于一般解析技术的优秀书籍,关于LR解析的章节特别好。
如果您对获取用Java编写的LALR解析器更感兴趣,请考虑查看Java CUP,它是Java的通用解析器生成器。
希望这有帮助!
答案 1 :(得分:1)
您可以将LALR功能分为两部分:准备表和解析输入。
第一部分是复杂的错误,所以即使你想知道它是如何工作的,我建议使用一个经过验证的工作表生成器用于LALR状态(以及用于标记化器DFA)。
第二部分包括使用一些非常简单的算法来使用这些表来标记化并将输入处理成解析树/具体语法树。如果您愿意,这样更容易实现,并且您仍然可以完全控制它的工作方式和工作方式。
在进行解析任务时,我个人使用免费的GOLD Parsing System,它有一个很好的用户界面来创建和调试语法,它还生成表格文件,然后可以由现有引擎加载和处理自己的实现(这些CGT文件的文件格式已有详细记录)。
答案 2 :(得分:1)
答案 3 :(得分: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