Связывание не терминалов для исправления - PullRequest
0 голосов
/ 08 октября 2011
idlist  : idlist ',' ID {
                         $$.str=$3.str;
                         $$.ptr=(idtype*)&$1;
                        }
        | ID            {
                         $$.str=$1.str;
                         $$.ptr=NULL;
                        }

idlist здесь имеет тип idtype.Я новичок в Яак.Я делаю что-то глупое, потому что мой код перебирает один идентификатор.когда я использую это на один уровень вверх.

Так что здесь грамматика имеет тип после идентификатора.Я мог бы использовать стек для этого, но я подумал, что это мило.

1 Ответ

1 голос
/ 09 октября 2011

Проблема в том, что вы берете адрес $1, который является локальным временным, который существует только для этого действия правила.Таким образом, после того, как действие завершается, оно уходит, оставляя $$.ptr висящим и указывая на память, которая будет использоваться для чего-то другого.

...