我正在寻找一个能够生成Java输出代码的Earley parser生成器, 即,为词法分析器和解析器生成Java代码,并允许包含动作 (实现为Java代码)是为语法规则执行的。
答案 0 :(得分:4)
如果我理解你的问题,可以通过"在语法中嵌入动作"你的意思是在语法中插入语义动作,以便它们被执行" inline" (例如,在解析阶段,正在解析输入)。
Earley解析器不适用于此,因为它们允许任何(甚至是模糊的)无上下文语言语法。请参阅:http://en.wikipedia.org/wiki/Earley_algorithm
基本上:对于给定的执行和给定的状态,Earley解析器包含所有可能的解析状态。传统方法(例如Yacc / Bison)是在完成规则或部分输入之后执行语义动作。但是当解析模糊的语法(例如,具有Reduce / Reduce冲突的语法)和Earley解析器时,将同时处理"减少"但由于它的含糊不清,我们不知道应该采取哪种行动。
使用Earley解析器的常用方法是解析输入并最终得到一个解析树林,稍后您可以在其上执行所需的操作(例如,丢弃那些您知道无效的操作,或对它们应用一些语义操作)
但是,有一些关于此主题的研究尝试内联执行某些操作(抱歉,只找到此链接)http://www.springerlink.com/content/602270808666074p/
答案 1 :(得分:1)
答案 2 :(得分:1)
它们似乎都不允许将动作嵌入到语法中。
一般来说,将动作直接嵌入语法并不是一个好主意。如果动作与语法分离,则会更好。