【发布时间】:2012-01-08 18:59:07
【问题描述】:
标题总结了它。大概任何可以使用源代码生成解析器生成器(本质上将要解析的语法硬编码到程序中)可以完成的任何事情都可以使用可配置解析器完成(它将维护待解析的语法) -解析软编码为数据结构)。
我想硬编码的代码生成解析器将获得性能奖励,减少一级间接,但是必须编译和运行它(或动态语言中的exec())和整体代码生成的笨拙似乎是一个很大的缺点。代码生成解析器还有其他我不知道的好处吗?
我看到代码生成使用的大多数地方都是为了解决语言元编程能力的限制(即 Web 框架、AOP、与数据库的接口),但整个 lex-parse 的事情看起来非常简单和静态,不需要您从代码生成中获得的任何额外的元编程活力。是什么赋予了?性能优势有那么大吗?
【问题讨论】:
-
@BartKiers:解析器生成器生成的解析器不比生成器本身更复杂或更通用吗?换句话说,如果解析器生成器可以生成足够复杂的代码来解析某些东西,为什么它不能只生成代码、编译并执行内存中的代码来立即解析呢?那不等于直接解析它吗? (可能不是,因为解析器生成器确实存在,我只是不知道为什么)
-
通过一些努力,可以获得lex和yacc(flex和bison)生成的表,并在非标准的骨架中使用它们。最大的问题是连接用户提供的操作。