当我将文件传递给 bison(通常的方式)时,它工作正常,它会解析文件并检查语法。但是,当我传递相同的字符串时:
yy_scan_string(string);
yylex();
yyparse();
它在第一个标记后崩溃,它说它期待 $end
。我应该以某种方式重置某些东西吗?这里的例子什么也没说。
最佳答案
您错误地使用了 Bison。使用 Bison 时,您只需调用 yyparse()。您不调用 yylex()——该函数将在需要 token 时由 yyparse() 调用。
您正在做的是将字符串设置为输入,调用 yylex 以查找标记并推进输入流。然后调用 yyparse()。此 yyparse() 调用期望在输入中找到从当前点(在 yylex() 获取的第一个标记之后)到输入末尾的内容,这将简化为语法中的一个句子。
问题是由于您的 yylex() 调用,它已经错过了一个标记。
关于c - 为什么 Bison 在第一个标记后期待 $end?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12755874/