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

mih*_*jlv 2 c bison

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

yy_scan_string(string);
yylex();
yyparse(); 
Run Code Online (Sandbox Code Playgroud)

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

Kiz*_*aru 6

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

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

问题是由于你的yylex()调用,它已经错过了一个令牌.