我想同时使用 Flex 和 Bison。我已经在我将在词法分析器中使用的野牛定义文件中声明了一个联合。Bison 生成一个包含联合声明的 .tab.h 文件(见下文)。我在词法分析器定义中包含了这个 .tab.h 文件,但是词法分析器操作:
yylval.stringptr = yytext;
导致编译器错误:
lexer.l: In function ‘yylex’:
lexer.l:190: error: request for member ‘stringptr’ in something not a structure or union
这是 .tab.h 文件的片段:
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
typedef union YYSTYPE
{
/* Line 1676 of yacc.c */
#line 9 "parser.y"
char * s;
char * stringptr;
double d;
int i;
/* Line 1676 of yacc.c */
#line 126 "parser.tab.h"
} YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
#endif
extern YYSTYPE yylval;
为什么 yylval 不被识别为结构或联合?我应该如何纠正问题?
PS:我用 --bison-bridge 调用了 Flex