Flex-Yacc:未定义对'YY_CURRENT_BUFFER';

Flex-Yacc:未定义对'YY_CURRENT_BUFFER';,c,flex-lexer,yacc,C,Flex Lexer,Yacc,我正在使用Flex Yacc制作一个编译器,目前我正在尝试制作一个缓冲系统来帮助我实现for和while循环。我读过Flex手册 ()当我在yacc文件中使用YY_CURRENT_缓冲区并编译它时,我得到 对YY_当前_缓冲区的未定义引用。我如何在我的代码中声明/包括这一点?我搜索了很多,但似乎找不到它。“YY_CURRENT_BUFFER”不是一个变量,而是lexer的一个本地宏(它没有导出到由lex--header file生成的头文件中,它使用静态变量展开为一个表达式)(即lex.yy.c

我正在使用Flex Yacc制作一个编译器,目前我正在尝试制作一个缓冲系统来帮助我实现for和while循环。我读过Flex手册 ()当我在yacc文件中使用YY_CURRENT_缓冲区并编译它时,我得到
对YY_当前_缓冲区的未定义引用
。我如何在我的代码中声明/包括这一点?我搜索了很多,但似乎找不到它。

“YY_CURRENT_BUFFER”不是一个变量,而是lexer的一个本地宏(它没有导出到由
lex--header file
生成的头文件中,它使用静态变量展开为一个表达式)(即lex.yy.c的本地变量,而不是全局变量,无法从其他源文件访问)

您应该将使用“YY_CURRENT_BUFFER”的所有代码包装在lexer(*.l)文件中的函数中,将其定义放在解析器(*.y)文件中包含的头中,并直接使用该函数而不是“YY_CURRENT_BUFFER”。

“YY_CURRENT_BUFFER”不是一个变量,而是lexer的本地宏(它不是在由
lex--header file
生成的头文件中导出的,而是使用静态变量(即lex.yy.c的局部变量,不是全局变量,不能从其他源文件访问)扩展为表达式


您应该将使用“YY_CURRENT_BUFFER”的所有代码包装到lexer(*.l)文件中的函数中,将其定义放入解析器(*.y)文件中的头文件中,并使用该函数而不是“YY_CURRENT_BUFFER”直接执行。

这对实现循环有何帮助?@sepp2k我想读取文件,找出循环代码,将其放入字符串中,然后从中生成一个缓冲区,并在条件为真时反复执行。因此,您的意思是,在第一次解析循环时,您希望生成一个包含解析后的循环的字符串源代码,然后您想将该字符串反馈回lexer,并为循环的每次迭代重新标记和解析代码?这对嵌套循环如何工作?即使您可以使用这种方法,对我来说似乎相当复杂,而不是flex和yacc是如何使用的。我强烈建议只生成一些f在解析器中改为AST或IR的orm。什么是IR?对不起,它是“中间表示”的缩写,例如某种形式的字节码。这对实现循环有何帮助?@sepp2k我想读取文件,找出循环代码,将其放入字符串中,然后从中生成一个缓冲区,并在条件为真时反复执行。因此,您是说,在第一次解析循环时,您希望生成一个包含解析后的循环的源代码,然后你想将该字符串反馈回lexer,并为循环的每次迭代重新标记和解析代码?这对嵌套循环如何工作?即使你能让这种方法工作,对我来说似乎相当复杂,而不是flex和yacc的使用方式。我强烈建议在解析器中生成某种形式的AST或IR。什么是IR?对不起,它是“中间表示”的缩写,例如某种形式的字节码。