Yacc找不到YY_当前_缓冲区
我将在本网站上介绍如何使用flex解析字符串的其他示例:Yacc找不到YY_当前_缓冲区,c,bison,lex,flex-lexer,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)调用它们的,所以它们应该
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)调用它们的,所以它们应该是可用的。
我不知道为什么找不到typedefs。我没有在google上的前十几个链接上找到任何东西,任何帮助都将不胜感激。
YY_CURRENT_BUFFER
和YY_BUFFER_STATE
是由flex定义的,而不是由bison定义的,因此它们在flex生成的lex.YY.c
文件中定义(并使用)。因此,您只能从.l
文件访问它们,而不能从.y
文件访问它们
如果您想在bison语法中访问它们,最简单的方法是将它们的使用封装在
.l
文件第3部分中定义的一个小函数中。然后从.y
文件或任何其他源文件调用该函数。必须包含该头文件…运行yacc会生成一个yy.h文件。@H2CO3我没有从bison生成任何文件yy.h。我将其重新标记为“gnu Flex”,因为我认为它与Adobe/Apache Flex框架无关。@yzernik滚动标记。gnu Flex是“Flex(快速词法分析器)”,Flex是“Flex是在Flash Player或Adobe Air上运行的快速富Internet应用程序开发框架”。我已经将词法分析器上的其他问题重新标记为gnu Flex;但是如果你觉得它们应该分类不同,请告诉我,这样我就不会对事物进行错误的分类。