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

最佳答案

.y文件的开头,您需要以下内容

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


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

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


等等。

08-15 22:25