2

如果我在 Bison .y 文件中设置断点,有没有办法可以在该断点检查 $$ 伪变量的内容?

4

3 回答 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

我重新定义了yylvalwith的类型%union

%union {
  int int_val;
  double double_val;
}

我得到的是yyval.int_val或者yyval.double_val取决于$$.

但正如 Richard Pennington 所说,最好的方法是查看生成的.tab.c代码。

于 2015-07-08T17:15:08.543 回答