2014-01-22 140 views
0

的上下文中使用C++參考該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; 
} 

我的問題是:如何能當它匿名這個聯盟中使用以及它是如何使用的?

回答

1

請勿將野牛的%union指令與C/C++語法混淆。

在由bison生成的代碼中,將會有一個C/C++ union,其主體從%union指令中複製而來,但肯定不是匿名的:它的名字是YYSTYPE。但是,您幾乎不需要知道這一點,因爲該類型的唯一暴露變量是0​​。 (內部野牛堆棧也由YYSTYPE類型的元素組成,但它不會暴露給用戶代碼。)

根據野牛手冊所述,有各種其他可能的方法來定義YYSTYPE。例如,您可以創建自己的C/C++ union(或struct)類型,如here所述。但是,這些高級bison功能很少需要。