本文介绍了的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 /野牛:错误恢复析构函数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-16 21:04