yacc中%union的范围是什么

时间:2011-02-05 16:01:07

标签: yacc bison

我对yacc中的%union感到有些困惑。是为每个令牌定义的唯一联合还是有一个全局联盟?我正在尝试决定是否需要在联合中创建一个列表,只是将数据附加到正确的类型。

1 个答案:

答案 0 :(得分:1)

每个令牌都有一个单独的%union对象。例如,一个典型的规则是:

expr: value '+' value:     { $$ = $1 + $3; }

在这种情况下,$$$1$3分别代表您在%union语句中定义的类型的单独对象。通常,你会有类似的东西:

%union { 
    int int_val;
    /* ... */
}

%type <int_val> value expr

这意味着valueexpr规则会生成int_val成员有效的%union对象。