我对yacc中的%union感到有些困惑。是为每个令牌定义的唯一联合还是有一个全局联盟?我正在尝试决定是否需要在联合中创建一个列表,只是将数据附加到正确的类型。
答案 0 :(得分:1)
每个令牌都有一个单独的%union
对象。例如,一个典型的规则是:
expr: value '+' value: { $$ = $1 + $3; }
在这种情况下,$$
,$1
和$3
分别代表您在%union
语句中定义的类型的单独对象。通常,你会有类似的东西:
%union {
int int_val;
/* ... */
}
和
%type <int_val> value expr
这意味着value
和expr
规则会生成int_val
成员有效的%union对象。