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