Flex / Bison:错误恢复析构函数?

对于包含至少一个项目的逗号分隔列表,我有以下语法:

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