• Lemon Parser Generatorが生成したコードは基本的に動的にメモリ確保しない。
  • 構築時/解体時に指定したメモリ確保/解放関数が呼ばれるので、ここをスタックベースのものに置き換えることもできる。
  • ただし、YYSTACKDEPTHを0にした場合は動的なスタック確保にreallocが使われる。
  • しかし、このコードはC++としてはコンパイルできない。

int newSize;
yyStackEntry *pNew;

newSize = p->yystksz*2 + 100;
pNew = realloc(p->yystack, newSize*sizeof(pNew[0]));
  • キャストしなきゃダメ。
  • というわけで、reallocをオーバーロードする。

struct yyStackEntry;
inline yyStackEntry* realloc(yyStackEntry* ptr, size_t size) {
  return static_cast<yyStackEntry*>(::realloc(ptr, size));
}

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

メンバーのみ編集できます