1

簡単にしようと思います。

現在、GNU Bisonを使用してインタープリターツリーを構築しています。インタープリターツリーは、独自の形式で保存され、サーバーによって読み込まれます。そのため、Bisonコード内で多くの動的割り当てを使用します。問題は、最近、Bisonで構文エラーが発生した場合、解析中にツリーの一部がすでに割り当てられているため、多くのメモリリークが発生することを発見したことです。いくつかの本を読んで、「エラー回復」と%destructorについて少し見つけました。最初のものは正しい方法のようですが、%destructorの使用はまだ私にはそれほど明確ではありませんでした。

したがって、何らかの理由でBisonが再同期できない場合、作成されたすべてのトークン/シンボルを削除するために%destructorが呼び出されることを意味しますか?

4

1 に答える 1

1

この質問はの複製です:

BISON で %destructor が呼び出されるのはいつですか?

実際、私の見解では、 %destructor ディレクティブはほとんど役に立ちません: YYSTYPE を再定義すると、正確に必要なもので代替 C++ クラス/共用体を指定できます

class AToken
{
   char     *text;
 public:
   AToken() : text(0) {}
   ~AToken() { delete [] text; }
   ...
};

#define YYSTYPE AToken
于 2012-06-12T07:29:13.653 に答える