abc プロジェクト
14.4.4. TScript メンバ関数説明

メンバ関数名 TScript
定義ファイル名pass3.cpp
定義行 116
所属名 TScript
アクセス属性 public
宣言形式 TScript ( TList * TokenList , int sPos )
概要 スクリプトデータを生成する。スクリプトの種類に応じた処理が行われる。
必要な場合は、スクリプト変数生成も行われる。
戻り値
パラメタ説明 TokenList トークンリスト
sPos トークンリスト開始位置
機能説明
備考

呼出し先関数一覧表
名称 定義ファイル名 定義行
1 TScript::GetFittingParam pass3.cpp 320
2 GetScValData pass3.cpp 387
3 Add

4 AnsiCompareText

5 Clear

6 Delete

7 Length

8 Trim

参照メンバ変数一覧表
名称 定義ファイル名 定義行
1 TScript::FittingDegree pass3.h 173
2 TScript::FittingType pass3.h 171
3 TScript::SampledList pass3.h 174
4 TScript::ScAction pass3.h 160
5 TScript::ScRegion pass3.h 161
6 TScript::ScType pass3.h 158
7 TScript::ScValDataList pass3.h 162
8 TScript::Str pass3.h 154
9 TScript::TokPos pass3.h 155
10 TScript::TokStrList pass3.h 166
11 TScript::TuneRegion pass3.h 156

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

関数論理チャート

        |  +----------------------------------------------+ 
   116  +--+ TScript::TScript(TList *TokenList,int sPos)  | 
   117     | {                                            | 
           +--+-------------------------------------------+ 
   118        +--- AnsiString s,s1;
   119        +--- int pos;
   120        +--- int i;
   121        +--- TToken *Token = (TToken *)TokenList->Items[sPos];
   122        +--- TokStrList = new TStringList;
   123        |    
   124        +--- TokPos = sPos;
   125        +--- Str = Token->Str; // 注釈全体の文字列
   126        +--- ScValDataList = NULL;
   127        +--- TuneRegion = NULL;
   128        +--- ScType = sct_install;
   129        +--- ScAction = sca_none;
   130        +--- ScRegion = scr_none;
   131        |    
   132        +--- // Fitting関連のデータ
   133        +--- FittingType = 0;
   134        +--- FittingDegree = 0;      // 多項式の次数
   135        +--- SampledList = NULL;     // intの形で Sampledの値がセット
   136        |                                                             
   137        +--- //
   138        |    // トークンに分解する。                                    
   139        |    // Scriptでのセパレータは、通常より少ない。                
   140        |    // これは、least-squares などを1トークンとして扱うため。  
   141        |    //                                                         
   142        +--- s1 = "";
   143        +--- s = Str;
              |  +--------------------------------------+ 
   144        +--+ for(i = 1 ; i <= s.Length() ; i++){  | 
              |  +--+-----------------------------------+ 
              |     |  +------------------------------------------------------------------+ 
   145        |     +--+ if((s[i] == ' ')||(s[i] == '(')||(s[i] == ')')||(s[i] == ',')){  | 
              |     |  +--+---------------------------------------------------------------+ 
   146        |     |     |    
   147        |     |     +--- s1 = Trim(s1);
              |     |     |  +----------------+ 
   148        |     |     +--+ if(s1 != ""){  | 
              |     |     |  +--+-------------+ 
   149        |     |     |     +--- TokStrList->Add(s1);
              |     |     |   +-+---+ 
   150        |     |     |   |  }  | 
              |     |     |   +-----+ 
   151        |     |     +--- s1 = s[i];
              |     |     |  +----------------+ 
   152        |     |     +--+ if(s1 != " "){ | 
              |     |     |  +--+-------------+ 
   153        |     |     |     +--- TokStrList->Add(s1);
              |     |     |   +-+---+ 
   154        |     |     |   |  }  | 
              |     |     |   +-----+ 
   155        |     |     +--- s1 = "";
              |     |   +-+---+ 
   156        |     |   |  }  | 
              |     |   +-+---+ 
              |     |   +-+-------+ 
   156        |     |   |  else{  | 
              |     |   +-+-------+ 
   157        |     |     +--- s1 += s[i];
              |     |   +-+---+ 
   158        |     |   |  }  | 
              |     |   +-----+ 
              |   +-+---+ 
   159        |   |  }  | 
              |   +-----+ 
   160        +--- s1 = Trim(s1);
              |  +----------------+ 
   161        +--+ if(s1 != ""){  | 
              |  +--+-------------+ 
   162        |     +--- TokStrList->Add(s1);
              |   +-+---+ 
   163        |   |  }  | 
              |   +-----+ 
   164        +--- /*
   165        |        for(i = 0 ; i < TokStrList->Count ; i++){  
   166        |            MainF->print(TokStrList->Strings[i]);  
   167        |        }                                          
   168        |    */                                             
   169        +--- // スクリプトトークン解析
   170        +--- i = 0;
   171        +--- i++; // Skip "!ABCLib$"
              |  +------------------------------+ 
   172        +--+ if(i >= TokStrList->Count){  | 
              |  +--+---------------------------+ 
              |     |  +----------+ 
   173        |     +--+ return;  | 
              |     |  +----------+ 
              |   +-+---+ 
   174        |   |  }  | 
              |   +-----+ 
   175        +--- s = TokStrList->Strings[i++];
              |  +----------------------------------------+ 
   176        +--+ if(AnsiCompareText(s,"install") == 0){ | 
              |  +--+-------------------------------------+ 
   177        |     +--- ScType = sct_install;   // 自動チューニング種類
              |   +-+---+ 
   178        |   |  }  | 
              |   +-+---+ 
              |   +-+-------------------------------------------+ 
   178        |   |  else if(AnsiCompareText(s,"static") == 0){ | 
              |   +-+-------------------------------------------+ 
   179        |     +--- ScType = sct_static;    // 自動チューニング種類
              |   +-+---+ 
   180        |   |  }  | 
              |   +-+---+ 
              |   +-+---------------------------------------------+ 
   180        |   |  else if(AnsiCompareText(s,"dynamic") == 0){  | 
              |   +-+---------------------------------------------+ 
   181        |     +--- ScType = sct_dynamic;   // 自動チューニング種類
   182        |     |                                                     
              |   +-+---+ 
   183        |   |  }  | 
              |   +-+---+ 
              |   +-+-----------------------------------------+ 
   183        |   |  else if(AnsiCompareText(s,"name") == 0){ | 
              |   +-+-----------------------------------------+ 
   184        |     +--- ScType = sct_name;      // 自動チューニング種類
              |   +-+---+ 
   185        |   |  }  | 
              |   +-+---+ 
              |   +-+-----------------------------------------------+ 
   185        |   |  else if(AnsiCompareText(s,"parameter") == 0){  | 
              |   +-+-----------------------------------------------+ 
   186        |     +--- ScType = sct_parameter;
              |   +-+---+ 
   187        |   |  }  | 
              |   +-+---+ 
              |   +-+-------------------------------------------+ 
   187        |   |  else if(AnsiCompareText(s,"select") == 0){ | 
              |   +-+-------------------------------------------+ 
   188        |     +--- ScType = sct_select;
              |   +-+---+ 
   189        |   |  }  | 
              |   +-+---+ 
              |   +-+-----------------------------------------------+ 
   189        |   |  else if(AnsiCompareText(s,"according") == 0){  | 
              |   +-+-----------------------------------------------+ 
   190        |     +--- ScType = sct_according;
              |   +-+---+ 
   191        |   |  }  | 
              |   +-+---+ 
              |   +-+-------------------------------------------+ 
   191        |   |  else if(AnsiCompareText(s,"varied") == 0){ | 
              |   +-+-------------------------------------------+ 
   192        |     +--- ScType = sct_varied;
              |   +-+---+ 
   193        |   |  }  | 
              |   +-+---+ 
              |   +-+---------------------------------------------+ 
   193        |   |  else if(AnsiCompareText(s,"fitting") == 0){  | 
              |   +-+---------------------------------------------+ 
   194        |     +--- ScType = sct_fitting;
              |   +-+---+ 
   195        |   |  }  | 
              |   +-+---+ 
              |   +-+-------------------------------------------+ 
   195        |   |  else if(AnsiCompareText(s,"pripro") == 0){ | 
              |   +-+-------------------------------------------+ 
   196        |     +--- ScType = sct_pripro;
              |   +-+---+ 
   197        |   |  }  | 
              |   +-+---+ 
              |   +-+---------------------------------------------+ 
   197        |   |  else if(AnsiCompareText(s,"postpro") == 0){  | 
              |   +-+---------------------------------------------+ 
   198        |     +--- ScType = sct_postpro;
              |   +-+---+ 
   199        |   |  }  | 
              |   +-+---+ 
              |   +-+-------------------------------------------+ 
   199        |   |  else if(AnsiCompareText(s,"debug") == 0){  | 
              |   +-+-------------------------------------------+ 
   200        |     +--- ScType = sct_debug;
              |   +-+---+ 
   201        |   |  }  | 
              |   +-+---+ 
              |   +-+-------------------------------------------------------+ 
   201        |   |  else if(AnsiCompareText(s,"ABCLib_DynPefThis") == 0){  | 
              |   +-+-------------------------------------------------------+ 
   202        |     +--- ScType = sct_DynPefThis;
              |   +-+---+ 
   203        |   |  }  | 
              |   +-+---+ 
              |   +-+-------------------------------------------+ 
   203        |   |  else if(AnsiCompareText(s,"Number") == 0){ | 
              |   +-+-------------------------------------------+ 
   204        |     +--- ScType = sct_Number;
              |   +-+---+ 
   205        |   |  }  | 
              |   +-+---+ 
              |   +-+-------------------------------------------+ 
   205        |   |  else if(AnsiCompareText(s,"BPset") == 0){  | 
              |   +-+-------------------------------------------+ 
   206        |     +--- ScType = sct_BPset;
              |   +-+---+ 
   207        |   |  }  | 
              |   +-+---+ 
              |   +-+-------------+ 
   207        |   |  else{ // 式  | 
              |   +-+-------------+ 
   208        |     +--- ScType = sct_command;   // 自動チューニング種類
   209        |     +--- // コマンドの場合は、TokStrListを1つだけに修正する。
   210        |     +--- TokStrList->Clear();
   211        |     +--- s = Str;
   212        |     +--- s.Delete(1,8);  // Delete "!ABCLib$"
   213        |     +--- s = "      "+Trim(s);
   214        |     +--- TokStrList->Add(s);
              |     |  +----------+ 
   215        |     +--+ return;  | 
              |     |  +----------+ 
              |   +-+---+ 
   216        |   |  }  | 
              |   +-----+ 
   217        +--- // 機能をチェック
              |  +------------------------------+ 
   218        +--+ if(i >= TokStrList->Count){  | 
              |  +--+---------------------------+ 
              |     |  +----------+ 
   219        |     +--+ return;  | 
              |     |  +----------+ 
              |   +-+---+ 
   220        |   |  }  | 
              |   +-----+ 
              |  +----------------------------+ 
   221        +--+ if(ScType == sct_fitting){ | 
              |  +--+-------------------------+ 
   222        |     +--- GetFittingParam(TokenList,i);
              |     |  +----------+ 
   223        |     +--+ return;  | 
              |     |  +----------+ 
              |   +-+---+ 
   224        |   |  }  | 
              |   +-----+ 
   225        +--- s = TokStrList->Strings[i++];
              |  +----------------------------------------+ 
   226        +--+ if(AnsiCompareText(s,"define") == 0){  | 
              |  +--+-------------------------------------+ 
   227        |     +--- ScAction = sca_define;
              |   +-+---+ 
   228        |   |  }  | 
              |   +-+---+ 
              |   +-+---------------------------------------------+ 
   228        |   |  else if(AnsiCompareText(s,"variable") == 0){ | 
              |   +-+---------------------------------------------+ 
   229        |     +--- ScAction = sca_variable;
              |   +-+---+ 
   230        |   |  }  | 
              |   +-+---+ 
              |   +-+-------------------------------------------+ 
   230        |   |  else if(AnsiCompareText(s,"select") == 0){ | 
              |   +-+-------------------------------------------+ 
   231        |     +--- ScAction = sca_select;
              |   +-+---+ 
   232        |   |  }  | 
              |   +-+---+ 
              |   +-+-------------------------------------------+ 
   232        |   |  else if(AnsiCompareText(s,"unroll") == 0){ | 
              |   +-+-------------------------------------------+ 
   233        |     +--- ScAction = sca_unroll;
              |   +-+---+ 
   234        |   |  }  | 
              |   +-+---+ 
              |   +-+-------+ 
   234        |   |  else{  | 
              |   +-+-------+ 
   235        |     +--- ScAction = sca_none;
   236        |     +--- i--; // 該当なしの場合は、1つ戻す。
              |   +-+---+ 
   237        |   |  }  | 
              |   +-----+ 
   238        +--- //
   239        |    // 対象変数リストを作成する。 () 内の場合 
   240        |    //                                         
   241        +--- TScValData *ScValData;
              |  +------------------------------+ 
   242        +--+ if(i >= TokStrList->Count){  | 
              |  +--+---------------------------+ 
              |     |  +----------+ 
   243        |     +--+ return;  | 
              |     |  +----------+ 
              |   +-+---+ 
   244        |   |  }  | 
              |   +-----+ 
   245        +--- s = TokStrList->Strings[i++];
              |  +----------------+ 
   246        +--+ if(s == "("){  | 
              |  +--+-------------+ 
              |     |  +--------------------------------------+ 
   247        |     +--+ for(; i < TokStrList->Count ; i++){  | 
              |     |  +--+-----------------------------------+ 
   248        |     |     +--- s = TokStrList->Strings[i];
              |     |     |  +----------------+ 
   249        |     |     +--+ if(s == ")"){  | 
              |     |     |  +--+-------------+ 
   250        |     |     |     +--- i++;
              |     |     |     |  +--------+ 
   251        |     |     |     +--+ break; | 
              |     |     |     |  +--------+ 
              |     |     |   +-+---+ 
   252        |     |     |   |  }  | 
              |     |     |   +-----+ 
   253        |     |     +--- s = TokStrList->Strings[i];
              |     |     |  +----------------+ 
   254        |     |     +--+ if(s == ","){  | 
              |     |     |  +--+-------------+ 
              |     |     |     |  +------------+ 
   255        |     |     |     +--+ continue;  | 
              |     |     |     |  +------------+ 
              |     |     |   +-+---+ 
   256        |     |     |   |  }  | 
              |     |     |   +-----+ 
   257        |     |     +--- // 変数を追加する。(同名の変数があれば、共有する)
   258        |     |     +--- ScValData = GetScValData(TokenList,s);
   259        |     |     +--- ScValData->RefCount++;
              |     |     |  +----------------------------+ 
   260        |     |     +--+ if(ScValDataList == NULL){ | 
              |     |     |  +--+-------------------------+ 
   261        |     |     |     +--- ScValDataList = new TList;
              |     |     |   +-+---+ 
   262        |     |     |   |  }  | 
              |     |     |   +-----+ 
   263        |     |     +--- ScValDataList->Add((void *)ScValData);
              |     |   +-+---+ 
   264        |     |   |  }  | 
              |     |   +-----+ 
              |   +-+---+ 
   265        |   |  }  | 
              |   +-+---+ 
              |   +-+-------+ 
   265        |   |  else{  | 
              |   +-+-------+ 
   266        |     +--- i--;
              |   +-+---+ 
   267        |   |  }  | 
              |   +-----+ 
   268        +--- //
   269        |    // 変数の後の region start , region end をチェックして ScRegionにセット  
   270        |    // sub region start , sub region end も対象となる。                      
   271        |    //                                                                       
              |  +------------------------------+ 
   272        +--+ if(i >= TokStrList->Count){  | 
              |  +--+---------------------------+ 
              |     |  +----------+ 
   273        |     +--+ return;  | 
              |     |  +----------+ 
              |   +-+---+ 
   274        |   |  }  | 
              |   +-----+ 
   275        +--- s = TokStrList->Strings[i++];
              |  +----------------------------------------+ 
   276        +--+ if(AnsiCompareText(s,"region") == 0){  | 
              |  +--+-------------------------------------+ 
              |     |  +------------------------------+ 
   277        |     +--+ if(i >= TokStrList->Count){  | 
              |     |  +--+---------------------------+ 
              |     |     |  +----------+ 
   278        |     |     +--+ return;  | 
              |     |     |  +----------+ 
              |     |   +-+---+ 
   279        |     |   |  }  | 
              |     |   +-----+ 
   280        |     +--- s = TokStrList->Strings[i++];
              |     |  +--------------------------------------+ 
   281        |     +--+ if(AnsiCompareText(s,"start") == 0){ | 
              |     |  +--+-----------------------------------+ 
   282        |     |     +--- ScRegion = scr_start;
              |     |   +-+---+ 
   283        |     |   |  }  | 
              |     |   +-+---+ 
              |     |   +-+-----------------------------------------+ 
   283        |     |   |  else if(AnsiCompareText(s,"end") == 0){  | 
              |     |   +-+-----------------------------------------+ 
   284        |     |     +--- ScRegion = scr_end;
              |     |   +-+---+ 
   285        |     |   |  }  | 
              |     |   +-----+ 
              |   +-+---+ 
   286        |   |  }  | 
              |   +-+---+ 
              |   +-+-----------------------------------------+ 
   286        |   |  else if(AnsiCompareText(s,"sub") == 0){  | 
              |   +-+-----------------------------------------+ 
   287        |     +--- s = TokStrList->Strings[i++];
              |     |  +----------------------------------------+ 
   288        |     +--+ if(AnsiCompareText(s,"region") == 0){  | 
              |     |  +--+-------------------------------------+ 
              |     |     |  +------------------------------+ 
   289        |     |     +--+ if(i >= TokStrList->Count){  | 
              |     |     |  +--+---------------------------+ 
              |     |     |     |  +----------+ 
   290        |     |     |     +--+ return;  | 
              |     |     |     |  +----------+ 
              |     |     |   +-+---+ 
   291        |     |     |   |  }  | 
              |     |     |   +-----+ 
   292        |     |     +--- s = TokStrList->Strings[i++];
              |     |     |  +--------------------------------------+ 
   293        |     |     +--+ if(AnsiCompareText(s,"start") == 0){ | 
              |     |     |  +--+-----------------------------------+ 
   294        |     |     |     +--- ScRegion = scr_substart;
              |     |     |   +-+---+ 
   295        |     |     |   |  }  | 
              |     |     |   +-+---+ 
              |     |     |   +-+-----------------------------------------+ 
   295        |     |     |   |  else if(AnsiCompareText(s,"end") == 0){  | 
              |     |     |   +-+-----------------------------------------+ 
   296        |     |     |     +--- ScRegion = scr_subend;
              |     |     |   +-+---+ 
   297        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |   +-+---+ 
   298        |     |   |  }  | 
              |     |   +-----+ 
              |   +-+---+ 
   299        |   |  }  | 
              |   +-----+ 
            +-+---+ 
   300      |  }  | 
            +-----+