我在野牛的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
%}
問題上下載的是,我有一個編譯錯誤(Circular dependency resolution with bison generated file);它們是循環依賴的,因爲purecalc.lex.h
取決於在purecalc.h文件中的pcdata,而purecalc.h依賴於對yyscan_t的purecalc.lex.h。
yyscan_t是defiend在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時出現編譯錯誤。