语法错误,意外令牌,期待文件结束

时间:2013-05-21 19:03:55

标签: c++ bison yacc lex flex-lexer

运行我的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。如果我的理解是正确的,请评论。以及如何解决这个问题。

1 个答案:

答案 0 :(得分:1)

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

引用bison manual

  

然而,通常最好让Bison选择数字代码   所有令牌类型。野牛会自动选择没有的代码   相互冲突或与正常人物发生冲突。

我认为这绝对是解决问题的最佳方式。