在yacc中使用union来表示结构

时间:2009-12-27 00:04:36

标签: c struct yacc unions

我对如何指定语法成员的类型感到有点困惑。我想将prog和decls声明为ASTNode。我将使用这些成员添加到列表等等。但yacc无法将它们识别为ASTNode并且我收到类型错误。

这里我的tIdent,tCharConst,tIntConstant有一些类型,但是,如何给我的成员提供ASTNode类型。

%union{
  int ival;
  char cval;
  char *sval;
  struct ASTNode *nval;
}

%token <sval> tIdent
%token <cval> tCharConst
%token <ival> tIntConst

    prog          : decls ;
    decls         : /* empty */
                  | decls decl
                  ;

1 个答案:

答案 0 :(得分:2)

.y文件的最开头,您需要类似

的内容
%{
struct ASTNode { ... };
%}

以声明ASTNode的类型。或者您可以将其放在.h文件中:

%{
#include "astnode.h"
%}
%union { 
  ...
}
%term ...

等等。