2

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

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

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

4

1 回答 1

6

您错误地使用了 Bison。使用 Bison 时,您只需调用 yyparse()。你不调用 yylex()——当它需要一个令牌时,yyparse() 将调用该函数。

您正在做的是将字符串设置为输入,调用 yylex 找到一个标记并推进输入流。然后调用 yyparse()。这个 yyparse() 调用期望在从当前点(在 yylex() 抓取的第一个标记之后)到输入结尾的输入中找到一些东西,这会简化为语法中的一个句子。

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

于 2012-10-08T12:01:45.667 回答