我无法让我的 CUP 解析器解析 EOF 令牌。我在文档中读到,在我的 Jflex 代码中使用该%cup
标志意味着存在如下内容:
%eofval{
return new java_cup.runtime.Symbol(<CUPSYM>.EOF);
%eofval}
%eofclose
这一切都很好,但是当我在我的语法(CUP 文件)中尝试以下第一条规则时:
program ::= program declaration EOF
| /* Empty */
;
我收到 CUP 未声明 EOF 的错误消息。
Error : java_cup.runtime.Symbol "EOF" has not been declared
好的,所以我将以下内容添加到我的 CUP 文件中:
terminal EOF;
不,因为 CUP 告诉我:
Fatal : JavaCUP Internal Error Detected: Duplicate terminal (EOF) created
enter code here
但是,在没有定义终端 EOF 的情况下,我查看了sym.java
Cup 生成的类,我发现:
public static final int EOF = 0;
所以我很不知道如何解决这个问题。两者的文档在这个问题上真的很模糊。
编辑:我想解析 EOF 令牌的主要原因是因为我想最后打印出我的符号表和其他用于调试目的的东西。