链接非终端以进行反向修补

时间:2011-10-08 18:15:49

标签: bison

idlist  : idlist ',' ID {
                         $$.str=$3.str;
                         $$.ptr=(idtype*)&$1;
                        }
        | ID            {
                         $$.str=$1.str;
                         $$.ptr=NULL;
                        }

idlist在这里是idtype类型。我是Yaac的新手。我做了一些愚蠢的事情,因为我的代码循环通过一个id。当我在一个级别使用它时。

所以这里的语法在ID之后有类型。我可以使用堆栈来做到这一点,但我认为这很可爱。

1 个答案:

答案 0 :(得分:1)

问题是您正在使用$1的地址,这是仅存在于该规则操作的本地临时地址。因此,在操作完成后,它会消失,留下$$.ptr悬空,并指向将被重用于其他内容的内存。