4 //#include "gmr/parser.tab.h"
8 #define T_OPT_MODULES 1
9 #define T_OPT_DEFCONFIG_LIST 2
11 #define T_OPT_ALLNOCONFIG_Y 4
22 #define T_PFX_CHAR 2000
25 #define TF_COMMAND (1<<0)
26 #define TF_PARAM (1<<1)
27 #define TF_OPTION (1<<2)
31 * token and opr-char can be defined in diffrent state.
33 enum ENM_TOKEN_SET_STATE
{
34 ENM_FLAG_PREPROC
= (1<<8),
35 ENM_FLAG_CMDLINE
= (1<<9),
36 ENM_FLAG_EXT
= (1<<10),
37 ENM_FLAG_SH_SCRIPT
= (1<<11),
38 ENM_FLAG_SH_LANG
= (1<<12),
40 ENM_PREPROC
= ( (1<<8) | (1<<9) | (1<<10) | (1<<11) | (1<<12) ),
41 ENM_CMDLINE
= ( (1<<9) | (1<<11) | (1<<12) ),
43 ENM_SH_SCRIPT
= ( (1<<11) | (1<<12) ),
44 ENM_SH_LANG
= (1<<12),
47 #define PTR_CHAR_CNT (sizeof(char *))
48 /* judge this char to get if it is a ptr value. */
49 #define CHAR_FLAG_BYTE (PTR_CHAR_CNT-1)
51 #define TOKEN_TBL_ITEM_CNT (1<<5)
52 #define MAX_TOKEN_IDX_CNT 5
59 enum symbol_type stype;
63 // for code compatible.
64 #define kconf_id token_id
66 typedef struct token_id kconf_id
;
68 #define TOKEN_FLAG(token) ((token)&(0xFFFF))
69 #define TOKEN_TYPE(token) (((token)>>16)&(0xFFFF))
71 typedef struct __tag_SRC_FILE_DESC SRC_FILE_DESC
;
73 typedef int (*TOKEN_ID_PROC
) (int evt
, int token
, register const char *str
, register unsigned int len
, SRC_FILE_DESC
*psrcfile
);
78 * normally, ptr is larger then 0xFFFFFF.
79 * but if it is opr-char-string, store string
80 * in ptr buffer, this will decrease memory cost.
84 /* opr-char, it will decrease memory cost */
85 char chars
[PTR_CHAR_CNT
];
94 unsigned char tokensetflags;
100 /* TBD: put symbol_type to other */
101 unsigned short stype
;
102 // enum symbol_type stype;
109 struct linear
*prev
, *next
;
113 struct token_id_list
{
116 struct linear
*tbl_ptr
;
117 struct token_id
*tbl_idx
[MAX_TOKEN_IDX_CNT
];
120 #define ARRAY_SIZE(name) (sizeof(name)/sizeof(name[0]))
122 #define token_id_lookup(str, len) (*pfn_token_id_lookup) (str, len)
123 #define pfx_char_lookup(str, len) (*pfn_pfx_char_lookup) (str, len)
124 #define opr_char_lookup(str, len) (*pfn_opr_char_lookup) (str, len)
127 //extern struct token_id token_id_array[];
129 extern const struct token_id
*(*pfn_token_id_lookup
) (register const char *str
, register unsigned int len
);
130 extern const struct token_id
*(*pfn_pfx_char_lookup
) (register const char punct
);
131 extern const struct token_id
*(*pfn_opr_char_lookup
) (register const char *str
, register unsigned int len
);
133 extern const char *name_look_up_token (int token
);
134 extern const struct token_id
*punct_look_up_token (register const char punct
);
135 extern const struct token_id
*opr_char_lookup_def (register const char *str
, register unsigned int len
);
136 extern const struct token_id
*pfx_char_lookup_def (register const char punct
);
137 extern const struct token_id
*token_id_lookup_def (register const char *str
, register unsigned int len
);
138 extern const struct token_id
*token_id_lookup_w_idx (register const char *str
, register unsigned int len
);
140 extern int token_id_init (void);
141 //extern const struct token_id *token_id_lookup(register const char *str, register unsigned int len);
144 #define MAX_TOKEN_ID_TBL_SIZE 256
145 #define MAX_RSVWD_LEN 32
147 #define MAX_TOKEN_NUM 128
148 #define MAX_STATE_NUM 128
153 TYPE_WORD
= 2, // include multi-byte
154 TYPE_PUNCT
= 3, // pfx/pair/opr char
160 TYPE_BUFF_FULL
= 9, // buffer is full
164 enum STATE_TOKEN_FLAGS
{
170 #define SET_STATE_FLAG(state, flag) ((state)->u32Flag |= ~(flag))
171 #define CLR_STATE_FLAG(state, flag) ((state)->u32Flag &= (flag))
172 #define CHK_STATE_FLAG(state, flag) ((state)->u32Flag & (flag))
174 extern void QStackIF_PrintInfo (QSTACK
*pstQStack
);
175 extern void QStackIF_PrintBuff (QSTACK
*pstQStack
);
177 #define STATE_SWITCH(pfile, state) do { \
178 QStackIF_Push(&(pfile)->stStateStk, (uint32)(pfile)->pstCurrTokenState); \
179 (pfile)->pstCurrTokenState = state_alloc_init((pfile), (state)); \
180 (pfile)->pstCurrTokenState->paired_state = 0; \
183 // int paired_token_tmp = (pfile)->pstCurrTokenState->paired_token; \
184 // char *state_token_str_tmp = (pfile)->pstCurrTokenState->state_token_str; \
186 // (pfile)->pstCurrTokenState->paired_token = paired_token_tmp; \
187 // (pfile)->pstCurrTokenState->state_token_str = state_token_str_tmp; \
190 #define STATE_RECOVERY(pfile) do { \
191 free((void *)(pfile)->pstCurrTokenState); \
192 (pfile)->pstCurrTokenState = (TOKEN_PROC_STATE *)QStackIF_Pop(&(pfile)->stStateStk); \
193 (pfile)->pstStateInfo = (pfile)->pstCurrTokenState->pstStateInfo; \
196 #define STATE_CHK(pfile, state) ((pfile)->pstCurrTokenState->iStateId == (state))
198 #define STATE_VCHK(pvstate, state) ((pvstate)->iStateId == (state))
202 typedef struct __tag_TOKEN_PROC_STATE TOKEN_PROC_STATE
;
203 typedef int (*TOKEN_PROC
) (char *str
, TOKEN_TYPE type
, TOKEN_PROC_STATE
*pstTokenState
);
205 /* static state info struct */
206 typedef struct __tag_TOKEN_PROC_STATE_INFO
{
211 TOKEN_PROC pfnTokenStrProc
;
212 const struct token_id
*pstTokenTbl
;
214 } astTokenTypeTbl
[TYPE_MAX
];
215 short *api16TokenNameLen
[TYPE_MAX
];
216 } TOKEN_PROC_STATE_INFO
, *PTOKEN_PROC_STATE_INFO
;
218 /* run-time state struct */
219 typedef struct __tag_TOKEN_PROC_STATE
{
221 TOKEN_PROC_STATE_INFO
*pstStateInfo
;
228 TOKEN_ID_PROC pfnTokenProc
;
230 char *state_token_str
;
231 TOKEN_ID_PROC pfnPairTokenProc
;
235 /* statement token info */
238 uint32 u32CodeBlockLvl
;
239 } TOKEN_PROC_STATE
, *PTOKEN_PROC_STATE
;
241 typedef struct __tag_SRC_FILE_DESC
{
246 TOKEN_PROC_STATE
*pstCurrTokenState
;
247 TOKEN_PROC_STATE_INFO
*pstStateInfo
;
248 TOKEN_PROC_STATE_INFO
*pstStateInfoTbl
;
251 /* global token tbl for src file */
252 TOKEN_PROC pfnMTokenStrProc
;
253 const struct token_id
*pstMTokenTbl
;
254 unsigned short *pu16MTokenNameLen
;
256 /* for getchar() buffering */
259 char aBuff
[2][512*8];
261 /* token string processing info */
266 /* one type of token string processing */
267 char aTokenStrBuff
[512];
271 /* parsing state stack */
275 } SRC_FILE_DESC
, *PSRC_FILE_DESC
;
277 extern TOKEN_PROC_STATE
*state_alloc_init (SRC_FILE_DESC
*pfiledesc
, int iState
);
279 #endif /* __TOKEN_ID_H */