为什么野牛在第一个令牌后期待$ end?

时间:2012-10-06 01:17:44

标签: c bison

当我将文件传递给bison(通常的方式)时,它工作正常,它解析文件并检查语法。但是,当我传递相同的字符串:

yy_scan_string(string);
yylex();
yyparse(); 

它在第一个令牌后崩溃,它说它期待$end。我应该以某种方式重置某些东西这里的例子没有说什么。

1 个答案:

答案 0 :(得分:6)

您正在错误地使用Bison。使用Bison时,只调用yyparse()。你不调用yylex() - 只要需要一个令牌,yyparse()就会调用该函数。

您正在做的是将字符串设置为输入,调用yylex找到令牌并推进输入流。然后你调用yyparse()。这个yyparse()调用期望在当前点(在yylex()抓取的第一个标记之后)到输入结尾处找到输入的内容,这会减少到语法中的句子。

问题是因为你的yylex()调用它已经错过了一个令牌。