00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef _KAPI_LEX_H_
00028 #define _KAPI_LEX_H_
00029
00030 #include "kapi_bv.h"
00031 #include "kapi_ia64.h"
00032 #include "kapi_internal.h"
00033
00034 typedef int tok_t;
00035
00036 typedef enum _TYPE_TYPE {
00037 ttyINT,
00038 ttyREAL,
00039 ttySTRING,
00040
00041 ttyENUM,
00042
00043 ttyBITMASK,
00044 ttyARRAY,
00045 ttyEXPRESSION,
00046
00047
00048 ttyIDENT,
00049
00050 ttyUNKNOWN
00051 } tty_t;
00052
00053 typedef enum _TREDEF_STATUS {
00054 tredefSTATUS_OK,
00055 tredefSTATUS_MARKED_NOREDEFINE,
00056 tredefSTATUS_ALREADY_REDEFINED,
00057 tredefSTATUS_USED_IN_LIMIT
00058 } tredef_t;
00059
00060 typedef enum _IDENT_TYPE {
00061 ityENUMCONST,
00062 ityTYPENAME,
00063 ityVARNAME,
00064 ityATTRIBUTENAME,
00065 ityRESERVED,
00066 ityUNKNOWN
00067 } ity_t;
00068
00069
00070 typedef union _VALUE {
00071 int i;
00072 double r;
00073 char *pch;
00074 int enu;
00075 bv_t bv;
00076 struct _SYM_TABLE_NODE *pstn;
00077 } val_t;
00078
00079 typedef struct _VALUE_NODE {
00080 struct _VALUE_NODE *pvalnNext;
00081 val_t val;
00082 } valn_t;
00083
00084 typedef enum _VALUE_STRUCTURE {
00085 valsUNSET,
00086 valsRANGE,
00087 valsLIST,
00088 valsSCALAR,
00089 valsNOREDEFINE
00090 } vals_t;
00091
00092
00093 typedef enum _OPERATOR_E {
00094
00095 opNONE=0,
00096 opPLUS,
00097 opDIV
00098 } arithmetic_op_t;
00099
00100
00101
00102 typedef struct _VALUE_NODE_HDR {
00103 int fNoRedefine;
00104 int fRHS;
00105 vals_t vals;
00106 tty_t tty;
00107 valn_t *pvalnList;
00108 } valhdr_t;
00109
00110 typedef struct _LIMIT_PARSE_STRUCT {
00111 struct _LIMIT_PARSE_STRUCT *plimpNext;
00112 valn_t *pvalnNameList;
00113 valhdr_t valhdrValues;
00114 } limp_t;
00115
00116 typedef struct _TYPE_FIELDS {
00117 tty_t tty;
00118
00119 struct _SYM_TABLE_NODE *pstnIdent;
00120
00121 int nEnumConst;
00122 int tredefStatus;
00123 valn_t *pvalnEnums;
00124 valn_t *pvalnPreviousEnums;
00125
00126 struct _TYPE_FIELDS *ptfiBitmaskBaseType;
00127
00128 struct _TYPE_FIELDS *ptfiArrayEltType;
00129 struct _TYPE_FIELDS *ptfiArrayIndexType;
00130 } tfi_t;
00131
00132 typedef struct _ELEMENT_DESCRIPTOR {
00133 struct _ELEMENT_DESCRIPTOR *pedNext;
00134 valhdr_t valhdrValue;
00135 valhdr_t valhdrLimit;
00136 char *pchIndexName;
00137 tfi_t *ptfi;
00138 } ed_t;
00139
00140 typedef struct _VAR_FIELDS {
00141 ed_t *pedList;
00142 tfi_t *ptfi;
00143 } vfi_t;
00144
00145 typedef struct _ATTR_FIELD_HDR {
00146 int nAttr;
00147 union {
00148 struct _ATTR_FIELDS *pafi;
00149 char **dmppch;
00150 } u;
00151 } afih_t;
00152
00153 typedef struct _ATTR_FIELDS {
00154 struct _ATTR_FIELDS *pafiNext;
00155 char *pchAttrVal;
00156 } afi_t;
00157
00158 typedef struct _ENUM_FIELDS {
00159
00160 tfi_t *ptfiBaseType;
00161 } efi_t;
00162
00163 typedef struct _SYM_TABLE_NODE {
00164 ity_t ity;
00165 int fExpected;
00166
00167 int fRHS;
00168 char *pchName;
00169 union {
00170 tfi_t tfi;
00171 vfi_t vfi;
00172 efi_t efi;
00173 afih_t afih;
00174 } u;
00175 limp_t *plimpListParse;
00176 struct _SYM_TABLE_NODE *pstnNext;
00177 struct _SYM_TABLE_NODE *pstnTempNext;
00178 struct _SYM_TABLE_NODE *pstnHashNext;
00179 } stn_t;
00180
00181 typedef struct _INDEX_EXPR_TYPE {
00182 stn_t *pstn;
00183 int ietType;
00184 } iet_t;
00185
00186 typedef union _TOKVAL {
00187 int iValue;
00188 double rValue;
00189
00190 char *pch;
00191 stn_t *pstnA;
00192 val_t *pval;
00193 tfi_t *ptfi;
00194 vfi_t *pvfi;
00195 int idxVal;
00196 valhdr_t *pvalhdr;
00197 valn_t *pvaln;
00198 limp_t *plimp;
00199 } tokval_t;
00200
00201 #define YYSTYPE tokval_t
00202
00203
00204
00205 extern stn_t *kapi_pstnLookup( knobs_t *pknobs, char *pch );
00206 extern stn_t *kapi_pstnLookup_noadd( knobs_t *pknobs, char *pch );
00207 extern stn_t *kapi_pstnDelete( knobs_t *pknobs, char *pch );
00208
00209 extern void kapi_ProcessTypeDecl( stn_t *pstnTypeIdent, valhdr_t *pvalhdrList,
00210 limp_t *plimp );
00211 extern tfi_t *ptfiProcessArrayTypeSpec( stn_t *pstnIndexType, tfi_t *ptfi );
00212 extern void kapi_ProcessVarDecl( stn_t *pstnVar, tfi_t *ptfi );
00213 extern void kapi_ProcessAssignment( stn_t *pstnLHSVar, char *pchIndex,
00214 valhdr_t *pvalhdrRHS, limp_t *plimpList );
00215 extern int kapi_ProcessIndex( stn_t *pstnIndex );
00216 extern void kapi_ProcessExpect( valhdr_t *pvalhdr, int typeexpect );
00217
00218 extern tfi_t *kapi_ptfiConstructArray( tfi_t *ptfiIndexType, tfi_t *ptfiElt );
00219 extern tfi_t *kapi_ptfiConstructBitmask( tfi_t *ptfiBaseType );
00220 extern tfi_t *kapi_ptfiCheckDeclaredType( stn_t *pstnName );
00221
00222 extern tfi_t *kapi_ptfiLookup( tty_t tty, void *pvoid );
00223
00224 extern stn_t *kapi_pstnReverseTmp( stn_t *pstnList );
00225 extern valn_t * kapi_pvalnReverseTmp( valn_t *pvalnList );
00226
00227 extern void ProcessBitmaskExpr( valhdr_t *pvalhdrBitmask, valhdr_t *pvalhdrBits );
00228 extern char *ity2pchname( ity_t ity );
00229
00230 extern valn_t *pvalnMakeString( char *pch );
00231 extern valn_t *pvalnMakeEnum( char *pch );
00232 extern valn_t *pvalnMakeIdent( char *pch );
00233
00234 extern valn_t *pvalnMakeInt( int i );
00235 extern valn_t *pvalnMakeReal( double d );
00236 extern valn_t *pvalnMakeBitmask( void );
00237
00238 extern limp_t *plimpProcessLimitType( valhdr_t *pvalhdr );
00239 extern limp_t *plimpProcessLimitVariable( valhdr_t *pvalhdrTools, valhdr_t *pvalhdr );
00240
00241 extern limp_t * plimpLookup( limp_t *plimpList, char *pchToolname );
00242 extern valhdr_t *pvalhdrMake( tty_t tty, vals_t vals, valn_t *pvalnList );
00243 extern char * kapi_enumname( knobs_t *pknobs, tfi_t *ptfi, int enumconst );
00244
00245 extern int pstnEnum2idx( stn_t *pstnEnum );
00246
00247 extern void kapi_LookUpIdent_valhdr( stn_t *pstn, valhdr_t *pvalhdr, int iPos );
00248
00249 extern void kapi_LookUpIdent_val( stn_t *pstn, val_t *pval, int iPos );
00250 extern void kapi_LookUpVariable_val( stn_t *pstn, val_t *pval, int iPos );
00251
00252 extern bv_t *pbvBuild4valhdr( stn_t *pstnVar, valhdr_t *pvalhdr );
00253 extern ed_t *pedMake( char *pchIndexName, tfi_t *ptfi );
00254 extern ed_t *pedLookup4pstn( stn_t *pstnLHSVar, char *pchIndex );
00255 extern ed_t *pedLookup4ped( ed_t *ped, char *pchIndex );
00256 extern int idxped4pstn( stn_t *pstnLHSVar, char *pchIndex );
00257
00258 extern ed_t *pedGetIth( stn_t *pstnLHSVar, int iIndex );
00259 extern valn_t *pvalnGetIth( valn_t *pvalnIn, int iIndex );
00260 extern char * pchTranslateBypass2Intracluster( knobs_t *pknobs, char *pchIn );
00261
00262 extern kapi_ut_t utInterpretPortName( char *pchPort, int *piport );
00263 extern kapi_ut_t utInterpretCportName( char *pchPort, int *piport );
00264 extern kapi_cluster_t clusterInterpretpchclr( char *pchClr );
00265
00266
00267 extern int yyparse();
00268 extern void kapi_ParseFile( knobs_t *pknobs, FILE *fp );
00269 extern void kapi_ProcessAttrDecl( stn_t *pstnAttr, char *pchAttr );
00270 extern void Declare_cluster0CportMask( stn_t *pstn );
00271 extern void kapi_LookUpVariable_valhdr( stn_t *pstn, valhdr_t *pvalhdr, int iPos );
00272
00273
00274
00275 extern void kapi_ProcessArithmeticAssignment( stn_t *pstnLHSVar, char *pchIndex, valhdr_t *pvalhdrRHS);
00276 extern void kapi_ProcessAppendDecl( stn_t *pstnType, valhdr_t *pvalhdrIdents);
00277 extern valn_t *pvalnMakeArithmeticOp( char *pch );
00278 extern void pvalhdrCopy( valhdr_t *pvalhdrTarget, valhdr_t *pvalhdrSource );
00279
00280
00281
00282 #endif