Bison 何时释放内存?

Bison 何时释放内存?,bison,flex-lexer,Bison,Flex Lexer,我正在使用Bison和Flex开发lexer/parser组合,我有点担心内存泄漏 语法非常简单,(到目前为止)我已经能够摆脱以下定义: #define YYSTYPE char const * 在Flex中,当我读取字符串时,我为该字符串分配足够的内存,然后将其复制到yylval。据我所知,这是相当标准的做法 然而,我在任何地方都找不到任何文档告诉我何时应该释放yylval中的内存 野牛会自动为我处理吗?我必须在行动结束时这样做吗?或者我应该在什么时候执行此操作?每次计算右侧时,堆栈上的RH

我正在使用Bison和Flex开发lexer/parser组合,我有点担心内存泄漏

语法非常简单,(到目前为止)我已经能够摆脱以下定义:

#define YYSTYPE char const *
在Flex中,当我读取字符串时,我为该字符串分配足够的内存,然后将其复制到
yylval
。据我所知,这是相当标准的做法

然而,我在任何地方都找不到任何文档告诉我何时应该释放yylval中的内存


野牛会自动为我处理吗?我必须在行动结束时这样做吗?或者我应该在什么时候执行此操作?

每次计算右侧时,堆栈上的RHS项(即,
$1
$2
,等等)需要释放或复制到
$

执行缩减操作后,堆栈指针将按RHS上的符号数递减,
$$
将成为最顶端的项,因此堆栈上剩余的任何内容都将丢失或被随后移到堆栈上的移位所破坏


此外,您最好使用包含令牌文本字符串及其整数令牌值的堆栈类型结构。

每次计算右侧时,堆栈上的RHS项(即,
$1
$2
等)都需要重新分配或复制到
$

执行缩减操作后,堆栈指针将按RHS上的符号数递减,
$$
将成为最顶端的项,因此堆栈上剩余的任何内容都将丢失或被随后移到堆栈上的移位所破坏


另外,您最好使用包含令牌文本字符串及其整数令牌值的堆栈类型结构。

不要忘记:
non_terminal:nt1{frag1}nt2{frag2}
将$2作为frag1的结果提供给frag2。我实际上不解析许多(如果有的话)整数-这些都是带引号的字符串。是的,但在内部,解析器将每个标记和非终结符作为一个整数保留在解析堆栈上。lexer(
yylex
)返回一个整数令牌代码,即使每个令牌都有额外的信息(即令牌文本)将$2作为frag1的结果提供给frag2。我实际上不解析许多(如果有的话)整数-这些都是带引号的字符串。是的,但在内部,解析器将每个标记和非终结符作为一个整数保留在解析堆栈上。lexer(
yylex
)返回整数令牌代码,即使每个令牌都有附加信息(即令牌文本)。