【发布时间】:2012-12-01 06:50:24
【问题描述】:
我需要解析一种类似于 Java 的最小化版本的语言。由于效率是我为手写解析器而不是像 GOLD、bison 和 yacc 这样的 LRAR 解析器生成器选择的最重要因素。
但是我找不到好的手写解析器背后的理论。似乎只有关于这些生成器及其背后机制的教程。
我必须放弃使用正则表达式吗?因为我可以想象它们比手写tokiners 慢。
有人知道手写解析的好课程或教程吗?
【问题讨论】:
-
编译正则表达式(例如,并行 FSM)通常比手写的 LL(n) 更快。尽管我建议改为进行无词法分析。手写的 PEG(使用 Pratt 解析表达式)可以非常快,并且您仍然可以使用一些更高级别的模板来生成有效的代码。阅读有关 PEG 的更多信息,可能是有关 Packrat 解析和 Pratt 的信息,这应该是足够的理论。
-
P.S.,LLVM 的 Kaleidoscope 教程包括一个简单的手写解析器,它反过来反映了更复杂的 LLVM 和 Clang 解析方法(众所周知,效率很高)。
-
老实说,只需简单的方法,然后对其进行基准测试。如果您确实需要手动编码某些东西,至少您将拥有一个功能正确的原型进行比较。 因为我可以想象它们很慢并不是从头开始编写如此复杂的东西的好理由。
-
@SK-logic 感谢您提供的信息!正是我需要的。
-
@Useless 是的。但我已经有了语法和解析器生成器生成工具。所以这是我的下一步。