【发布时间】:2015-12-19 20:07:10
【问题描述】:
我正在为我的 OOP 课程做一个项目。部分任务是为非常简单的语法开发解析器。据我了解,目前最简单的手动实现解析器是递归下降解析器。
但是,我正在解析的语言的所有运算符本质上都是左关联的。据我所知,处理由左关联性强制执行的左递归的最佳方法是使用 LR 解析器。
我的想法是从右到左解析标记,我相信这应该使我能够将左关联规则重写为右关联规则。
这会有效吗?如果无效,为什么不呢?
【问题讨论】:
-
到目前为止,最容易编写的解析器是您只需指定(无上下文)语法的解析器,解析器生成器工具会处理所有问题。我在 GLR 解析器方面拥有非常好的经验。 (基于 Earley 的解析器也不错,但由于速度问题,一般不适合生产)。
-
我同意。虽然我对这个项目的解析器生成器(YACC/Bison)有一些经验,但我更喜欢使用手写解析器。首先,我什至不认为我被允许使用外部库,并且使用 Bison 或类似的东西可能需要这样做。其次,我想了解更多关于解析和编译器设计的一般知识,所以我想借此机会这样做,特别是因为我需要解析的语法非常简单,所以这是学习新东西的完美情况。无论如何,我相信在这种情况下递归下降解析器是最简单的解决方案。
-
好的。然后查看我关于如何编写递归下降解析器的 SO 答案。这些很容易处理左递归。见stackoverflow.com/questions/2245962/…