语法错误,意外的标记,期望文件结束

syntax error, unexpected token, expecting end of file

本文关键字:期望 文件 结束 错误 意外 语法      更新时间:2023-10-16

当我运行我的解析器文件(编译Flex/Bison文件后获得的二进制文件)时,我得到以下错误。error: syntax error, unexpected TKN_PRIMARY, expecting end of file

以下是flex代码中定义的规则:

<PRIMARY_MME_STATE>{number} {
 lexVal = YYText();
 std::cout<<"PRIMARY MME -->  "<<lexVal<<std::endl;
 yylval->strVal = new std::string(lexVal);
 return token::TKN_PRIMARYMME;
 }

我的理解是,由于TKN_PRIMARY的值为零(这是为END %token END 0"文件结束"定义的值),而不是返回TKN_PRIMARY,它期望返回令牌END。请评论我的理解是否正确。以及如何解决这个问题。

如果TKN_PRIMARYEND具有相同的值(或者,通常,如果任何两个不同的令牌具有相同的值),则bison解析器将以不可预测的方式工作。

引用野牛手册:

然而,通常最好是让Bison选择的数字代码所有令牌类型。Bison会自动选择不需要的代码与其他字符冲突或与正常字符冲突

我认为这绝对是处理这个问题的最好方法。