c - Yacc 找不到 YY_CURRENT_BUFFER

标签 c bison lex flex-lexer

我正在关注本网站上关于如何使用 flex 解析字符串的其他示例:

yy_scan_string(string);
yylex();
yyparse(); 
yy_delete_buffer( YY_CURRENT_BUFFER );

第 4 行给出了它所说的问题

 error: ‘YY_CURRENT_BUFFER’ undeclared (first use in this function)

我也没有得到 YY_BUFFER_STATE,顺便说一句,我是从 bison 文件 (.y) 调用它们的,所以它们应该可用。 我不确定为什么找不到 typedef。我在 google 的前十几个链接上没有想出任何东西任何帮助将不胜感激。

最佳答案

YY_CURRENT_BUFFERYY_BUFFER_STATE 由 flex 而不是 bison 定义,因此它们在 lex.yy.c 中定义(和使用) > 由 flex 生成的文件。因此,您只能从 .l 文件访问它们,而不能从 .y 文件访问它们。

如果您想在 bison 语法中访问它们,最简单的方法是将它们的使用封装在您在 .l 文件的第 3 部分中定义的一个小函数中。然后从 .y 文件或任何其他源文件中调用该函数。

关于c - Yacc 找不到 YY_CURRENT_BUFFER,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12324624/

相关文章:

c - 运行 lex 和 yacc 时出现语法错误

ubuntu 的 C 程序解析器?

c - 如何从 DHCP 数据包中提取客户端数据?

c++ - 如何解决 YACC 中的 Shift/Reduce 冲突

python - 在 Perl 或 Python 中模拟类似 lex 的功能

parsing - 我应该如何在 yacc/bison 和 lex 中制定递归规则?

我可以在 C 中使用类型转换来获取指向地址的指针的内存大小吗?

c++ - 在 C++ 中将 memset 设置为 INT_MAX

c - 尝试将GNU GMP库中的类型用作Bison的yylval类型时出错

c++ - 为什么我们在解析器文件中定义 union 时使用复杂类的指针?