本文介绍了的Flex /野牛:错误恢复析构函数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个逗号分隔的列表下面的文法至少一个项目:
I have the following grammar for a comma-separated list with at least one item:
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);
}
;
不过考虑这个问题:
But consider this:
column_expression error
的 $$ = LinkedList_New();
会泄漏。有没有一种方法,我可以设置当这被弹出堆栈的一个构函数?
The $$ = LinkedList_New();
will leak. Is there a way I can set a destructor function for when this is popped of the stack?
推荐答案
假如你摧毁列表,使用一个名为LinkedList_Del功能中的所有项目,使用的是专门做清理分配的元素北美野牛的%析构函数指令,最终不是因为错误的使用:
Supposing you destroy a list with all items in it using a function called "LinkedList_Del", use Bison's %destructor directive which is made especially for cleaning up allocated elements that end up not used because of error:
%destructor { LinkedList_Del($$); } column_expression
祝你好运!
参考:
这篇关于的Flex /野牛:错误恢复析构函数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!