如果我在Bison .y文件中设置断点,有没有办法可以检查该断点处的$$伪变量的内容?
答案 0 :(得分:6)
$$是语义值堆栈的顶部。解释可能有点困难。如果你真的需要,堆栈指针可能被称为yyssp,堆栈可能被称为yyvsa,所以像yyvsa [yyssp]这样的东西可能会给你你想要的东西,这取决于你正在使用的野牛的版本。查看生成的.tab.c代码。
答案 1 :(得分:3)
Bison将堆栈保存为动态分配的yyparse()
中的局部变量。
解决临时调试问题的最简单方法可能是修补y.tab.c
,以便行*++yyvsp = yylval
也删除全局中的副本。您可能还想破解YYPOPSTACK()
做同样的事情。
答案 2 :(得分:0)
我使用yylval
重新定义了%union
的类型:
%union {
int int_val;
double double_val;
}
我得到的是yyval.int_val
或yyval.double_val
,具体取决于$$
的类型。
但正如Richard Pennington所说,最好的方法是查看生成的.tab.c
代码。