Pharo でも動かせるようにと, AOKILisp と AOKIProlog に手を入れているが,欲をカいてバージョン・アップ作業も同時にやってるんで,なかなか捗らない orz.
構文解析木の階層構造
Squeak での parsing tree は ParseNode
のサブクラス群で構成される. ParseNode
の階層構造は以下のとおり. ( ) 内は名前を持つインスタンス変数.
ProtoObject Object ParseNode (comment pc ) AssignmentNode (variable value ) * BlockArgsNode (temporaries ) BlockNode (arguments statements returns nArgsNode size remoteCopyNode temporaries ) * BraceNode (elements sourceLocations emitNode ) * CascadeNode (receiver messages ) * CommentNode DecompilerConstructor (method instVars nArgs literalValues tempVars ) Encoder (scopeTable nTemps supered requestor class literalStream selectorSet litIndSet litSet sourceRanges globalSourceRanges ) * LeafNode (key code ) LiteralNode * SelectorNode * KeyWordNode VariableNode (name ) * LiteralVariableNode (splNode ) * TempVariableNode (isAnArg hasRefs hasDefs scope ) * MessageNode (receiver selector precedence special arguments sizes equalNode caseErrorNode ) * MessageAsTempNode MessagePartNode TileMessageNode MethodNode (selectorOrFalse precedence arguments block literals primitive encoder temporaries properties sourceText ) * MethodTempsNode (temporaries ) ReturnNode (expr ) *
全メソッドをスキャンしてみると.実際に使われているクラスは * を付けたものだけである.今使ってるのは web イメージにさらに各種外部パッケージをインストールしたものだが,それらから自前の 152 クラス, 3950 メソッドを除いた分から使用頻度を計測してみると,以下のようになる.
ParseNode クラス群の使用頻度
- MessageNode -> 518487
- SelectorNode -> 518083
- TempVariableNode -> 394320
- VariableNode -> 283260
- BlockNode -> 199770
- LiteralNode -> 141428
- ReturnNode -> 94550
- Encoder -> 78976
- MethodNode -> 78976
- AssignmentNode -> 74581
- LiteralVariableNode -> 57158
- CascadeNode -> 10133
- BraceNode -> 3189
BraceNode,意外に使われてない.歴史が浅いせいか (笑).動的に配列を生成してくれる優れものなんだが.
0 件のコメント:
コメントを投稿