0

我对如何指定我的语法成员的类型有点困惑。我想将 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
                  ;
4

1 回答 1

2

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

%{
struct ASTNode { ... };
%}

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

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

等等。

于 2009-12-27T00:10:43.600 回答