如何摆脱YYSTYPE的重复声明?

时间:2011-04-29 00:01:26

标签: parsing yacc bison lex

以下是相关错误:

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。
  4. 似乎正在发生的事情是:y.tab.h包含YYSTYPE联合的联合声明。这包含在lex.yy.c中,它包含在grammar.y中。但与此同时,grammar.y正在制作自己的联盟​​版本,并且两者发生冲突。

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

1 个答案:

答案 0 :(得分:0)

糟糕。事实证明我没有与野牛一起编译。我的另一个系统有yacc符号链接到bison,所以我不得不更改makefile以使用bison而不是yacc。