我正在关注本网站上关于如何使用 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_BUFFER
和 YY_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/