Akym sposobom najlepsie reprezentovat uzly v AST?
Momentalne pouzivam nieco taketo:
class Root;
class Node{
public:
enum TypeId{/*...*/}; //Dvolezite na implementaciu rychleho dynamic_castu (na sposob llvm::isa a llvm::dyn_cast)
private:
const TypeId TyId;
private:
Node* parent;
Node* prev_sibling;
Node* next_sibling;
Node* first_child;
Node* last_child;
public:
Root& root; //koren stromu obsahuje rozne globalne data (globalne z hladiska mojho jazyka, nie c++)
/*
...
*/
};
class Root : public Node{/*...*/};
//...
Takychto nodov mam v strome stovky/tisice a kazdy uzol zabera minimalne 64B co sa my zda strasne vela. Je daka uspornejsia forma ako reprezentovat uzly stromu?