参考此blog post
有一个联盟定义如下:
%union {
Node *node;
NBlock *block;
NExpression *expr;
NStatement *stmt;
NIdentifier *ident;
NVariableDeclaration *var_decl;
std::vector<NVariableDeclaration*> *varvec;
std::vector<NExpression*> *exprvec;
std::string *string;
int token;
}
我的问题是:当匿名时,如何使用此联盟以及它是如何实际使用的?
答案 0 :(得分:1)
不要将bison的%union
指令与C / C ++语法混淆。
在bison生成的代码中,会有一个C / C ++ union
,它的主体是从%union
指令复制的,但它肯定不是匿名的:它的名字是{{1} }。但是,您几乎不需要知道,因为该类型的唯一公开变量是YYSTYPE
。 (内部野牛堆栈也由yylval
类型的元素组成,但不会暴露给用户代码。)
如野牛手册所述,还有其他各种可能的方法来定义YYSTYPE
。例如,您可以创建自己的C / C ++ YYSTYPE
(或union
)类型,如here所述。但是,很少需要这些高级struct
功能。