我在野牛的 yacc 文件中有这个代码块。这是Flex & Bison书的 flex/bison 代码中的代码。yacc 代码可以从https://github.com/GrooveStomp/Flex-Bison/blob/master/samples/purecalc.y下载
%{
# include "purecalc.lex.h"
# include "purecalc.h"
#define YYLEX_PARAM pp->scaninfo
%}
问题是我有一个编译错误(带有野牛生成文件的循环依赖解析);它们是循环依赖的,因为purecalc.lex.h
依赖于 purecalc.h 文件中的 pcdata,而 purecalc.h 依赖于 yyscan_t 的 purecalc.lex.h。
yyscan_t 在 purecalc.lex.h 中被拒绝:
typedef void* yyscan_t;
pcdata 定义如下:
/* per-parse data */
struct pcdata {
yyscan_t scaninfo; /* scanner context */
struct symbol *symtab; /* symbols for this parse */
struct ast *ast; /* an AST for */
};
我怎样才能打破这个代码依赖?我试图将其复制typedef void* yyscan_t;
到 yacc 源代码中,但复制 typedef 时出现编译错误。