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