1
我有一個靈活的野牛應用程序。對於我的一些令牌,我使用strdup從flex複製了yytext。除非出現意外令牌的錯誤,否則此功能很好。彎曲/野牛修復內存泄漏與意外的令牌
簡單的例子
flex.l:
...
[a-zA-Z0-9]+ { lval.string = strdup(yytext); return IDENT };
[\{\}] { return yytext[0] };
...
和
parse.y
...
%destructor { free($$); } IDENT
%destructor { free($$->name); free($$->type); free($$); } tag
...
tag: IDENT '{' IDENT '}'
{
struct tag *mytag = malloc(sizeof(struct tag));
mytag->name = $1;
mytag->type = $3;
$<tag>$ = mytag;
}
...
現在假設我把它輸入:
blah blah blah
詞法分析器將發送了第一個IDENT令牌,該令牌被壓入堆棧。在第一個令牌期待一個括號令牌之後,而是獲得另一個IDENT令牌。這是一個語法錯誤。第二個(意外的)將在第一個 IDENT令牌上調用析構函數,但而不是。我一直無法找到破壞意外令牌的方法。有誰知道我應該怎麼做?