对于包含至少一个项目的逗号分隔列表,我有以下语法:
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();
会泄漏。有没有办法可以在弹出堆栈时设置析构函数?
答案 0 :(得分:1)
假设您使用名为“LinkedList_Del”的函数销毁其中包含所有项目的列表,请使用Bison的%destructor指令,该指令专门用于清除由于错误而最终未使用的已分配元素:
%destructor { LinkedList_Del($$); } column_expression
祝你好运!
参考: http://www.gnu.org/software/bison/manual/bison.html#Destructor-Decl