运行我的Parser文件时遇到以下错误(编译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%令牌END 0“文件末尾”定义的值)而不是返回TKN_PRIMARY,而是期望返回令牌END。如果我的理解是正确的,请评论。以及如何解决这个问题。
答案 0 :(得分:1)
如果TKN_PRIMARY
和END
具有相同的值(或者,通常,如果任何两个不同的标记具有相同的值),则bison解析器将以不可预测的方式执行。
引用bison manual:
然而,通常最好让Bison选择数字代码 所有令牌类型。野牛会自动选择没有的代码 相互冲突或与正常人物发生冲突。
我认为这绝对是解决问题的最佳方式。