我对如何指定语法成员的类型感到有点困惑。我想将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
;
答案 0 :(得分:2)
在.y
文件的最开头,您需要类似
%{
struct ASTNode { ... };
%}
以声明ASTNode
的类型。或者您可以将其放在.h
文件中:
%{
#include "astnode.h"
%}
%union {
...
}
%term ...
等等。