yacc 中 %union 的范围是什么

发布于 2024-10-15 18:52:46 字数 101 浏览 4 评论 0原文

我对 yacc 中的 %union 有点困惑。是否为每个令牌定义了一个唯一的联合,或者是否存在一个全局联合?我正在尝试决定是否需要将联合中的所有内容都作为列表,然后将数据附加到正确的类型。

I'm a little confused by %union in yacc. Is a unique union defined for every single token or is there one global union? I'm trying to decide if I need to make everything in the union a list and just append data to the proper type or not.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

孤单情人 2024-10-22 18:52:46

每个令牌都会获得一个单独的 %union 对象。例如,典型的规则如下:

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

在本例中,$$$1$3 各自代表该类型的一个单独对象您在 %union 语句中定义。通常,您会拥有类似:

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

和:

%type <int_val> value expr

这意味着 valueexpr 规则生成 %union 对象,其中 int_val 成员是有效的。

You get a separate %union object for each token. For example, a typical rule would be something like:

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

In this case, $$, $1 and $3 each represents a separate object of the type you defined in the %union statement. Typically, you'd have something like:

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

and:

%type <int_val> value expr

which would mean that the value and expr rules produce %union objects in which the int_val member is valid.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文