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

标签 java compiler-construction parser-generator jflex cup

我正在使用 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 Symbol
CUP$parser$result = parser.getSymbolFactory().newSymbol("prog",0, ((java_cup.runtime.Symbol)CUP$parser$stack.peek()), RESULT);

如何修改语法以便解析器接受空文件? 我使用 Jflex 作为我的词法分析器,使用 ComplexSymbolFactory 作为符号的类型。

编辑:我已经确认上面的语法是包含空的正确方法。但是,ComplexSymbolFactory 在将空对象转换为符号时遇到问题。 即使运行 this example 时我也会收到此错误来自银联官方网站。

最佳答案

我从 friend 的 github 项目下载了 .jar,问题就解决了。

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

尝试降级版本。

关于java - 如何匹配 CUP 解析器语法中的空大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52862424/

相关文章:

java - 如何比较图中的边以实现像 facebook 这样的网络图中的三元闭包

java - Java有堆和栈吗?

java - 与 postgreSQL 数据库连接的非法 UTF-8 序列

visual-c++ - (VC++) 未初始化变量的运行时检查 : How is the test Implemented?

objective-c - 如何使用 ParseKit 的 ParserGenApp 语法指定字符范围 [a-zA-Z]

java - 无法退出while循环

c++ - 如何使用 LLVM 为不同的目标架构编译程序?

python - 使用py2xe在windows中出现pyttsx编译错误

C# Lua 解析器/分析器

parsing - 解析器的性能 : PEG vs LALR(1) or LL(k)