标题已经概括了问题。假设使用源代码生成的解析器生成器(其将要解析的语法硬编码到程序中)所能实现的任何功能,都可以通过可配置解析器来实现(该解析器将要解析的语法以数据结构的形式保存)。
我想,硬编码的代码生成解析器将具有性能优势,因为少了一层间接引用,但是编译和运行它(或在动态语言中使用exec()
)及代码生成过程的混乱似乎是一个很大的缺点。除此之外,是否还有其他使用代码生成解析器的好处?
我看到大多数使用代码生成的地方都是为了解决语言元编程能力的限制(即Web框架、AOP、与数据库交互等),但整个词法分析过程似乎非常简单和静态,不需要从代码生成获得的额外元编程动态性。怎么回事?难道性能优势如此巨大吗?