You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

yacc/bison栈元素默认数据类型是什么?$$、$1等符号类型咨询

Yacc/Bison 中$$/$1/$2符号的对应数据类型说明

Yacc/Bison 中$$、$n这类语义值引用的实际类型,由语义栈的类型定义决定,规则如下:

  • 未做任何自定义类型声明时,所有语义栈元素的默认类型为C语言int,对应所有$$、$n的类型都是int
  • 如果你通过%union指令自定义了语义值联合,需要为每个文法符号(终结符/非终结符)绑定联合中的成员类型,$$、$n的类型就等于其所属文法符号绑定的联合成员类型
    举个实际配置示例:
    第一步声明语义值联合:
    %union {
      int num_int;
      char* str_ptr;
      double num_float;
    }
    
    第二步为不同文法符号绑定对应联合成员:
    %token <num_int> INT_LITERAL
    %token <str_ptr> STR_LITERAL
    %type <num_float> calc_expr
    
    对应规则中的类型映射:
    • 终结符INT_LITERAL对应的$n类型为int
    • 终结符STR_LITERAL对应的$n类型为char*
    • 非终结符calc_expr对应的$$和$n类型为double
  • 特殊场景下你可以手动指定要访问的联合成员,语法为$<成员名>$、$<成员名>n,比如$<str_ptr>2就代表取第二个栈元素的str_ptr成员,类型为char*,无需提前给符号绑定类型

Bison生成代码阶段会自动把$$、$n替换为语义栈对应位置的元素访问语句,无需开发者手动处理栈偏移计算。

内容的提问来源于stack exchange,提问作者Pratik Bedre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 18:06:09