JCup 中的错误恢复块末尾缺少分号

问题描述

我正在使用 JLex 和 JCUP 为本科项目构建 LR(1) 解析器。我选择了,也许是错误的,尽可能地模仿 C++ 的语法和语义。我已经完成了词法分析和解析,但我在 CUP 中遇到了错误恢复。

你可以认为我的语言的语法是 C++ 的语法,因为我所做的更改在这里不起作用(我认为)。我知道使用以下产品进行错误恢复是很常见的:

Statement ::= error SEMICOLON

但是,使用它,解析器无法从块末尾丢失的分号中恢复(用大括号 { } 包围的代码片段)。事实上,我找不到解析器从中恢复的方法。由于我无法将最后一条指令作为错误获得,因此我尝试至少将整个块作为错误获得。我试过了:

Block ::= LEFTBRACE error RIGHTBRACE

但这给了我一个 Shift-Reduce 冲突。我也试过:

Block ::= error RIGHTBRACE

错误没有解决

你能帮助从这个错误中恢复吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)