MUSASHI C source: mssCal.h


構造体、共用体、列挙体
struct Arg struct Func struct mssCal


DEFINE,マクロ
MaxCalArg


0001: /** 
0002:  * # CHAPTER # 
0003:  * ============================================================================ 
0004:  * xtcal等で利用される計算式に関するヘッダーファイル 
0005:  * ============================================================================ 
0006:  */ 
0007:  
0008: #include <mssConfig.h
0009: #include <mssValue.h
0010: #include <mssHeader.h
0011: #include <regex.h> 
0012:  
0013: #ifndef __MSSCAL_H 
0014: #define __MSSCAL_H 
0015:  
0016: /** 
0017:  * # DEFINE # 
0018:  *一つの関数がとる、引数の最大数 
0019:  */ 
0020: #define MaxCalArg 20  /*一つの関数がとる、引数の最大数*/ 
0021:  
0022: /** 
0023:  * # STRUCT # 
0024:  * 関数や演算子の引数 
0025:  */ 
0026: struct Arg { 
0027:   MssValue      val[MssFieldMaxCnt];/*引数の値(複数あるのは項目ワイルドカード用)*/ 
0028:   int        valCnt;             /*値の個数*/ 
0029:   char         *str;             /**/ 
0030:   int           datType;         /*引数の型(N,S,X)*/ 
0031:   int           type;            /*引数のタイプ(NODE,LEAF(CONST, FIELD)*/ 
0032:   struct mssCal   *node;         /*引数が関数や演算子なら、そのノード*/ 
0033:   struct mssFields *flds;        /*type==FIELDならば、その項目*/ 
0034:   MssValue         constant;        /*type=CONSTならば、その値*/ 
0035: }; 
0036:  
0037: /** 
0038:  * # STRUCT # 
0039:  *関数の各種情報 
0040:  */ 
0041: struct Func { 
0042:   char name[32];                 /*関数名*/ 
0043:   int  type;                     /*関数,演算子の種類 0:関数 n:n項演算子*/ 
0044:   int  priority;                 /*演算子の優先順位*/ 
0045:   int  argType[MaxCalArg];       /*引数の型(N,S,X)*/ 
0046:   int  retType;                  /*返値の型(N,S,X)*/ 
0047:   unsigned char procType;        /*利用可能処理タイプ*/ 
0048:   MssValue (*pnt)(struct mssCal *cal); /* 関数のアドレス*/ 
0049:  
0050:   /*以下は上記変数から計算して求められる*/ 
0051:   int  argCnt;                   /*引数の数(最低必要な数)*/ 
0052:   int  argMul;                   /*可変引数を含むかどうか*/ 
0053:   int  mulBcnt;                  /*可変引数の場所の前に何個引数があるか*/ 
0054:   int  mulAcnt;                  /*可変引数の場所の後に何個引数があるか*/ 
0055:                                  /*{S,S,M,N,N,N}: mulBcnt=1, mulAcnt=3*/ 
0056: };                               /*   ~~~                             */ 
0057:  
0058: /** 
0059:  * # STRUCT # 
0060:  * 計算式構造体 
0061:  */ 
0062: struct mssCal { 
0063:   struct Func *func;          /* 関数情報*/ 
0064:   int         argCnt;         /* 引数の数*/ 
0065:   struct Arg  arg[MaxCalArg]; /* 引数*/ 
0066:   int         retType;        /* このノードの返値タイプ*/ 
0067:   struct mssCal *parent;      /* 親ノード*/ 
0068:   regex_t regex;              /* 正規表現を使う関数の場合、そのコンパイル結果*/ 
0069: }; 
0070:  
0071: /** 
0072:  * # PROTOTYPE #  
0073:  */ 
0074: void mssCalReadFuncIsFldRec(struct mssCal *cal,struct mssFldRec *fr); 
0075: void mssCalReadFuncIsFRK(struct mssCal *cal,struct mssFldRecKey *frk); 
0076: void mssCalReadFuncIsFRD(struct mssCal *cal,struct mssFldRecDbl *frd); 
0077: struct mssCal * mssCalCompile(char *str, struct mssHeader *hd); 
0078: void mssCalShowTree(struct mssCal *cal,int level); 
0079: MssValue mssCalculate(struct mssCal *cal, char **pnt); 
0080: void mssCalFree(struct mssCal *cal); 
0081:  
0082: #endif /*_CAL_H*/