当我将文件传递给bison(通常的方式)时,它工作正常,它解析文件并检查语法。但是,当我传递相同的字符串:
yy_scan_string(string);
yylex();
yyparse();
它在第一个令牌后崩溃,它说它期待$end
。我应该以某种方式重置某些东西这里的例子没有说什么。
答案 0 :(得分:6)
您正在错误地使用Bison。使用Bison时,只调用yyparse()。你不调用yylex() - 只要需要一个令牌,yyparse()就会调用该函数。
您正在做的是将字符串设置为输入,调用yylex找到令牌并推进输入流。然后你调用yyparse()。这个yyparse()调用期望在当前点(在yylex()抓取的第一个标记之后)到输入结尾处找到输入的内容,这会减少到语法中的句子。
问题是因为你的yylex()调用它已经错过了一个令牌。