用于Java的Earley解析器生成器

时间:2008-12-03 15:01:06

标签: java parsing earley-parser

我正在寻找一个能够生成Java输出代码的Earley parser生成器, 即,为词法分析器和解析器生成Java代码,并允许包含动作 (实现为Java代码)是为语法规则执行的。

我查看了两个生成Java代码的Earley解析器生成器(PepPEN) 但是他们似乎都不允许在语法中嵌入动作。

3 个答案:

答案 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)

不确定这是否是答案,但我经常使用的一个扫描仪生成器是JFlex,它输出Java代码。

它与CUP密切合作,后者在行动方面更为接近。

答案 2 :(得分:1)

  

它们似乎都不允许将动作嵌入到语法中。

一般来说,将动作直接嵌入语法并不是一个好主意。如果动作与语法分离,则会更好。