如何摆脱YYSTYPE的重复声明?

问题描述:

下面是相关错误:如何摆脱YYSTYPE的重复声明?

grammar.y:72: error: conflicting declaration ‘typedef union YYSTYPE YYSTYPE’ 
y.tab.h:83: error: ‘YYSTYPE’ has a previous declaration as ‘typedef union YYSTYPE YYSTYPE’ 
make: *** [y.tab.o] Error 1 

我使用Flex和byacc在一起,产生一个翻译。我的版本有这样的结构:

  1. 从grammar.y文件中创建y.tab.h。
  2. 在tokens.lex文件中包含y.tab.h,并编译生成lex.yy.c.
  3. 将lex.yy.c包含回语法文件中。这样,我们可以看到yylex。

似乎正在发生的事情是这样的:y.tab.h包含YYSTYPE联合的联合声明。这包含在lex.yy.c中,它被grammar.y包含。但同时,grammar.y正在制作它自己的联盟​​版本,以及两个冲突。

这不是标准方法吗?有什么我需要改变,使其正确构建?

糟糕。原来我并没有编译野牛。我的其他系统有yacc符号链接到野牛,所以我不得不将makefile改为使用bison而不是yacc。

+1

我有同样的问题,现在修好了! – tlehman 2015-01-22 16:22:48