abc プロジェクト
21.1. AddDataDef 関数説明

関数名 AddDataDef
定義ファイル名pass2.cpp
定義行 533
宣言形式 void AddDataDef ( TList * TokenList , int sPos , int ePos , TList * ValDataList )
概要 INTEGERやREALなどのデータ宣言の処理を行ない、変数リストに変数と型を追加す
る。
戻り値 なし
パラメタ説明 TokenList 処理するトークンリスト
sPos TokenList上での開始位置
ePos TokenList上での終了位置
ValDataList 変数データリスト
機能説明 INTEGERやREALなどのデータ宣言の処理を行ない、変数リストに変数と型を追加す
る。
ValDataには、どのモジュールでの宣言かが、ModuleIdxから設定される。
PARAMETERを含む宣言の場合には、値の計算も行う。
変数には、ModuleIdxも保持して、ModuleIdxが異なる場合は別変数とする。
パラメータ以外の定数での代入文などは、変数として扱う。(分岐,COMMONなどが
ある)
備考

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

呼出し先関数一覧表
名称 定義ファイル名 定義行
1 Eval pass2.cpp 922
2 Add

3 AnsiCompareText

4 memcpy

参照外部変数一覧表
名称 定義ファイル名 定義行
1 EvalConstF pass2.cpp 24
2 ImplType pass2.cpp 23
3 ModuleIdx pass2.cpp 20

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

関数論理チャート

        |  +------------------------------------------------------------------------+ 
   533  +--+ void AddDataDef(TList *TokenList,int sPos,int ePos,TList *ValDataList) | 
   534     | {                                                                      | 
           +--+---------------------------------------------------------------------+ 
   535        +--- int i,j;
   536        +--- TToken *Token;
   537        +--- int TokId;
   538        +--- AnsiString TokStr;
   539        +--- bool IntF = false;
   540        +--- bool RealF = false;
   541        +--- bool CharF = false;
   542        +--- bool LogicF = false;
   543        +--- bool ComplexF = false;
   544        +--- bool ParamaterF = false;
   545        +--- bool DimensionF = false;
   546        +--- int UseTokLen;
   547        +--- double dData;
   548        +--- int ArrayLevel = 0;
   549        +--- int ArrayCount[100];
   550        +--- int ArrayStart[100];
   551        +--- int DimAttr_ArrayLevel = 0;     // Dimension属性でのArrayLevel(DimensionF=true)
   552        +--- int DimAttr_ArrayCount[100];
   553        +--- int DimAttr_ArrayStart[100];
   554        +--- int DataLength = 0;
   555        +--- bool ParamValF;
   556        +--- double ParamData;
   557        +--- AnsiString ValName;
   558        +--- int DefPos;
   559        +--- int DefPosS,DefPosE;
   560        +--- int ArrayDefPosS,ArrayDefPosE;
   561        |    
   562        +--- ArrayDefPosS = ArrayDefPosE = -1;
   563        |    
   564        +--- //
   565        |    // 宣言部分の処理  
   566        |    //                 
   567        +--- DefPosS = sPos;
              |  +----------------------------------+ 
   568        +--+ for(i = sPos ; i <= ePos ; i++){ | 
              |  +--+-------------------------------+ 
   569        |     +--- Token = (TToken *)TokenList->Items[i];
   570        |     +--- TokId = Token->TokId;
   571        |     +--- TokStr = Token->Str;
   572        |     |    
              |     |  +----------------+ 
   573        |     +--+ switch(TokId){ | 
              |     |  +--+-------------+ 
              |     |     +---------------------+ 
   574        |     |     |  case tid_INTEGER:  | 
              |     |     +---------------------+ 
   575        |     |     +--- IntF = true;
              |     |     |  +--------+ 
   576        |     |     +--+ break; | 
              |     |     |  +--------+ 
              |     |     +-----------------+ 
   577        |     |     |  case tid_REAL: | 
              |     |     +-----------------+ 
   578        |     |     +--- RealF = true;
              |     |     |  +--------+ 
   579        |     |     +--+ break; | 
              |     |     |  +--------+ 
              |     |     +-----------------------------+ 
   580        |     |     |  case tid_DOUBLEPRECISION:  | 
              |     |     +-----------------------------+ 
   581        |     |     +--- RealF = true;
              |     |     |  +--------+ 
   582        |     |     +--+ break; | 
              |     |     |  +--------+ 
              |     |     +-----------------------+ 
   583        |     |     |  case tid_CHARACTER:  | 
              |     |     +-----------------------+ 
   584        |     |     +--- CharF = true;
              |     |     |  +--------+ 
   585        |     |     +--+ break; | 
              |     |     |  +--------+ 
              |     |     +---------------------+ 
   586        |     |     |  case tid_LOGICAL:  | 
              |     |     +---------------------+ 
   587        |     |     +--- LogicF = true;
              |     |     |  +--------+ 
   588        |     |     +--+ break; | 
              |     |     |  +--------+ 
              |     |     +---------------------+ 
   589        |     |     |  case tid_COMPLEX:  | 
              |     |     +---------------------+ 
   590        |     |     +--- ComplexF = true;
              |     |     |  +--------+ 
   591        |     |     +--+ break; | 
              |     |     |  +--------+ 
              |     |     +-----------------------+ 
   592        |     |     |  case tid_DIMENSION:  | 
              |     |     +-----------------------+ 
   593        |     |     +--- //
   594        |     |     |    //  F90に対応するため、次が(の場合には、Dimension属性として扱う。  
   595        |     |     |    //  (でない場合は、DIMENSION文となる。  2007/1/19                  
   596        |     |     |    //  また、定数でない場合もOK(デフォルトの値)とする。             
   597        |     |     |    //                                                                 
              |     |     |  +------------------------------------------------------------------+ 
   598        |     |     +--+ if((i+1 < TokenList->Count)                                      | 
   599        |     |     |  |     &&(((TToken *)TokenList->Items[i+1])->TokId == tid_Kakko)){  | 
              |     |     |  +--+---------------------------------------------------------------+ 
   600        |     |     |     +--- int TokId2;
   601        |     |     |     +--- AnsiString TokStr2;
   602        |     |     |     |    
   603        |     |     |     +--- DimensionF = true;
   604        |     |     |     +--- i+=2;
   605        |     |     |     +--- //
   606        |     |     |     |    // )までを対象となり、Dim_ArrayLevelを求める。 
   607        |     |     |     |    //                                             
   608        |     |     |     |    //  Exp: DIMENSION(1:3,2) 等                   
   609        |     |     |     |    //                                             
              |     |     |     |  +----------------------------------------------------------------------------+ 
   610        |     |     |     +--+ while((i < ePos)&&(((TToken *)TokenList->Items[i])->TokId != tid_Kokka)){  | 
              |     |     |     |  +--+-------------------------------------------------------------------------+ 
   611        |     |     |     |     +--- TokId2 = ((TToken *)TokenList->Items[i])->TokId;
   612        |     |     |     |     +--- TokStr2 = ((TToken *)TokenList->Items[i])->Str;
              |     |     |     |     |  +----------------------------------------------------+ 
   613        |     |     |     |     +--+ if(TokId2 == tid_Koron){    // 先頭なし Exp. (:3) | 
              |     |     |     |     |  +--+-------------------------------------------------+ 
   614        |     |     |     |     |     +--- i++;
              |     |     |     |     |   +-+---+ 
   615        |     |     |     |     |   |  }  | 
              |     |     |     |     |   +-----+ 
   616        |     |     |     |     +--- // 数値の処理
   617        |     |     |     |     +--- UseTokLen = Eval(TokenList,i,ePos,ValDataList,&dData);
              |     |     |     |     |  +------------------+ 
   618        |     |     |     |     +--+ if(!EvalConstF){ | 
              |     |     |     |     |  +--+---------------+ 
   619        |     |     |     |     |     +--- //                      ErrMsg(TokenList,i,"宣言部エラー");
   620        |     |     |     |     |     +--- dData = 0;
              |     |     |     |     |   +-+---+ 
   621        |     |     |     |     |   |  }  | 
              |     |     |     |     |   +-----+ 
   622        |     |     |     |     +--- i += UseTokLen;
   623        |     |     |     |     +--- TokId2 = ((TToken *)TokenList->Items[i])->TokId;
   624        |     |     |     |     +--- TokStr2 = ((TToken *)TokenList->Items[i])->Str;
              |     |     |     |     |  +----------------------------------------------------+ 
   625        |     |     |     |     +--+ if(TokId2 == tid_Koron){    // 先頭あり Exp (1:3)  | 
              |     |     |     |     |  +--+-------------------------------------------------+ 
   626        |     |     |     |     |     +--- DimAttr_ArrayStart[DimAttr_ArrayLevel] = (int)dData;
   627        |     |     |     |     |     +--- i++;
   628        |     |     |     |     |     +--- TokId2 = ((TToken *)TokenList->Items[i])->TokId;
   629        |     |     |     |     |     +--- TokStr2 = ((TToken *)TokenList->Items[i])->Str;
   630        |     |     |     |     |     +--- UseTokLen = Eval(TokenList,i,ePos,ValDataList,&dData);
              |     |     |     |     |     |  +------------------+ 
   631        |     |     |     |     |     +--+ if(!EvalConstF){ | 
              |     |     |     |     |     |  +--+---------------+ 
   632        |     |     |     |     |     |     +--- //                          ErrMsg(TokenList,i,"宣言部エラー");
   633        |     |     |     |     |     |     +--- dData = 0;
              |     |     |     |     |     |   +-+---+ 
   634        |     |     |     |     |     |   |  }  | 
              |     |     |     |     |     |   +-----+ 
   635        |     |     |     |     |     +--- i += UseTokLen;
   636        |     |     |     |     |     +--- DimAttr_ArrayCount[DimAttr_ArrayLevel] = (int)dData-
   637        |     |     |     |     |     |        DimAttr_ArrayStart[DimAttr_ArrayLevel] + 1;      
              |     |     |     |     |   +-+---+ 
   638        |     |     |     |     |   |  }  | 
              |     |     |     |     |   +-+---+ 
              |     |     |     |     |   +-+-------+ 
   638        |     |     |     |     |   |  else{  | 
              |     |     |     |     |   +-+-------+ 
   639        |     |     |     |     |     +--- DimAttr_ArrayStart[DimAttr_ArrayLevel] = 1;
   640        |     |     |     |     |     +--- DimAttr_ArrayCount[DimAttr_ArrayLevel] = (int)dData;
              |     |     |     |     |   +-+---+ 
   641        |     |     |     |     |   |  }  | 
              |     |     |     |     |   +-----+ 
   642        |     |     |     |     +--- TokId2 = ((TToken *)TokenList->Items[i])->TokId;
   643        |     |     |     |     +--- TokStr2 = ((TToken *)TokenList->Items[i])->Str;
              |     |     |     |     |  +----------------------------+ 
   644        |     |     |     |     +--+ if(TokId2 == tid_Kannma){  | 
              |     |     |     |     |  +--+-------------------------+ 
   645        |     |     |     |     |     +--- DimAttr_ArrayLevel++;
              |     |     |     |     |   +-+---+ 
   646        |     |     |     |     |   |  }  | 
              |     |     |     |     |   +-+---+ 
              |     |     |     |     |   +-+-------------------------------+ 
   646        |     |     |     |     |   |  else if(TokId2 == tid_Kokka){  | 
              |     |     |     |     |   +-+-------------------------------+ 
              |     |     |     |     |     |  +--------+ 
   647        |     |     |     |     |     +--+ break; | 
              |     |     |     |     |     |  +--------+ 
              |     |     |     |     |   +-+---+ 
   648        |     |     |     |     |   |  }  | 
              |     |     |     |     |   +-----+ 
   649        |     |     |     |     +--- i++;
              |     |     |     |   +-+---+ 
   650        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
              |     |     |   +-+---+ 
   651        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |     |  +--------+ 
   652        |     |     +--+ break; | 
              |     |     |  +--------+ 
              |     |     +-----------------------+ 
   653        |     |     |  case tid_PARAMETER:  | 
              |     |     +-----------------------+ 
   654        |     |     +--- ParamaterF = true;
              |     |     |  +--------+ 
   655        |     |     +--+ break; | 
              |     |     |  +--------+ 
              |     |     +---------------------------+ 
   656        |     |     |  case tid_Kannma:    // , | 
              |     |     +---------------------------+ 
   657        |     |     +--- // ,は、ArrayLevelを Upする。
   658        |     |     +--- ArrayLevel++;
              |     |     |  +--------+ 
   659        |     |     +--+ break; | 
              |     |     |  +--------+ 
              |     |     +---------------------------------+ 
   660        |     |     |  case tid_KoronKoron:    // ::  | 
              |     |     +---------------------------------+ 
   661        |     |     +--- // 宣言部分終了
   662        |     |     +--- sPos = i+1;
   663        |     |     +--- i = ePos+1;
              |     |     |  +--------+ 
   664        |     |     +--+ break; | 
              |     |     |  +--------+ 
              |     |     +-----------------------+ 
   665        |     |     |  case tid_Kakko: // ( | 
              |     |     +-----------------------+ 
   666        |     |     +--- //
   667        |     |     |    // (Len=xx) や (xx,xx)で配列要素数を指定 ')'までの処理を行う。  
   668        |     |     |    // ただし、PARAMETERの直後は、()はパラメータの設定になる。       
   669        |     |     |    //                                                               
              |     |     |  +----------------------------------------------------------------+ 
   670        |     |     +--+ if(((TToken *)TokenList->Items[i-1])->TokId == tid_PARAMETER){ | 
              |     |     |  +--+-------------------------------------------------------------+ 
   671        |     |     |     +--- // 宣言部分終了
   672        |     |     |     +--- sPos = i+1;
   673        |     |     |     +--- i = ePos+1;
              |     |     |   +-+---+ 
   674        |     |     |   |  }  | 
              |     |     |   +-+---+ 
              |     |     |   +-+-------+ 
   674        |     |     |   |  else{  | 
              |     |     |   +-+-------+ 
   675        |     |     |     +--- // (Len=xx)か (xx,xx) 注:xxは、PARAMETERでの値も可能
   676        |     |     |     +--- i++;
              |     |     |     |  +------------------------------------------------------------------------+ 
   677        |     |     |     +--+ if((AnsiCompareText(((TToken *)TokenList->Items[i])->Str,"LEN") == 0)  | 
   678        |     |     |     |  |     &&(((TToken *)TokenList->Items[i+1])->TokId == tid_Set)){          | 
              |     |     |     |  +--+---------------------------------------------------------------------+ 
   679        |     |     |     |     +--- // Len = の処理
   680        |     |     |     |     +--- i++;
              |     |     |     |   +-+---+ 
   681        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
              |     |     |     |  +------------------------------------------------------------------------+ 
   682        |     |     |     +--+ if((AnsiCompareText(((TToken *)TokenList->Items[i])->Str,"KIND") == 0) | 
   683        |     |     |     |  |     &&(((TToken *)TokenList->Items[i+1])->TokId == tid_Set)){          | 
              |     |     |     |  +--+---------------------------------------------------------------------+ 
   684        |     |     |     |     +--- // KIND = の処理
   685        |     |     |     |     +--- i++;
              |     |     |     |   +-+---+ 
   686        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
   687        |     |     |     +--- // 数値の処理
   688        |     |     |     +--- UseTokLen = Eval(TokenList,i,ePos,ValDataList,&dData);
              |     |     |     |  +------------------+ 
   689        |     |     |     +--+ if(!EvalConstF){ | 
              |     |     |     |  +--+---------------+ 
   690        |     |     |     |     +--- //                  ErrMsg(TokenList,i,"宣言部エラー");
   691        |     |     |     |     +--- dData = 0;
              |     |     |     |   +-+---+ 
   692        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
   693        |     |     |     +--- i += UseTokLen;
   694        |     |     |     +--- DataLength = (int)dData; // 文字列長さは、DataLength
              |     |     |   +-+---+ 
   695        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |     |  +--------+ 
   696        |     |     +--+ break; | 
              |     |     |  +--------+ 
              |     |     +-----------+ 
   697        |     |     |  default: | 
              |     |     +-----------+ 
              |     |     |  +--------------------+ 
   698        |     |     +--+ if(TokStr == "*"){ | 
              |     |     |  +--+-----------------+ 
   699        |     |     |     +--- // REAL*8 や INTEGER*4 などの処理
   700        |     |     |     +--- i++;
   701        |     |     |     +--- Token = (TToken *)TokenList->Items[i];
              |     |     |     |  +------------------------------------+ 
   702        |     |     |     +--+ if(Token->TokId == tid_ConstInt){  | 
              |     |     |     |  +--+---------------------------------+ 
   703        |     |     |     |     +--- DataLength = (int)Token->dData; // 文字列長さは、DataLength
              |     |     |     |   +-+---+ 
   704        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
   705        |     |     |     |    
              |     |     |   +-+---+ 
   706        |     |     |   |  }  | 
              |     |     |   +-+---+ 
              |     |     |   +-+-------+ 
   706        |     |     |   |  else{  | 
              |     |     |   +-+-------+ 
   707        |     |     |     +--- // 宣言部分終了
   708        |     |     |     +--- sPos = i;
   709        |     |     |     +--- i = ePos+1;
              |     |     |   +-+---+ 
   710        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |   +-+---+ 
   711        |     |   |  }  | 
              |     |   +-----+ 
              |   +-+---+ 
   712        |   |  }  | 
              |   +-----+ 
   713        +--- DefPosE = sPos;
   714        +--- //
   715        |    // 変数部分の処理                                                    
   716        |    // 変数の定義を追加する。宣言(PARAMETERを含む)のみが対象。         
   717        |    //  もし、変数名のみで、DimensonF=treu(Dimension属性あり)の場合は、 
   718        |    //  Dim_ArrayLevel等を使用する。 Add 2007/01/18                      
   719        |    //                                                                   
              |  +----------------------------------+ 
   720        +--+ for(i = sPos ; i <= ePos ; i++){ | 
              |  +--+-------------------------------+ 
   721        |     +--- Token = (TToken *)TokenList->Items[i];
   722        |     +--- TokId = Token->TokId;
   723        |     +--- TokStr = Token->Str;
   724        |     |    
              |     |  +------------------+ 
   725        |     +--+ if(TokId != -1){ | 
              |     |  +--+---------------+ 
              |     |     |  +--------+ 
   726        |     |     +--+ break; | 
              |     |     |  +--------+ 
              |     |   +-+---+ 
   727        |     |   |  }  | 
              |     |   +-----+ 
   728        |     +--- DefPos = i;
   729        |     +--- ValName = TokStr;
   730        |     +--- i++;
   731        |     +--- Token = (TToken *)TokenList->Items[i];
   732        |     +--- TokId = Token->TokId;
   733        |     +--- TokStr = Token->Str;
   734        |     +--- ArrayLevel = 0;
              |     |  +--------------------+ 
   735        |     +--+ if(TokStr == "("){ | 
              |     |  +--+-----------------+ 
   736        |     |     +--- //
   737        |     |     |    // 配列宣言の添え字の処理  
   738        |     |     |    // REAL D(3,4)             
   739        |     |     |    //                         
   740        |     |     +--- ArrayDefPosS = i;
   741        |     |     +--- i++;
              |     |     |  +--------------+ 
   742        |     |     +--+ while(true){ | 
              |     |     |  +--+-----------+ 
   743        |     |     |     +--- UseTokLen = Eval(TokenList,i,ePos,ValDataList,&dData);
              |     |     |     |  +------------------+ 
   744        |     |     |     +--+ if(!EvalConstF){ | 
              |     |     |     |  +--+---------------+ 
   745        |     |     |     |     +--- i += UseTokLen;
   746        |     |     |     |     +--- ArrayStart[ArrayLevel] = 1;
   747        |     |     |     |     +--- ArrayCount[ArrayLevel] = 0;
              |     |     |     |   +-+---+ 
   748        |     |     |     |   |  }  | 
              |     |     |     |   +-+---+ 
              |     |     |     |   +-+-------+ 
   748        |     |     |     |   |  else{  | 
              |     |     |     |   +-+-------+ 
   749        |     |     |     |     +--- i += UseTokLen;
   750        |     |     |     |     +--- ArrayCount[ArrayLevel] = (int)dData;
   751        |     |     |     |     +--- ArrayStart[ArrayLevel] = 1;
   752        |     |     |     |     +--- //                  if(((TToken *)TokenList->Items[i+1])->TokId == tid_Koron){
              |     |     |     |     |  +----------------------------------------------------------+ 
   753        |     |     |     |     +--+ if(((TToken *)TokenList->Items[i])->TokId == tid_Koron){ | 
              |     |     |     |     |  +--+-------------------------------------------------------+ 
   754        |     |     |     |     |     +--- // : を含んだ宣言の処理
   755        |     |     |     |     |     +--- i++;
   756        |     |     |     |     |     +--- ArrayStart[ArrayLevel] = ArrayCount[ArrayLevel];
   757        |     |     |     |     |     +--- UseTokLen = Eval(TokenList,i,ePos,ValDataList,&dData);
              |     |     |     |     |     |  +------------------+ 
   758        |     |     |     |     |     +--+ if(!EvalConstF){ | 
              |     |     |     |     |     |  +--+---------------+ 
   759        |     |     |     |     |     |     +--- i += UseTokLen;
   760        |     |     |     |     |     |     +--- ArrayCount[ArrayLevel] = 0;
              |     |     |     |     |     |   +-+---+ 
   761        |     |     |     |     |     |   |  }  | 
              |     |     |     |     |     |   +-+---+ 
              |     |     |     |     |     |   +-+-------+ 
   761        |     |     |     |     |     |   |  else{  | 
              |     |     |     |     |     |   +-+-------+ 
   762        |     |     |     |     |     |     +--- i += UseTokLen;
   763        |     |     |     |     |     |     +--- ArrayCount[ArrayLevel] = (int)dData - ArrayStart[ArrayLevel]+1;
              |     |     |     |     |     |   +-+---+ 
   764        |     |     |     |     |     |   |  }  | 
              |     |     |     |     |     |   +-----+ 
              |     |     |     |     |   +-+---+ 
   765        |     |     |     |     |   |  }  | 
              |     |     |     |     |   +-----+ 
              |     |     |     |   +-+---+ 
   766        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
   767        |     |     |     +--- ArrayLevel++;
   768        |     |     |     +--- Token = (TToken *)TokenList->Items[i];
   769        |     |     |     +--- TokId = Token->TokId;
   770        |     |     |     +--- TokStr = Token->Str;
              |     |     |     |  +--------------------------+ 
   771        |     |     |     +--+ if(TokId != tid_Kannma){ | 
              |     |     |     |  +--+-----------------------+ 
              |     |     |     |     |  +--------+ 
   772        |     |     |     |     +--+ break; | 
              |     |     |     |     |  +--------+ 
              |     |     |     |   +-+---+ 
   773        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
   774        |     |     |     +--- i++;
              |     |     |   +-+---+ 
   775        |     |     |   |  }  | 
              |     |     |   +-----+ 
   776        |     |     +--- ArrayDefPosE = i+1;
              |     |   +-+---+ 
   777        |     |   |  }  | 
              |     |   +-----+ 
   778        |     +--- //
   779        |     |    //  もし、配列宣言なしの変数名のみで、Dimension属性ありの場合は、  
   780        |     |    //  Dimension属性をセットする。                                    
   781        |     |    //  Add 2007/01/19                                                 
   782        |     |    //                                                                 
              |     |  +--------------------------------------+ 
   783        |     +--+ if((ArrayLevel == 0)&&(DimensionF)){ | 
              |     |  +--+-----------------------------------+ 
   784        |     |     +--- ArrayLevel = DimAttr_ArrayLevel;
   785        |     |     +--- memcpy(ArrayStart,DimAttr_ArrayStart,sizeof(ArrayStart));
   786        |     |     +--- memcpy(ArrayCount,DimAttr_ArrayCount,sizeof(ArrayCount));
              |     |   +-+---+ 
   787        |     |   |  }  | 
              |     |   +-----+ 
   788        |     +--- //
   789        |     |    // パラメータ文の場合は、 xxx = xxx での値を所得する。              
   790        |     |    // もしパラメータ文でない場合は、初期値なのでカンマまで読み飛ばす。  
   791        |     |    //                                                                   
   792        |     +--- Token = (TToken *)TokenList->Items[i];
   793        |     +--- TokId = Token->TokId;
   794        |     +--- ParamValF = false;
              |     |  +------------------------+ 
   795        |     +--+ if(TokId == tid_Set){  | 
              |     |  +--+---------------------+ 
   796        |     |     +--- UseTokLen = 0;
              |     |     |  +------------------+ 
   797        |     |     +--+ if(ParamaterF){  | 
              |     |     |  +--+---------------+ 
   798        |     |     |     +--- i++;
   799        |     |     |     +--- UseTokLen = Eval(TokenList,i,ePos,ValDataList,&dData);
              |     |     |     |  +------------------+ 
   800        |     |     |     +--+ if(EvalConstF){  | 
              |     |     |     |  +--+---------------+ 
   801        |     |     |     |     +--- ParamValF = true;
   802        |     |     |     |     +--- ParamData = dData;
              |     |     |     |   +-+---+ 
   803        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
   804        |     |     |     +--- i += UseTokLen;
              |     |     |   +-+---+ 
   805        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |     |  +----------------------+ 
   806        |     |     +--+ if(UseTokLen <= 0){  | 
              |     |     |  +--+-------------------+ 
              |     |     |     |  +--------------------------+ 
   807        |     |     |     +--+ for( ; i <= ePos ; i++){ | 
              |     |     |     |  +--+-----------------------+ 
              |     |     |     |     |  +------------------------------------------------------------+ 
   808        |     |     |     |     +--+ if(((TToken *)TokenList->Items[i])->TokId == tid_Kannma){  | 
              |     |     |     |     |  +--+---------------------------------------------------------+ 
              |     |     |     |     |     |  +--------+ 
   809        |     |     |     |     |     +--+ break; | 
              |     |     |     |     |     |  +--------+ 
              |     |     |     |     |   +-+---+ 
   810        |     |     |     |     |   |  }  | 
              |     |     |     |     |   +-----+ 
              |     |     |     |   +-+---+ 
   811        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
              |     |     |   +-+---+ 
   812        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |   +-+---+ 
   813        |     |   |  }  | 
              |     |   +-----+ 
   814        |     +--- //
   815        |     |    // すでに、同じMoudelIdxで、宣言されている同名変数があるかを調べる。   
   816        |     |    // あれば、追加しない。(型の一致かどうかの判定は、コンパイラまかせ)  
   817        |     |    //                                                                     
   818        |     +--- TValData *ValData;
   819        |     +--- bool NewValDataF = true;
   820        |     |    
              |     |  +--------------------------------------------+ 
   821        |     +--+ for(j = 0 ; j < ValDataList->Count ; j++){ | 
              |     |  +--+-----------------------------------------+ 
   822        |     |     +--- ValData = (TValData *)ValDataList->Items[j];
              |     |     |  +----------------------------------------------------+ 
   823        |     |     +--+ if((AnsiCompareText(ValData->Str,ValName) == 0)&&  | 
   824        |     |     |  |     (ValData->ModuleIdx == ModuleIdx)){            | 
              |     |     |  +--+-------------------------------------------------+ 
   825        |     |     |     +--- NewValDataF = false;
              |     |     |     |  +--------+ 
   826        |     |     |     +--+ break; | 
              |     |     |     |  +--------+ 
              |     |     |   +-+---+ 
   827        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |   +-+---+ 
   828        |     |   |  }  | 
              |     |   +-----+ 
   829        |     +--- //
   830        |     |    // 変数リストに追加する。                    
   831        |     |    // SUBRuntineなどで、先に出現した場合も行う  
   832        |     |    //                                           
              |     |  +----------------------------------------------+ 
   833        |     +--+ if(NewValDataF || (ValData->DefPos == -1)){  | 
              |     |  +--+-------------------------------------------+ 
              |     |     |  +------------------+ 
   834        |     |     +--+ if(NewValDataF){ | 
              |     |     |  +--+---------------+ 
   835        |     |     |     +--- ValData = new TValData(ValName);
   836        |     |     |     +--- ValDataList->Add((void *)ValData);
   837        |     |     |     +--- ValData->ModuleIdx = ModuleIdx;
              |     |     |   +-+---+ 
   838        |     |     |   |  }  | 
              |     |     |   +-----+ 
   839        |     |     +--- ValData->DataType = ImplType[ValName[1]]; // 暗黙の宣言
   840        |     |     +--- ValData->DefPos = DefPos;
   841        |     |     +--- ValData->DefPosS = DefPosS;
   842        |     |     +--- ValData->DefPosE = DefPosE;
   843        |     |     +--- ValData->ArrayDefPosS = ArrayDefPosS;
   844        |     |     +--- ValData->ArrayDefPosE = ArrayDefPosE;
              |     |     |  +------------+ 
   845        |     |     +--+ if(RealF){ | 
              |     |     |  +--+---------+ 
   846        |     |     |     +--- ValData->DataType = dt_Real;
              |     |     |   +-+---+ 
   847        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |     |  +------------+ 
   848        |     |     +--+ if(IntF){  | 
              |     |     |  +--+---------+ 
   849        |     |     |     +--- ValData->DataType = dt_Int;
              |     |     |   +-+---+ 
   850        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |     |  +------------+ 
   851        |     |     +--+ if(CharF){ | 
              |     |     |  +--+---------+ 
   852        |     |     |     +--- ValData->DataType = dt_Char;
              |     |     |   +-+---+ 
   853        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |     |  +--------------+ 
   854        |     |     +--+ if(LogicF){  | 
              |     |     |  +--+-----------+ 
   855        |     |     |     +--- ValData->DataType = dt_Logic;
              |     |     |   +-+---+ 
   856        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |     |  +----------------+ 
   857        |     |     +--+ if(ComplexF){  | 
              |     |     |  +--+-------------+ 
   858        |     |     |     +--- ValData->DataType = dt_Complex;
              |     |     |   +-+---+ 
   859        |     |     |   |  }  | 
              |     |     |   +-----+ 
   860        |     |     +--- ValData->DataLength = DataLength;
   861        |     |     +--- ValData->ArrayLevel = ArrayLevel;
              |     |     |  +----------------------+ 
   862        |     |     +--+ if(ArrayLevel != 0){ | 
              |     |     |  +--+-------------------+ 
   863        |     |     |     +--- ValData->ArrayOrFuncF = true;
   864        |     |     |     +--- ValData->ArrayStart = new int[ArrayLevel];
   865        |     |     |     +--- ValData->ArrayCount = new int[ArrayLevel];
              |     |     |     |  +----------------------------------------+ 
   866        |     |     |     +--+ for(int k = 0 ; k < ArrayLevel ; k++){ | 
              |     |     |     |  +--+-------------------------------------+ 
   867        |     |     |     |     +--- ValData->ArrayStart[k] = ArrayStart[k];
   868        |     |     |     |     +--- ValData->ArrayCount[k] = ArrayCount[k];
              |     |     |     |   +-+---+ 
   869        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
              |     |     |   +-+---+ 
   870        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |   +-+---+ 
   871        |     |   |  }  | 
              |     |   +-----+ 
              |     |  +----------------+ 
   872        |     +--+ if(ParamValF){ | 
              |     |  +--+-------------+ 
   873        |     |     +--- ValData->ParamValF = ParamValF;
   874        |     |     +--- ValData->dData = ParamData;
              |     |   +-+---+ 
   875        |     |   |  }  | 
              |     |   +-----+ 
   876        |     +--- //
   877        |     |    // 次の変数へ  
   878        |     |    //             
   879        |     +--- Token = (TToken *)TokenList->Items[i];
   880        |     +--- TokId = Token->TokId;
              |     |  +--------------------------+ 
   881        |     +--+ if(TokId == tid_Kokka){  | 
              |     |  +--+-----------------------+ 
   882        |     |     +--- i++;
              |     |   +-+---+ 
   883        |     |   |  }  | 
              |     |   +-----+ 
   884        |     +--- Token = (TToken *)TokenList->Items[i];
   885        |     +--- TokId = Token->TokId;
              |     |  +--------------------------+ 
   886        |     +--+ if(TokId != tid_Kannma){ | 
              |     |  +--+-----------------------+ 
              |     |     |  +--------+ 
   887        |     |     +--+ break; | 
              |     |     |  +--------+ 
              |     |   +-+---+ 
   888        |     |   |  }  | 
              |     |   +-----+ 
              |   +-+---+ 
   889        |   |  }  | 
              |   +-----+ 
            +-+---+ 
   890      |  }  | 
            +-----+