ぐる式 (貳) より引っ越し作業中.未完.

2010年1月31日日曜日

Squeak の構文解析木

Pharo でも動かせるようにと, AOKILispAOKIProlog に手を入れているが,欲をカいてバージョン・アップ作業も同時にやってるんで,なかなか捗らない 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 クラス群の使用頻度

  1. MessageNode -> 518487
  2. SelectorNode -> 518083
  3. TempVariableNode -> 394320
  4. VariableNode -> 283260
  5. BlockNode -> 199770
  6. LiteralNode -> 141428
  7. ReturnNode -> 94550
  8. Encoder -> 78976
  9. MethodNode -> 78976
  10. AssignmentNode -> 74581
  11. LiteralVariableNode -> 57158
  12. CascadeNode -> 10133
  13. BraceNode -> 3189

BraceNode,意外に使われてない.歴史が浅いせいか (笑).動的に配列を生成してくれる優れものなんだが.

0 件のコメント:

コメントを投稿