Changeset 265 for trunk/idl-compiler/c
- Timestamp:
- Mar 24, 2007, 9:08:34 PM (18 years ago)
- Location:
- trunk/idl-compiler/c
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/idl-compiler/c/nom-idl-compiler.c
r264 r265 78 78 /* Symbols defined for our IDL language. 79 79 Keep this in synch with the defined enums! */ 80 constSYMBOL idlSymbols[]={80 SYMBOL idlSymbols[]={ 81 81 {"interface", IDL_SYMBOL_INTERFACE, KIND_UNKNOWN}, /* 71 */ 82 82 {"NOMCLASSVERSION", IDL_SYMBOL_CLSVERSION, KIND_UNKNOWN}, … … 103 103 SYMBOLINFO curSymbol; 104 104 105 /* Holding the current state of parsing and pointers to necessary lists. */ 106 PARSEINFO parseInfo={0}; 105 107 106 108 PINTERFACE findInterfaceFromName(gchar* chrName) … … 123 125 GTokenValue value; 124 126 125 if(G_TOKEN_IDENTIFIER==curToken) 126 return g_strdup(value.v_identifier); 127 else 128 { 129 /* It's one of our symbols. */ 130 PSYMBOLINFO psi; 131 132 if(curToken<=G_TOKEN_LAST) 133 g_scanner_unexp_token(gScanner, 134 G_TOKEN_SYMBOL, 135 NULL, 136 NULL, 137 NULL, 138 "Error in NOMINSTANCEVAR()", 139 TRUE); /* is_error */ 140 141 psi=(PSYMBOLINFO)gScanner->user_data; 142 return psi->pSymbols[curToken-G_TOKEN_LAST-1].chrSymbolName; 143 } 127 value=gScanner->value; 128 129 switch(curToken) 130 { 131 case G_TOKEN_IDENTIFIER: 132 return g_strdup(value.v_identifier); 133 break; 134 case G_TOKEN_SYMBOL: 135 { 136 /* It's one of our symbols. */ 137 PSYMBOL pCurSymbol; 138 139 pCurSymbol=value.v_symbol; 140 return g_strdup(pCurSymbol->chrSymbolName); 141 break; 142 } 143 default: 144 g_scanner_unexp_token(gScanner, 145 G_TOKEN_SYMBOL, 146 NULL, 147 NULL, 148 NULL, 149 "", 150 TRUE); /* is_error */ 151 152 break; 153 } 154 return "unknown"; 144 155 } 145 156 … … 159 170 switch(curToken) 160 171 { 161 case IDL_SYMBOL_INTERFACE:162 parseInterface(token);163 break;164 172 case '#': 165 173 parseHash(); 166 174 break; 167 175 case G_TOKEN_SYMBOL: 176 { 177 PSYMBOL pCurSymbol=value.v_symbol; 178 switch(pCurSymbol->uiSymbolToken) 179 { 180 case IDL_SYMBOL_INTERFACE: 181 parseInterface(token); 182 break; 183 default: 184 break; 185 } 186 break; 187 } 168 188 #if 0 169 189 case G_TOKEN_IDENTIFIER: … … 226 246 } 227 247 248 static gint funcSymbolCompare(gconstpointer a, gconstpointer b) 249 { 250 if(a==b) 251 return 0; 252 253 if(a<b) 254 return -1; 255 256 return 1; 257 }; 228 258 /* 229 259 … … 291 321 g_printf("\n"); 292 322 323 324 293 325 gScanner=g_scanner_new(NULL); 294 326 gScanner->user_data=(gpointer)&curSymbol; … … 306 338 g_scanner_set_scope(gScanner, idScope); 307 339 /* Load our own symbols into the scanner. We use the default scope for now. */ 340 parseInfo.pSymbolTree=g_tree_new((GCompareFunc) funcSymbolCompare); 308 341 while(pSymbols->chrSymbolName) 309 342 { 310 g_scanner_scope_add_symbol(gScanner, idScope, pSymbols->chrSymbolName, GINT_TO_POINTER(pSymbols->uiSymbolToken)); 343 g_scanner_scope_add_symbol(gScanner, idScope, pSymbols->chrSymbolName, 344 pSymbols); 345 g_tree_insert(parseInfo.pSymbolTree, pSymbols, pSymbols->chrSymbolName); 311 346 pSymbols++; 312 347 } 313 gScanner->config->symbol_2_token=TRUE;348 // gScanner->config->symbol_2_token=TRUE; 314 349 315 350 parseIt(); 316 351 317 //if(pInterfaceArray->len)318 //printInterface();352 if(pInterfaceArray->len) 353 printInterface(); 319 354 320 355 g_scanner_destroy(gScanner); -
trunk/idl-compiler/c/token.c
r264 r265 46 46 is e.g. a typespec or just a var name. 47 47 */ 48 void set SymbolInfo(GTokenType token)48 void setCurSymbolInfo(void) 49 49 { 50 50 PSYMBOLINFO psi; … … 52 52 psi=(PSYMBOLINFO)gScanner->user_data; 53 53 54 switch( token)54 switch(curToken) 55 55 { 56 56 case G_TOKEN_IDENTIFIER: … … 61 61 break; 62 62 } 63 if(token>G_TOKEN_LAST) 64 { 65 psi->uiCurSymbolKind=psi->pSymbols[token-G_TOKEN_LAST-1].uiKind; 63 if(curToken==G_TOKEN_SYMBOL) 64 { 65 GTokenValue value; 66 PSYMBOL pCurSymbol; 67 68 value=gScanner->value; 69 pCurSymbol=value.v_symbol; 70 71 psi->uiCurSymbolKind=pCurSymbol->uiKind; 66 72 } 67 73 } … … 75 81 } 76 82 77 static guint getKindFromTokenType(GTokenType token) 78 { 79 if(token>G_TOKEN_LAST) 80 { 81 PSYMBOLINFO psi; 83 /* This token is not necessarily the current token! */ 84 static guint getKindOfNextToken() 85 { 86 /* Load info into gScanner */ 87 g_scanner_peek_next_token(gScanner); 88 89 if(gScanner->next_token==G_TOKEN_SYMBOL) 90 { 91 GTokenValue value; 92 PSYMBOL pCurSymbol; 93 94 value=gScanner->next_value; 95 pCurSymbol=value.v_symbol; 82 96 83 psi=(PSYMBOLINFO)gScanner->user_data; 84 return psi->pSymbols[token-G_TOKEN_LAST-1].uiKind; 85 } 86 switch(token) 97 return pCurSymbol->uiKind; 98 } 99 switch(gScanner->next_token) 87 100 { 88 101 case G_TOKEN_IDENTIFIER: … … 98 111 } 99 112 113 #if 0 100 114 guint queryNextTokensKind(void) 101 115 { 102 116 return getKindFromTokenType(gScanner->next_token); 103 117 } 104 118 #endif 105 119 106 120 /* Well, the name says all... */ … … 108 122 { 109 123 curToken = g_scanner_get_next_token(gScanner); 110 set SymbolInfo(curToken);124 setCurSymbolInfo(); 111 125 } 112 126 113 127 gboolean matchNextKind(guint uiKind) 114 128 { 115 GTokenType token; 116 117 token=g_scanner_peek_next_token(gScanner); 118 if(uiKind==getKindFromTokenType(token)) 129 if(uiKind==getKindOfNextToken()) 119 130 { 120 131 getNextToken(); … … 158 169 switch(token) 159 170 { 160 case IDL_SYMBOL_INTERFACE: 161 g_message("Token: %d (IDL_SYMBOL_INTERFACE)\t\t\t (LINE %d)", token, g_scanner_cur_line(gScanner)); 162 break; 171 case G_TOKEN_SYMBOL: 172 { 173 PSYMBOL pCurSymbol=value.v_symbol; 174 175 switch(pCurSymbol->uiSymbolToken) 176 { 177 case IDL_SYMBOL_INTERFACE: 178 g_message("Token: %d (IDL_SYMBOL_INTERFACE)\t\t\t (LINE %d)", 179 pCurSymbol->uiSymbolToken, g_scanner_cur_line(gScanner)); 180 break; 181 case IDL_SYMBOL_DEFINE: 182 g_message("Token: %d (IDL_SYMBOL_DEFINE)\t\t\t", pCurSymbol->uiSymbolToken); 183 break; 184 case IDL_SYMBOL_IFDEF: 185 g_message("Token: %d (IDL_SYMBOL_IFDEF)\t\t\t", pCurSymbol->uiSymbolToken); 186 break; 187 case IDL_SYMBOL_ENDIF: 188 g_message("Token: %d (IDL_SYMBOL_ENDIF)\t\t\t", pCurSymbol->uiSymbolToken); 189 break; 190 default: 191 { 192 PSYMBOLINFO psi; 193 psi=(PSYMBOLINFO)gScanner->user_data; 194 195 g_message("Token: %d (%s)\t\t\t (LINE %d)", pCurSymbol->uiSymbolToken, 196 pCurSymbol->chrSymbolName, g_scanner_cur_line(gScanner)); 197 198 break; 199 } 200 }/* switch */ 201 break; 202 } 163 203 case G_TOKEN_IDENTIFIER: 164 204 g_message("Token: %d (G_TOKEN_IDENTIFIER)\t\t%s (LINE %d)", … … 198 238 g_message("Token: %d (G_TOKEN_INT)\t\t\t%ld", token, value.v_int); 199 239 break; 200 case IDL_SYMBOL_DEFINE:201 g_message("Token: %d (IDL_SYMBOL_DEFINE)\t\t\t", token);202 break;203 case IDL_SYMBOL_IFDEF:204 g_message("Token: %d (IDL_SYMBOL_IFDEF)\t\t\t", token);205 break;206 case IDL_SYMBOL_ENDIF:207 g_message("Token: %d (IDL_SYMBOL_ENDIF)\t\t\t", token);208 break;209 240 default: 210 { 211 PSYMBOLINFO psi; 212 psi=(PSYMBOLINFO)gScanner->user_data; 213 214 if(token>G_TOKEN_LAST) 215 g_message("Token: %d (%s)\t\t\t (LINE %d)", token, 216 psi->pSymbols[token-G_TOKEN_LAST-1].chrSymbolName, g_scanner_cur_line(gScanner)); 217 else 218 g_message("Token: %d (---)\t\t\t (LINE %d)", token, g_scanner_cur_line(gScanner)); 241 { 242 g_message("Token: %d (---)\t\t\t (LINE %d)", token, g_scanner_cur_line(gScanner)); 219 243 break; 220 244 } /* default */
Note:
See TracChangeset
for help on using the changeset viewer.