c - 为什么 Bison 在第一个标记后期待 $end?

标签 c bison

当我将文件传递给 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/

相关文章:

c - scanf 之后 fgets 不起作用

c++ - 简单 Bison 脚本的段错误

c++ - Flex 和 Bison 忽略函数体

c - 在 C 中运行时解析 float 的标准方法是什么?

c - 为什么bison的结果不显示?

c - 循环中的 opencl 运行时错误 (Clenqueuewritebuffer)

c - 在树中查找特定值

c - 在 autoconf 中探测符号可见性扩展的最佳实践

c - 如何计算long long/int

c++ - 存储当前被 flex 分析的行