abc プロジェクト
21.15. Pass2 関数説明

関数名 Pass2
定義ファイル名pass2.cpp
定義行 56
宣言形式 void Pass2 ( TList * TokenList , TList * ValDataList )
概要 構文解析と変数リストを作成し、変数の型などを設定する。

1)モジュール構造識別(モジュール IDを割り振って、異なるモジュールの区
別)
2)DO , IF , GOTO など 飛び先 (参照先)をセット
・ネスト構造の番号をつける。(Root = 0)
3)変数定義 (REAL*8 ) などの情報から、変数一覧(ValDataList)を作成し
リンクを設定する。(モジュールが異なる変数は、別物とする)
また、変数の型、バイトサイズも保持すること。(一時変数作成の場合に必
要)
4)変数、関数、定数の区別を行う。
戻り値
パラメタ説明 TokenList トークンリスト
ValDataList 変数リスト
機能説明
備考

呼出し元関数一覧表
名称 定義ファイル名 定義行
1 TMainF::FormActivate main.cpp 299

呼出し先関数一覧表
名称 定義ファイル名 定義行
1 Pass2_Line pass2.cpp 104
2 ResetModule pass2.cpp 1291

参照外部変数一覧表
名称 定義ファイル名 定義行
1 Indent pass2.cpp 22
2 ModuleIdx pass2.cpp 20
3 NestLevel pass2.cpp 21

参照先一覧表
名称 種別 定義ファイル名 定義行
1 TToken クラス pass1.h 216

関数論理チャート

        |  +--------------------------------------------------+ 
    56  +--+ void Pass2(TList *TokenList,TList *ValDataList)  | 
    57     | {                                                | 
           +--+-----------------------------------------------+ 
    58        +--- int i,j,sPos;
    59        +--- TToken *Token;
    60        |    
    61        +--- ModuleIdx = 0;
    62        +--- NestLevel = 0;
    63        +--- Indent = 0;
    64        +--- ResetModule();
    65        +--- sPos = 1; // 先頭のtid_nullと最後の tid_nullはSkip
              |  +--------------------------------------------+ 
    66        +--+ for(i = 1 ; i < TokenList->Count-1 ; i++){ | 
              |  +--+-----------------------------------------+ 
    67        |     +--- Token = (TToken *)TokenList->Items[i];
              |     |  +------------------------------------------------------------+ 
    68        |     +--+ if(Token->TokId != tid_LineEnd){ // 1行単位で解析を行う。 | 
              |     |  +--+---------------------------------------------------------+ 
              |     |     |  +------------+ 
    69        |     |     +--+ continue;  | 
              |     |     |  +------------+ 
              |     |   +-+---+ 
    70        |     |   |  }  | 
              |     |   +-----+ 
              |     |  +------------------------------------------------------------------------------+ 
    71        |     +--+ for(j = sPos ; j <= i ; j++){ // 行単位に現在の ModuleIdx,NestLevelをセット  | 
              |     |  +--+---------------------------------------------------------------------------+ 
    72        |     |     +--- Token = (TToken *)TokenList->Items[j];
    73        |     |     +--- Token->ModuleIdx = ModuleIdx;
    74        |     |     +--- Token->NestLevel = NestLevel;
    75        |     |     +--- Token->Indent = Indent;
              |     |   +-+---+ 
    76        |     |   |  }  | 
              |     |   +-----+ 
    77        |     +--- Pass2_Line(TokenList,sPos,i,ValDataList);
    78        |     +--- sPos = i+1;
              |   +-+---+ 
    79        |   |  }  | 
              |   +-----+ 
            +-+---+ 
    80      |  }  | 
            +-----+