为了账号安全,请及时绑定邮箱和手机立即绑定

CUP解析器语法中如何匹配空大小写

CUP解析器语法中如何匹配空大小写

FFIVE 2021-11-24 15:10:30
我正在使用 CUP 生成解析器,并且我希望一个空文件成为可接受的程序。我尝试根据对类似问题here的回答将空大小写添加到我的开始符号中。start with prog;/* The grammar rules */prog    ::= class_block:cb           |   class_block:cb stmts:sb        |   stmts:sb        |   // desired empty case        ;包括所需的空案例给我以下错误:parser.java:516: error: incompatible types: Object cannot be converted to SymbolCUP$parser$result = parser.getSymbolFactory().newSymbol("prog",0, ((java_cup.runtime.Symbol)CUP$parser$stack.peek()), RESULT);如何修改我的语法以便解析器接受一个空文件?我使用 Jflex 作为我的词法分析器,使用 ComplexSymbolFactory 作为符号的类型。编辑:我已经确认上面的语法是包含空的正确方法。但是, ComplexSymbolFactory 在将空对象转换为符号时遇到问题。即使从官方 CUP 网站运行此示例,我也会收到此错误。
查看完整描述

2 回答

?
慕仙森

TA贡献1827条经验 获得超7个赞

我从朋友的 github 项目下载了 .jars 并解决了问题。

你可以在这里看到这是一个 BUG:https : //github.com/jflex-de/jflex/issues/384

尝试降级版本。


查看完整回答
反对 回复 2021-11-24
?
LEATH

TA贡献1936条经验 获得超6个赞

我不知道任何错误,但我知道您可以重写语法以使空案例起作用。例如:


Prog ::= 

   class_block:cb statement:s

   | /* the empty production */

;

我试过这个,它适用于空的制作。有一个产生式,它是一个块,然后是一个语句,或者一个语句,或者一个空的,冲突。在程序语法规则的解析器生成过程中,没有办法判断哪个是语句,什么是空。改变它只是一个块和一个语句,或者一个空的澄清。


查看完整回答
反对 回复 2021-11-24
  • 2 回答
  • 0 关注
  • 105 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信