gl5_progのメモ

自分のためのメモとかまとめとか

ANTLR3 C Runtimeメモ

ANTLR C Runtime 3.4に関するメモ。

ANTLR3_BASE_TREE

ASTノード。この構造体はクラスで言うところの抽象クラスであり、実装するクラスが必要。共通メンバ変数と仮想関数的な役割の関数ポインタを持つ。

メンバ変数

名前 備考
void* super 基底クラスへのポインタ。この基底クラスはANTLR3_COMMON_TREEへキャストできるようになっていなければならない。
void* u 利用者が自由に使える汎用ポインタ。ANTLRは使用しない。
pANTLR3_VECTOR children 子リスト
ANTLR3_MARKER savedIndex ツリー走査中に使う子インデックス
pANTLR3_STRING_FACTORY strFactory toStringのための文字列ファクトリ?

メンバ関数

戻り値 名前 引数 備考
pANTLR3_COMMON_TOKEN (*getToken) (struct ANTLR3_BASE_TREE_struct * tree);
void (*addChild) (struct ANTLR3_BASE_TREE_struct * tree, void * child);
void (*addChildren) (struct ANTLR3_BASE_TREE_struct * tree, pANTLR3_LIST kids);
void (*createChildrenList) (struct ANTLR3_BASE_TREE_struct * tree);
void* (*deleteChild) (struct ANTLR3_BASE_TREE_struct * tree, ANTLR3_UINT32 i);
void (*replaceChildren) (struct ANTLR3_BASE_TREE_struct * parent, ANTLR3_INT32 startChildIndex, ANTLR3_INT32 stopChildIndex, struct ANTLR3_BASE_TREE_struct * t);
void* (*dupNode) (struct ANTLR3_BASE_TREE_struct * dupNode);
void* (*dupTree) (struct ANTLR3_BASE_TREE_struct * tree);
ANTLR3_UINT32 (*getCharPositionInLine) (struct ANTLR3_BASE_TREE_struct * tree);
void* (*getChild) (struct ANTLR3_BASE_TREE_struct * tree, ANTLR3_UINT32 i);
void (*setChildIndex) (struct ANTLR3_BASE_TREE_struct * tree, ANTLR3_INT32 );
ANTLR3_INT32 (*getChildIndex) (struct ANTLR3_BASE_TREE_struct * tree );
ANTLR3_UINT32 (*getChildCount) (struct ANTLR3_BASE_TREE_struct * tree);
struct ANTLR3_BASE_TREE_struct * (*getParent) (struct ANTLR3_BASE_TREE_struct * tree);
void (*setParent) (struct ANTLR3_BASE_TREE_struct * tree, struct ANTLR3_BASE_TREE_struct * parent);
ANTLR3_UINT32 (*getType) (struct ANTLR3_BASE_TREE_struct * tree);
void* (*getFirstChildWithType) (struct ANTLR3_BASE_TREE_struct * tree, ANTLR3_UINT32 type);
ANTLR3_UINT32 (*getLine) (struct ANTLR3_BASE_TREE_struct * tree);
pANTLR3_STRING (*getText) (struct ANTLR3_BASE_TREE_struct * tree);
ANTLR3_BOOLEAN (*isNilNode) (struct ANTLR3_BASE_TREE_struct * tree);
void (*setChild) (struct ANTLR3_BASE_TREE_struct * tree, ANTLR3_UINT32 i, void * child);
pANTLR3_STRING (*toStringTree) (struct ANTLR3_BASE_TREE_struct * tree);
pANTLR3_STRING (*toString) (struct ANTLR3_BASE_TREE_struct * tree);
void (*freshenPACIndexesAll) (struct ANTLR3_BASE_TREE_struct * tree);
void (*freshenPACIndexes) (struct ANTLR3_BASE_TREE_struct * tree, ANTLR3_UINT32 offset);
void (*reuse) (struct ANTLR3_BASE_TREE_struct * tree);
void (*free) (struct ANTLR3_BASE_TREE_struct * tree);

ANTLR3_COMMON_TREE

ANTLR3_BASE_TREEを継承している風のASTノード。 ANTLRのGrammer OptionでASTLabelType=CommonTreeを指定すると、これが使われると思われる。

メンバ変数

名前 備考
void* super ANTLRは使わない。
ANTLR3_MARKER startIndex この木を包む開始トークンの位置
ANTLR3_MARKER endIndex この木を包む終了トークンの位置
pANTLR3_COMMON_TOKEN token この木を表すトークン?
pANTLR3_COMMON_TREE parent 親ノード
ANTLR3_INT32 childIndex 子リストの中でこの特有ノードは何番か
pANTLR3_ARBORETUM factory 同じトークンを生成する木ファクトリー?
ANTLR3_BASE_TREE baseTree 包含されたBaseTree構造体(ポインタではない)。泥臭いノード管理を行う。本体固有な関数を追加した。構造体の先頭にBaseTreeポインタを持っていれば、CommonTreeをさらに抽象化することも可能である。

メンバ関数

戻り値 名前 引数 備考

ANTLR3_MARKER

pANTLR3_COMMON_TOKEN

トークン。