Yacc 找不到 YY_CURRENT_BUFFER

mih*_*jlv 3 c lex bison flex-lexer

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

\n\n
yy_scan_string(string);\nyylex();\nyyparse(); \nyy_delete_buffer( YY_CURRENT_BUFFER );\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
 error: \xe2\x80\x98YY_CURRENT_BUFFER\xe2\x80\x99 undeclared (first use in this function)\n
Run Code Online (Sandbox Code Playgroud)\n\n

我也没有得到 YY_BUFFER_STATE,顺便说一句,我从野牛文件(.y)调用它们,所以它们应该可用。\n我不知道为什么它找不到 typedef。我没有在谷歌上的前十几个链接中找到任何内容任何帮助将不胜感激。

\n

Chr*_*odd 5

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

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