| 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 | } |
+-----+