3

少なくとも1つの項目を含むコンマ区切りリストの文法は次のとおりです。

column_expression_list:
    column_expression {
        $$ = LinkedList_New();
        LinkedListItem *item = LinkedListItem_New($1);
        LinkedList_add($$, item);
    }
    |
    column_expression_list T_COMMA column_expression {
        LinkedListItem *item = LinkedListItem_New($3);
        LinkedList_add($1, item);
    }
;

しかし、これを考慮してください:

column_expression error

$$ = LinkedList_New();漏れます。これがスタックからポップされたときにデストラクタ関数を設定する方法はありますか?

4

1 に答える 1

2

「LinkedList_Del」という関数を使用してすべてのアイテムを含むリストを破棄するとします。これは、エラーのために使用されなくなった割り当て済み要素をクリーンアップするために特に作成されたBisonの%destructorディレクティブを使用します。

%destructor { LinkedList_Del($$); } column_expression

幸運を!

参照: http ://www.gnu.org/software/bison/manual/bison.html#Destructor-Decl

于 2013-02-06T14:36:07.757 に答える