对于至少包含一项的逗号分隔列表,我具有以下语法:
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();
将泄漏。当从堆栈中弹出析构函数时,是否可以设置一种方法? 最佳答案
假设您使用一个名为“LinkedList_Del”的函数销毁了其中所有项目的列表,请使用Bison的%destructor指令,该指令专门用于清理由于错误而最终未使用的已分配元素:
%destructor { LinkedList_Del($$); } column_expression
祝好运!
参考:
http://www.gnu.org/software/bison/manual/bison.html#Destructor-Decl
关于c - Flex/Bison:错误恢复析构函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14730804/