野牛代码中@的含义是什么

what is the meaning of @ in bison code

我正在阅读一些遗留的野牛代码,它有如下规则:

function_decl: name body function_end
     { if( != ->id) {
           yyerror(@3, "error: function name does not match end label");
       }
     }
;

我了解到$i 是指规则中每个标记返回的值。但是@i 代表什么?我尝试用谷歌搜索它,但没有得到任何相关的结果。

@n是符号$n对应的"location"。在 bison 语法中使用任何 @ 引用会自动启用位置,但生成信息仍然是扫描器的责任(在全局变量 yylloc 中)。

位置是代表终端或非终端的开始和结束的位置范围。默认情况下,它保存在具有四个字段的 struct 中:first_linefirst_columnlast_linelast_column

非终端的位置对象由 bison 解析器自动创建;默认情况下,位置范围从第一个符号的开始延伸到最后一个符号的结尾。

有关详细信息,请参阅 bison manual