00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #define ANTLR_VERSION 13333
00014 #include "pcctscfg.h"
00015 #include "pccts_stdio.h"
00016
00017 #include "charbuf.h"
00018 #include "stringbuffer.h"
00019 #include "libicl.h"
00020 #include "libicl_private.h"
00021 #include "glib.h"
00022 #include <stdio.h>
00023 #ifdef _WINDOWS
00024 #include "oaa-windows.h"
00025 #endif
00026
00027
00028 #define AST_FIELDS int isDefined; int type; char* tokenData; size_t tokenLen;
00029
00030 #define ZZCOL
00031
00032 #define USER_ZZSYN
00033
00034
00035 #define ZZLEXBUFSIZE 10485760
00036
00037 extern GByteArray* parser_dblQuoteBuf;
00038 extern char* parser_tmpStrIn;
00039 #ifdef NORMAL_GC
00040 extern void* GC_debug_malloc(size_t, const char*, int);
00041 extern char* gc_strdup(char*);
00042 #endif
00043
00044 #ifdef NORMAL_GC
00045 #define zzcr_ast(ast, attr, ttype, text) { \
00046 if(((ttype) == ICLDATAQ) || \
00047 ((ttype) == DBLQUOTED)) { \
00048 char* buf = parser_dblQuoteBuf->data; \
00049 g_byte_array_free(parser_dblQuoteBuf, FALSE); \
00050
00051
00052
00053
00054 \
00055 ast->tokenData = buf; \
00056 ast->tokenLen = parser_dblQuoteLen; \
00057 } \
00058 else { \
00059 if(zzbufovf) { \
00060 ast->tokenLen = ZZLEXBUFSIZE; \
00061 ast->tokenData = (char*)GC_debug_malloc(ZZLEXBUFSIZE + 1, __FILE__, __LINE__); \
00062 strncpy(ast->tokenData, text, ZZLEXBUFSIZE); \
00063 fprintf(stderr, "ZZLEXBUFSIZE overflowed (%i)\n", ZZLEXBUFSIZE); \
00064 } \
00065 else { \
00066 ast->tokenData = gc_strdup(text); \
00067 ast->tokenLen = strlen(text); \
00068 } \
00069 } \
00070 ast->type = (ttype); \
00071 ast->isDefined = 1; \
00072 ast->right = NULL; \
00073 ast->down = NULL; \
00074 \
00075 };
00076
00077
00078
00079
00080
00081
00082
00083
00084 #undef zzd_ast
00085
00086 #else
00087 #define zzcr_ast(ast, attr, ttype, text) { \
00088 if(((ttype) == ICLDATAQ) || \
00089 ((ttype) == DBLQUOTED)) { \
00090 char* buf = parser_dblQuoteBuf->data; \
00091 g_byte_array_free(parser_dblQuoteBuf, FALSE); \
00092
00093
00094
00095
00096 \
00097 ast->tokenData = buf; \
00098 ast->tokenLen = parser_dblQuoteLen; \
00099 } \
00100 else { \
00101 if(zzbufovf) { \
00102 ast->tokenLen = ZZLEXBUFSIZE; \
00103 ast->tokenData = (char*)malloc(ZZLEXBUFSIZE + 1); \
00104 strncpy(ast->tokenData, text, ZZLEXBUFSIZE); \
00105 fprintf(stderr, "ZZLEXBUFSIZE overflowed (%i)\n", ZZLEXBUFSIZE); \
00106 } \
00107 else { \
00108 ast->tokenData = strdup(text); \
00109 ast->tokenLen = strlen(text); \
00110 } \
00111 } \
00112 ast->type = (ttype); \
00113 ast->isDefined = 1; \
00114 ast->right = NULL; \
00115 ast->down = NULL; \
00116 \
00117 };
00118
00119
00120
00121
00122
00123
00124
00125 #undef zzd_ast
00126
00127 #endif
00128
00129 extern int parser_dblQuoteLen;
00130 extern ICLTerm* parser_getTermFromString(char* str, size_t len);
00131 extern ICLTerm* parser_getTermFromStringDebug(char* str, size_t len);
00132 extern int parser_getTermFromBuf(ICLTerm** result, stringbuffer_t* buf, int* lookedAhead);
00133 extern int parser_getNetTermFromBuf(ICLTerm** result, stringbuffer_t* buf);
00134
00135 extern int parser_error;
00136 extern int parser_setDebug(int b);
00137 extern void handleDblQuotedData();
00138 #define LL_K 2
00139 #define GENAST
00140
00141 #include "ast.h"
00142
00143 #define zzSET_SIZE 8
00144 #include "antlr.h"
00145 #include "tokens.h"
00146 #include "dlgdef.h"
00147 #include "mode.h"
00148
00149
00150
00151 #ifndef PCCTS_PURIFY
00152 #define PCCTS_PURIFY(r,s) memset((char *) &(r),'\0',(s));
00153 #endif
00154
00155 #include "ast.c"
00156 zzASTgvars
00157
00158 ANTLR_INFO
00159
00160
00161 extern int zzSyntaxErrCount;
00162 extern void (*zzerr)(const char*);
00163 int parser_error = FALSE;
00164 int parser_DEBUG = FALSE;
00165 int parser_dblQuoteLen;
00166 GByteArray* parser_dblQuoteBuf = NULL;
00167 char* parser_tmpStrIn = NULL;
00168 ICLTerm* parser_getTermFromStringReal(char* str, size_t len, int debug);
00169 static stringbuffer_t* currentBuf = NULL;
00170 enum parser_state_vals {parser_dblquote_CONTINUE, parser_dblquote_FOUNDQUOTE};
00171 static int parser_dblquote_state = 0;
00172 static size_t parser_savedIndex = 0;
00173 static int parser_savedIndexSet = FALSE;
00174
00180 void handleDblQuotedData() {
00181 struct zzdlg_state dlgState;
00182 int done = FALSE;
00183 int nextChar = 0;
00184 char toAppend[1];
00185
00186
00187
00188 zzsave_dlg_state(&dlgState);
00189
00190
00191 if(parser_savedIndexSet) {
00192 stringbuffer_setIndex(currentBuf, parser_savedIndex);
00193 }
00194 else {
00195 parser_dblQuoteBuf = g_byte_array_new();
00196 }
00197
00198
00199
00200
00201
00202
00203 while(!done) {
00204 nextChar = (*(dlgState.func_ptr))();
00205 if(nextChar == EOF) {
00206 done = TRUE;
00207
00208 parser_dblQuoteLen = 0;
00209 zzrestore_dlg_state(&dlgState);
00210 parser_savedIndex = stringbuffer_getIndex(currentBuf);
00211 parser_savedIndexSet = TRUE;
00212 return;
00213 }
00214 switch(parser_dblquote_state) {
00215 case 0:
00216 if(nextChar == '"') {
00217 parser_dblquote_state = parser_dblquote_FOUNDQUOTE;
00218 break;
00219 }
00220 else {
00221 toAppend[0] = nextChar;
00222
00223 g_byte_array_append(parser_dblQuoteBuf, (guint8*)toAppend, 1);
00224 }
00225 break;
00226 case 1:
00227 parser_dblquote_state = parser_dblquote_CONTINUE;
00228 if(nextChar == '"') {
00229
00230 g_byte_array_append(parser_dblQuoteBuf, (guint8*)"\"", 1);
00231 }
00232 else {
00233
00234 stringbuffer_rewind(currentBuf, 2);
00235 done = TRUE;
00236 parser_dblQuoteLen = parser_dblQuoteBuf->len;
00237 zzrestore_dlg_state(&dlgState);
00238 parser_savedIndex = 0;
00239 parser_savedIndexSet = FALSE;
00240 return;
00241 }
00242 break;
00243 }
00244 }
00245 }
00246
00247 void parser_errorWriter(const char* s) {
00248 int i = 0;
00249 if(parser_DEBUG) {
00250 fprintf(stderr, "Error with text: [");
00251 for(i = 0; s[i] != '\0'; ++i) {
00252 fprintf(stderr, " %o ", s[i]);
00253 }
00254 fprintf(stderr, "\n");
00255 zzerrstd(s);
00256 }
00257 }
00258
00259 int parser_setDebug(int b) {
00260 int ret = parser_DEBUG;
00261 parser_DEBUG = b;
00262 return ret;
00263 }
00264
00265 void zzsynstd(char *text, int tok, char *egroup, SetWordType *eset, int etok, int k, char *bad_text) {
00266 zzSyntaxErrCount++;
00267 fprintf(stderr, "line %d: syntax error at \"%s\"", zzline, (tok==zzEOF_TOKEN)?"EOF":bad_text);
00268 if ( !etok && !eset ) {fprintf(stderr, "\n"); return;}
00269 if ( k==1 ) fprintf(stderr, " missing");
00270 else
00271 {
00272 fprintf(stderr, "; \"%s\" not", bad_text);
00273 if ( zzset_deg(eset)>1 ) fprintf(stderr, " in");
00274 }
00275 if ( zzset_deg(eset)>0 ) zzedecode(eset);
00276 else fprintf(stderr, " %s", zztokens[etok]);
00277 if ( strlen(egroup) > 0 ) fprintf(stderr, " in %s", egroup);
00278 fprintf(stderr, "\n");
00279
00280 }
00281
00282 void zzsyn(char *text, int tok, char *egroup, SetWordType *eset, int etok, int k, char *bad_text) {
00283 if(parser_DEBUG) {
00284 fprintf(stderr, "standard error text:\n");
00285 zzsynstd(text, tok, egroup, eset, etok, k, bad_text);
00286 fprintf(stderr, "end standard error text\n");
00287 }
00288 parser_error = TRUE;
00289 }
00290
00291 void printAst(AST* a) {
00292 if(a == NULL) {
00293 return;
00294 }
00295 if(a->isDefined != 1) {
00296 return;
00297 }
00298 printf(" [type %i][text %s] ", a->type, a->tokenData);
00299 }
00300
00301 void before(AST* a) {
00302 (void)a;
00303 printf(" (");
00304 }
00305
00306 void after(AST* a) {
00307 (void)a;
00308 printf(")");
00309 }
00310
00311 int currentBuf_read() {
00312 return stringbuffer_read(currentBuf);
00313 }
00314
00315 void traverse(AST* tree,
00316 void (*func)(AST*, void*),
00317 void (*pre)(AST*, void*),
00318 void (*post)(AST*, void*),
00319 void* data) {
00320 while(tree != NULL) {
00321 if(tree->down != NULL) {
00322 if(pre != NULL) {
00323 (*pre)(tree, data);
00324 }
00325 }
00326 if(func != NULL) {
00327 (*func)(tree, data);
00328 }
00329 traverse(tree->down, func, pre, post, data);
00330 if(tree->down != NULL) {
00331 if(post != NULL) {
00332 (*post)(tree, data);
00333 }
00334 }
00335 tree = tree->right;
00336 }
00337 }
00338
00339 void parser_freeASTData(AST* a, void* dummy) {
00340 (void)dummy;
00341 if(a->isDefined == 1) {
00342 #ifdef NORMAL_GC
00343 GC_debug_free(a->tokenData);
00344 #else
00345 free(a->tokenData);
00346 #endif
00347 }
00348 }
00349
00350 void parser_freeTree(AST* root) {
00351 traverse(root, parser_freeASTData, NULL, NULL, NULL);
00352 }
00353
00354 int astToTerm(AST* root, ICLTerm** result, int debug) {
00355 int done = FALSE;
00356 GPtrArray* parentsList = g_ptr_array_new();
00357 GPtrArray* termList = g_ptr_array_new();
00358 AST* currentAST = NULL;
00359 ICLTerm* currentTerm = NULL;
00360 gint64* intp;
00361 double* dblp;
00362 char* endp;
00363 ICLStructType* st;
00364 ICLGroupType* gt;
00365 int parentIndex = 0;
00366
00367 if(debug || parser_DEBUG) {
00368 debug = TRUE;
00369 }
00370
00371 g_ptr_array_add(parentsList, root);
00372 while(parentsList->len != 0) {
00373 currentAST = (AST*)g_ptr_array_index(parentsList, parentsList->len - 1);
00374 if(currentAST->isDefined != 1) {
00375 (void)g_ptr_array_remove_index(parentsList, parentIndex);
00376 continue;
00377 }
00378 #ifdef NORMAL_GC
00379 currentTerm = (ICLTerm*)GC_debug_malloc(sizeof(ICLTerm), __FILE__, __LINE__);
00380 printf("Allocated new term at %p\n", currentTerm);
00381 #else
00382 currentTerm = (ICLTerm*)malloc(sizeof(ICLTerm));
00383 #endif
00384 currentTerm->magic_cookie = ICL_MAGIC_COOKIE;
00385 currentTerm->refCount = 1;
00386 currentTerm->glibAlloc = 0;
00387 currentTerm->needsQuotes = 0;
00388 g_ptr_array_add(termList, currentTerm);
00389 switch(currentAST->type) {
00390 case STR:
00391 currentTerm->iclType = icl_str_type;
00392 if(currentAST->tokenData[0] == '\'') {
00393 icl_setStrFromProperlyQuoted(currentAST->tokenData, currentTerm);
00394 }
00395 else {
00396 currentTerm->p = currentAST->tokenData;
00397 }
00398 currentTerm->len = strlen(currentTerm->p);
00399 if(debug) {
00400 printf("Found str: %s\n", currentTerm->p);
00401 }
00402 break;
00403 case VAR:
00404 currentTerm->iclType = icl_var_type;
00405 currentTerm->p = currentAST->tokenData;
00406 currentTerm->len = currentAST->tokenLen;
00407 if(debug) {
00408 printf("Found var: %s\n", currentTerm->p);
00409 }
00410 break;
00411 case INT:
00412 currentTerm->iclType = icl_int_type;
00413 #ifdef NORMAL_GC
00414 intp = (gint64*)GC_debug_malloc(sizeof(gint64), __FILE__, __LINE__);
00415 #else
00416 intp = (gint64*)malloc(sizeof(gint64));
00417 #endif
00418 *intp = strtoll(currentAST->tokenData, &endp, 10);
00419 if(*endp != '\0') {
00420 if(debug) {
00421 printf("Bad int\n");
00422 }
00423 parser_error = TRUE;
00424 g_ptr_array_free(termList, TRUE);
00425 g_ptr_array_free(parentsList, TRUE);
00426 return FALSE;
00427 }
00428 free(currentAST->tokenData);
00429 currentAST->tokenData = NULL;
00430 currentAST->tokenLen = 0;
00431 currentTerm->p = intp;
00432 currentTerm->len = sizeof(gint64);
00433 if(debug) {
00434 printf("Found int: %lld\n", *((gint64*)currentTerm->p));
00435 }
00436 break;
00437 case FLOAT:
00438 currentTerm->iclType = icl_float_type;
00439 #ifdef NORMAL_GC
00440 dblp = (double*)GC_debug_malloc(sizeof(double), __FILE__, __LINE__);
00441 #else
00442 dblp = (double*)malloc(sizeof(double));
00443 #endif
00444 *dblp = strtod(currentAST->tokenData, &endp);
00445 if(*endp != '\0') {
00446 if(debug) {
00447 printf("Bad float\n");
00448 }
00449 parser_error = TRUE;
00450 g_ptr_array_free(termList, TRUE);
00451 g_ptr_array_free(parentsList, TRUE);
00452 return FALSE;
00453 }
00454 free(currentAST->tokenData);
00455 currentAST->tokenData = NULL;
00456 currentAST->tokenLen = 0;
00457 currentTerm->p = dblp;
00458 currentTerm->len = sizeof(double);
00459 if(debug) {
00460 printf("Found float: %lf\n", *((double*)currentTerm->p));
00461 }
00462 break;
00463 case STRUCT:
00464 currentTerm->iclType = icl_struct_type;
00465 #ifdef NORMAL_GC
00466 st = (ICLStructType*)GC_debug_malloc(sizeof(ICLStructType), __FILE__, __LINE__);
00467 #else
00468 st = (ICLStructType*)malloc(sizeof(ICLStructType));
00469 #endif
00470 st->functor = icl_NewStrNoCopy(currentAST->tokenData);
00471 st->args = NULL;
00472 st->numArgs = 0;
00473 currentTerm->p = st;
00474 currentTerm->len = sizeof(st);
00475 if(debug) {
00476 printf("Found struct: name at %p: %s\n", st->functor->p, st->functor->p);
00477 }
00478 break;
00479 case LIST:
00480 free(currentAST->tokenData);
00481 currentTerm->iclType = icl_list_type;
00482 currentTerm->p = NULL;
00483 currentTerm->len = sizeof(ICLListType*);
00484 if(debug) {
00485 printf("Found list\n");
00486 }
00487 break;
00488 case GROUP:
00489 currentTerm->iclType = icl_group_type;
00490 #ifdef NORMAL_GC
00491 gt = (ICLGroupType*)GC_debug_malloc(sizeof(ICLGroupType), __FILE__, __LINE__);
00492 #else
00493 gt = (ICLGroupType*)malloc(sizeof(ICLGroupType));
00494 #endif
00495 gt->list = NULL;
00496 gt->startChar = currentAST->tokenData[0];
00497 free(currentAST->tokenData);
00498 gt->separator = strdup(",");
00499 currentTerm->p = gt;
00500 currentTerm->len = sizeof(gt);
00501 if(debug) {
00502 printf("Found group\n");
00503 }
00504 break;
00505 case ICLDATAQ:
00506 currentTerm->iclType = icl_dataq_type;
00507 currentTerm->p = currentAST->tokenData;
00508 currentTerm->len = currentAST->tokenLen;
00509 currentTerm->glibAlloc = 1;
00510 if(debug) {
00511 printf("Found icldataq of len %i\n", currentTerm->len);
00512 }
00513 break;
00514 default:
00515 fprintf(stderr, "Parser attempted to make ICLTerm from type %i\n", currentAST->type);
00516 parser_error = TRUE;
00517 g_ptr_array_free(termList, TRUE);
00518 g_ptr_array_free(parentsList, TRUE);
00519 return FALSE;
00520 }
00521 if(debug) {
00522 printf("Created term at %p with type %i\n", currentTerm, currentTerm->iclType);
00523 }
00524 if(currentAST != root) {
00525 if(debug) {
00526 printf("Attempting to add term at %p to parent %p\n", (ICLTerm*)g_ptr_array_index(termList, parentIndex), (ICLTerm*)g_ptr_array_index(termList, parentIndex - 1));
00527 }
00528 icl_addChild((ICLTerm*)g_ptr_array_index(termList, parentIndex - 1), (ICLTerm*)g_ptr_array_index(termList, parentIndex));
00529 }
00530
00531 if(currentAST->down != NULL) {
00532 g_ptr_array_add(parentsList, currentAST->down);
00533 ++parentIndex;
00534 continue;
00535 }
00536 else if(currentAST->right != NULL) {
00537 (void)g_ptr_array_remove_index(parentsList, parentIndex);
00538 (void)g_ptr_array_remove_index(termList, parentIndex);
00539 g_ptr_array_add(parentsList, currentAST->right);
00540
00541 }
00542 else {
00543
00544
00545
00546
00547 int foundSibling = FALSE;
00548 while(parentIndex > 0){
00549 (void)g_ptr_array_remove_index(parentsList, parentIndex);
00550 (void)g_ptr_array_remove_index(termList, parentIndex);
00551 --parentIndex;
00552 currentAST = g_ptr_array_index(parentsList, parentIndex);
00553 if(currentAST->right == NULL) {
00554 continue;
00555 }
00556 else {
00557 foundSibling = TRUE;
00558 break;
00559 }
00560 }
00561 if(parentIndex == 0) {
00562
00563 *result = (ICLTerm*)g_ptr_array_remove_index(termList, 0);
00564 g_ptr_array_free(termList, TRUE);
00565 g_ptr_array_free(parentsList, TRUE);
00566 termList = NULL;
00567 parentsList = NULL;
00568 if(debug) {
00569 printf("found ICLTerm\n");
00570 }
00571 parser_error = FALSE;
00572 return TRUE;
00573 }
00574 else if(foundSibling == TRUE) {
00575
00576
00577 (void)g_ptr_array_remove_index(parentsList, parentIndex);
00578 (void)g_ptr_array_remove_index(termList, parentIndex);
00579 g_ptr_array_add(parentsList, currentAST->right);
00580 continue;
00581 }
00582 else {
00583 fprintf(stderr, "Bad parse: at leaf, could not find suitable parent to continue or return");
00584 parser_error = TRUE;
00585 g_ptr_array_free(termList, TRUE);
00586 g_ptr_array_free(parentsList, TRUE);
00587 return FALSE;
00588
00589 }
00590 }
00591 }
00592 }
00593
00594 AST* getASTFromString(char* str, size_t len, int debug) {
00595 int oldDebug = parser_DEBUG;
00596 #ifdef NORMAL_GC
00597 AST* root = (AST*)GC_debug_malloc(sizeof(AST), __FILE__, __LINE__);
00598 #else
00599 AST* root = (AST*)malloc(sizeof(AST));
00600 #endif
00601 memset(root, 0, sizeof(AST));
00602 currentBuf = stringbuffer_new(str, len);
00603 parser_DEBUG = debug;
00604 parser_error = FALSE;
00605 zzerr = parser_errorWriter;
00606 zzmode(START);
00607 ANTLRf(startOneOnly(&root), currentBuf_read);
00608 stringbuffer_delete(currentBuf);
00609 parser_DEBUG = oldDebug;
00610 return root;
00611 }
00612
00613 ICLTerm* parser_getTermFromString(char* str, size_t len) {
00614 return parser_getTermFromStringReal(str, len, FALSE);
00615 }
00616
00617 ICLTerm* parser_getTermFromStringDebug(char* str, size_t len) {
00618 return parser_getTermFromStringReal(str, len, TRUE);
00619 }
00620
00621 ICLTerm* parser_getTermFromStringReal(char* str, size_t len, int debug) {
00622 AST* root = getASTFromString(str, len, debug);
00623 AST* treeTerm = zzchild(root);
00624 ICLTerm* result = NULL;
00625 int parsedOkay = FALSE;
00626
00627 if(parser_savedIndexSet) {
00628 parser_savedIndexSet = FALSE;
00629 g_byte_array_free(parser_dblQuoteBuf, TRUE);
00630 }
00631
00632 if(parser_error) {
00633 parser_error = FALSE;
00634 parser_freeTree(root);
00635 zzfree_ast(root);
00636 icl_Free(result);
00637 return NULL;
00638 }
00639 parsedOkay = astToTerm(treeTerm, &result, debug);
00640 if(parser_error) {
00641 parser_error = FALSE;
00642 parser_freeTree(root);
00643 zzfree_ast(root);
00644 icl_Free(result);
00645 return NULL;
00646 }
00647 if(parsedOkay == TRUE) {
00648 zzfree_ast(root);
00649 return result;
00650 }
00651 else {
00652 parser_freeTree(root);
00653 zzfree_ast(root);
00654 return NULL;
00655 }
00656 }
00657
00658 int parser_getTermFromBuf(ICLTerm** result, stringbuffer_t* buf, int* lookedAhead) {
00659 #ifdef NORMAL_GC
00660 AST* root = (AST*)GC_debug_malloc(sizeof(AST), __FILE__, __LINE__);
00661 #else
00662 AST* root = (AST*)malloc(sizeof(AST));
00663 #endif
00664 int parsedOkay = FALSE;
00665 int lookaheadIndex;
00666 *result = NULL;
00667 memset(root, 0, sizeof(AST));
00668 currentBuf = buf;
00669 parser_error = FALSE;
00670 zzerr = parser_errorWriter;
00671 zzmode(START);
00672 ANTLRf(startOneOnly(&root), currentBuf_read);
00673 if(parser_savedIndexSet) {
00674 parser_savedIndexSet = FALSE;
00675 g_byte_array_free(parser_dblQuoteBuf, TRUE);
00676 }
00677
00678 *lookedAhead = LL_K;
00679 for(lookaheadIndex = LL_K - 1; lookaheadIndex >= 0; --lookaheadIndex) {
00680 if(zztextLA[lookaheadIndex] && zztextLA[lookaheadIndex][0] == -1) {
00681 *lookedAhead = LL_K - lookaheadIndex - 1;
00682 break;
00683 }
00684 }
00685
00686 if(parser_error) {
00687 parser_freeTree(root);
00688 zzfree_ast(root);
00689 icl_Free(*result);
00690 *result = NULL;
00691 if(parser_DEBUG) {
00692 printf("parser_getTermFromBuf parser_error\n");
00693 }
00694 return FALSE;
00695 }
00696 parsedOkay = astToTerm(zzchild(root), result, FALSE);
00697 if(parser_error) {
00698 parser_freeTree(root);
00699 zzfree_ast(root);
00700 icl_Free(*result);
00701 *result = NULL;
00702 if(parser_DEBUG) {
00703 printf("parser_getTermFromBuf parser_error\n");
00704 }
00705 return FALSE;
00706 }
00707 if(parsedOkay == TRUE) {
00708 zzfree_ast(root);
00709 return TRUE;
00710 }
00711 else {
00712 parser_freeTree(root);
00713 zzfree_ast(root);
00714 if(parser_DEBUG) {
00715 printf("parser_getTermFromBuf didn't parse okay\n");
00716 }
00717 return FALSE;
00718 }
00719 }
00720
00721 int parser_getNetTermFromBuf(ICLTerm** result, stringbuffer_t* buf) {
00722 #ifdef NORMAL_GC
00723 AST* root = (AST*)GC_debug_malloc(sizeof(AST), __FILE__, __LINE__);
00724 #else
00725 AST* root = (AST*)malloc(sizeof(AST));
00726 #endif
00727 int parsedOkay = FALSE;
00728 *result = NULL;
00729 memset(root, 0, sizeof(AST));
00730 currentBuf = buf;
00731 parser_error = FALSE;
00732 zzerr = parser_errorWriter;
00733 zzmode(START);
00734 ANTLRf(startNet(&root), currentBuf_read);
00735 if(parser_savedIndexSet) {
00736 parser_savedIndexSet = FALSE;
00737 g_byte_array_free(parser_dblQuoteBuf, TRUE);
00738 }
00739
00740 if(parser_error) {
00741 parser_freeTree(root);
00742 zzfree_ast(root);
00743 icl_Free(*result);
00744 *result = NULL;
00745 if(parser_DEBUG) {
00746 printf("parser_getNetTermFromBuf parser_error\n");
00747 }
00748 return FALSE;
00749 }
00750 parsedOkay = astToTerm(zzchild(root), result, FALSE);
00751 if(parser_error) {
00752 parser_freeTree(root);
00753 zzfree_ast(root);
00754 icl_Free(*result);
00755 *result = NULL;
00756 if(parser_DEBUG) {
00757 printf("parser_getNetTermFromBuf parser_error\n");
00758 }
00759 return FALSE;
00760 }
00761 if(parsedOkay == TRUE) {
00762 zzfree_ast(root);
00763 return TRUE;
00764 }
00765 else {
00766 parser_freeTree(root);
00767 zzfree_ast(root);
00768 if(parser_DEBUG) {
00769 printf("parser_getNetTermFromBuf didn't parse okay\n");
00770 }
00771 return FALSE;
00772 }
00773 }
00774
00775
00776
00777
00778
00779
00780
00781
00782
00783
00784
00785
00786
00787 void
00788 #ifdef __USE_PROTOS
00789 startOneOnly(AST**_root)
00790 #else
00791 startOneOnly(_root)
00792 AST **_root;
00793 #endif
00794 {
00795 zzRULE;
00796 zzBLOCK(zztasp1);
00797 zzMake0;
00798 {
00799 structure(zzSTR); zzlink(_root, &_sibling, &_tail);
00800 {
00801 zzBLOCK(zztasp2);
00802 zzMake0;
00803 {
00804 if ( (LA(1)==DOT) ) {
00805 zzmatch(DOT); zzCONSUME;
00806 }
00807 else {
00808 if ( (LA(1)==1) ) {
00809 }
00810 else {zzFAIL(1,zzerr1,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
00811 }
00812 zzEXIT(zztasp2);
00813 }
00814 }
00815 if(parser_DEBUG) printf("completed structure for startOneOnly\n");
00816 zzEXIT(zztasp1);
00817 return;
00818 fail:
00819 zzEXIT(zztasp1);
00820 zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
00821 zzresynch(setwd1, 0x1);
00822 }
00823 }
00824
00825 void
00826 #ifdef __USE_PROTOS
00827 startNet(AST**_root)
00828 #else
00829 startNet(_root)
00830 AST **_root;
00831 #endif
00832 {
00833 zzRULE;
00834 zzBLOCK(zztasp1);
00835 zzMake0;
00836 {
00837 {
00838 zzBLOCK(zztasp2);
00839 zzMake0;
00840 {
00841 if ( (LA(1)==DOT) ) {
00842 zzmatch(DOT); zzCONSUME;
00843 }
00844 else {
00845 if ( (LA(1)==TERM_LITERAL) ) {
00846 }
00847 else {zzFAIL(1,zzerr2,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
00848 }
00849 zzEXIT(zztasp2);
00850 }
00851 }
00852 netstruct(zzSTR); zzlink(_root, &_sibling, &_tail);
00853 if(parser_DEBUG) printf("completed netstruct for startNet\n");
00854 zzEXIT(zztasp1);
00855 return;
00856 fail:
00857 zzEXIT(zztasp1);
00858 zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
00859 zzresynch(setwd1, 0x2);
00860 }
00861 }
00862
00863 void
00864 #ifdef __USE_PROTOS
00865 netstruct(AST**_root)
00866 #else
00867 netstruct(_root)
00868 AST **_root;
00869 #endif
00870 {
00871 zzRULE;
00872 zzBLOCK(zztasp1);
00873 zzMake0;
00874 {
00875 zzmatch(TERM_LITERAL); zzsubroot(_root, &_sibling, &_tail);
00876 (*_root)->type = STRUCT; if(parser_DEBUG) printf("netstruct\n");
00877 zzCONSUME;
00878
00879 zzmatch(LPAREN); zzCONSUME;
00880 nonEmptyExpressionList(zzSTR); zzlink(_root, &_sibling, &_tail);
00881 zzmatch(RPAREN);
00882 zzEXIT(zztasp1); return;
00883 zzCONSUME;
00884
00885 zzEXIT(zztasp1);
00886 return;
00887 fail:
00888 zzEXIT(zztasp1);
00889 zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
00890 zzresynch(setwd1, 0x4);
00891 }
00892 }
00893
00894 void
00895 #ifdef __USE_PROTOS
00896 structure(AST**_root)
00897 #else
00898 structure(_root)
00899 AST **_root;
00900 #endif
00901 {
00902 zzRULE;
00903 zzBLOCK(zztasp1);
00904 zzMake0;
00905 {
00906 semiExpression(zzSTR); zzlink(_root, &_sibling, &_tail);
00907 {
00908 zzBLOCK(zztasp2);
00909 zzMake0;
00910 {
00911 while ( (LA(1)==TURNSTILE)
00912 ) {
00913 {
00914 zzBLOCK(zztasp3);
00915 zzMake0;
00916 {
00917 zzmatch(TURNSTILE); zzsubroot(_root, &_sibling, &_tail); zzCONSUME;
00918 zzEXIT(zztasp3);
00919 }
00920 }
00921 (*_root)->type = STRUCT; if(parser_DEBUG) printf("struct\n");
00922 semiExpression(zzSTR); zzlink(_root, &_sibling, &_tail);
00923 zzLOOP(zztasp2);
00924 }
00925 zzEXIT(zztasp2);
00926 }
00927 }
00928 zzEXIT(zztasp1);
00929 return;
00930 fail:
00931 zzEXIT(zztasp1);
00932 zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
00933 zzresynch(setwd1, 0x8);
00934 }
00935 }
00936
00937 void
00938 #ifdef __USE_PROTOS
00939 semiExpression(AST**_root)
00940 #else
00941 semiExpression(_root)
00942 AST **_root;
00943 #endif
00944 {
00945 zzRULE;
00946 zzBLOCK(zztasp1);
00947 zzMake0;
00948 {
00949 backslashExpression(zzSTR); zzlink(_root, &_sibling, &_tail);
00950 {
00951 zzBLOCK(zztasp2);
00952 zzMake0;
00953 {
00954 while ( (LA(1)==SEMI) ) {
00955 {
00956 zzBLOCK(zztasp3);
00957 zzMake0;
00958 {
00959 zzmatch(SEMI); zzsubroot(_root, &_sibling, &_tail); zzCONSUME;
00960 zzEXIT(zztasp3);
00961 }
00962 }
00963 (*_root)->type = STRUCT; if(parser_DEBUG) printf("semiExpression\n");
00964 backslashExpression(zzSTR); zzlink(_root, &_sibling, &_tail);
00965 zzLOOP(zztasp2);
00966 }
00967 zzEXIT(zztasp2);
00968 }
00969 }
00970 zzEXIT(zztasp1);
00971 return;
00972 fail:
00973 zzEXIT(zztasp1);
00974 zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
00975 zzresynch(setwd1, 0x10);
00976 }
00977 }
00978
00979 void
00980 #ifdef __USE_PROTOS
00981 backslashExpression(AST**_root)
00982 #else
00983 backslashExpression(_root)
00984 AST **_root;
00985 #endif
00986 {
00987 zzRULE;
00988 zzBLOCK(zztasp1);
00989 zzMake0;
00990 {
00991 equalsExpression(zzSTR); zzlink(_root, &_sibling, &_tail);
00992 {
00993 zzBLOCK(zztasp2);
00994 zzMake0;
00995 {
00996 while ( (LA(1)==BACKSLASH) ) {
00997 {
00998 zzBLOCK(zztasp3);
00999 zzMake0;
01000 {
01001 zzmatch(BACKSLASH); zzsubroot(_root, &_sibling, &_tail); zzCONSUME;
01002 zzEXIT(zztasp3);
01003 }
01004 }
01005 (*_root)->type = STRUCT; if(parser_DEBUG) printf("backslashExpression\n");
01006 equalsExpression(zzSTR); zzlink(_root, &_sibling, &_tail);
01007 zzLOOP(zztasp2);
01008 }
01009 zzEXIT(zztasp2);
01010 }
01011 }
01012 zzEXIT(zztasp1);
01013 return;
01014 fail:
01015 zzEXIT(zztasp1);
01016 zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
01017 zzresynch(setwd1, 0x20);
01018 }
01019 }
01020
01021 void
01022 #ifdef __USE_PROTOS
01023 equalsExpression(AST**_root)
01024 #else
01025 equalsExpression(_root)
01026 AST **_root;
01027 #endif
01028 {
01029 zzRULE;
01030 zzBLOCK(zztasp1);
01031 zzMake0;
01032 {
01033 colonExpression(zzSTR); zzlink(_root, &_sibling, &_tail);
01034 {
01035 zzBLOCK(zztasp2);
01036 zzMake0;
01037 {
01038 while ( (LA(1)==EQUAL) ) {
01039 {
01040 zzBLOCK(zztasp3);
01041 zzMake0;
01042 {
01043 zzmatch(EQUAL); zzsubroot(_root, &_sibling, &_tail); zzCONSUME;
01044 zzEXIT(zztasp3);
01045 }
01046 }
01047 (*_root)->type = STRUCT; if(parser_DEBUG) printf("equalsExpression\n");
01048 colonExpression(zzSTR); zzlink(_root, &_sibling, &_tail);
01049 zzLOOP(zztasp2);
01050 }
01051 zzEXIT(zztasp2);
01052 }
01053 }
01054 zzEXIT(zztasp1);
01055 return;
01056 fail:
01057 zzEXIT(zztasp1);
01058 zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
01059 zzresynch(setwd1, 0x40);
01060 }
01061 }
01062
01063 void
01064 #ifdef __USE_PROTOS
01065 colonExpression(AST**_root)
01066 #else
01067 colonExpression(_root)
01068 AST **_root;
01069 #endif
01070 {
01071 zzRULE;
01072 zzBLOCK(zztasp1);
01073 zzMake0;
01074 {
01075 plusMinusExpression(zzSTR); zzlink(_root, &_sibling, &_tail);
01076 {
01077 zzBLOCK(zztasp2);
01078 zzMake0;
01079 {
01080 while ( (setwd1[LA(1)]&0x80) ) {
01081 {
01082 zzBLOCK(zztasp3);
01083 zzMake0;
01084 {
01085 if ( (LA(1)==COLON)
01086 ) {
01087 zzmatch(COLON); zzsubroot(_root, &_sibling, &_tail); zzCONSUME;
01088 }
01089 else {
01090 if ( (LA(1)==DBL_COLON) ) {
01091 zzmatch(DBL_COLON); zzsubroot(_root, &_sibling, &_tail); zzCONSUME;
01092 }
01093 else {zzFAIL(1,zzerr3,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
01094 }
01095 zzEXIT(zztasp3);
01096 }
01097 }
01098 (*_root)->type = STRUCT; if(parser_DEBUG) printf("colonExpr\n");
01099 plusMinusExpression(zzSTR); zzlink(_root, &_sibling, &_tail);
01100 zzLOOP(zztasp2);
01101 }
01102 zzEXIT(zztasp2);
01103 }
01104 }
01105 zzEXIT(zztasp1);
01106 return;
01107 fail:
01108 zzEXIT(zztasp1);
01109 zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
01110 zzresynch(setwd2, 0x1);
01111 }
01112 }
01113
01114 void
01115 #ifdef __USE_PROTOS
01116 plusMinusExpression(AST**_root)
01117 #else
01118 plusMinusExpression(_root)
01119 AST **_root;
01120 #endif
01121 {
01122 zzRULE;
01123 zzBLOCK(zztasp1);
01124 zzMake0;
01125 {
01126 multiplicativeExpression(zzSTR); zzlink(_root, &_sibling, &_tail);
01127 {
01128 zzBLOCK(zztasp2);
01129 zzMake0;
01130 {
01131 while ( (setwd2[LA(1)]&0x2) ) {
01132 {
01133 zzBLOCK(zztasp3);
01134 zzMake0;
01135 {
01136 if ( (LA(1)==PLUS) ) {
01137 zzmatch(PLUS); zzsubroot(_root, &_sibling, &_tail); zzCONSUME;
01138 }
01139 else {
01140 if ( (LA(1)==MINUS) ) {
01141 zzmatch(MINUS); zzsubroot(_root, &_sibling, &_tail); zzCONSUME;
01142 }
01143 else {zzFAIL(1,zzerr4,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
01144 }
01145 zzEXIT(zztasp3);
01146 }
01147 }
01148 (*_root)->type = STRUCT; if(parser_DEBUG) printf("plusMinusExpression\n");
01149 multiplicativeExpression(zzSTR); zzlink(_root, &_sibling, &_tail);
01150 zzLOOP(zztasp2);
01151 }
01152 zzEXIT(zztasp2);
01153 }
01154 }
01155 zzEXIT(zztasp1);
01156 return;
01157 fail:
01158 zzEXIT(zztasp1);
01159 zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
01160 zzresynch(setwd2, 0x4);
01161 }
01162 }
01163
01164 void
01165 #ifdef __USE_PROTOS
01166 multiplicativeExpression(AST**_root)
01167 #else
01168 multiplicativeExpression(_root)
01169 AST **_root;
01170 #endif
01171 {
01172 zzRULE;
01173 zzBLOCK(zztasp1);
01174 zzMake0;
01175 {
01176 unaryExpression(zzSTR); zzlink(_root, &_sibling, &_tail);
01177 {
01178 zzBLOCK(zztasp2);
01179 zzMake0;
01180 {
01181 while ( (setwd2[LA(1)]&0x8)
01182 ) {
01183 {
01184 zzBLOCK(zztasp3);
01185 zzMake0;
01186 {
01187 if ( (LA(1)==STAR) ) {
01188 zzmatch(STAR); zzsubroot(_root, &_sibling, &_tail); zzCONSUME;
01189 }
01190 else {
01191 if ( (LA(1)==DIV) ) {
01192 zzmatch(DIV); zzsubroot(_root, &_sibling, &_tail); zzCONSUME;
01193 }
01194 else {zzFAIL(1,zzerr5,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
01195 }
01196 zzEXIT(zztasp3);
01197 }
01198 }
01199 (*_root)->type = STRUCT; if(parser_DEBUG) printf("multiplicativeExpr\n");
01200 unaryExpression(zzSTR); zzlink(_root, &_sibling, &_tail);
01201 zzLOOP(zztasp2);
01202 }
01203 zzEXIT(zztasp2);
01204 }
01205 }
01206 zzEXIT(zztasp1);
01207 return;
01208 fail:
01209 zzEXIT(zztasp1);
01210 zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
01211 zzresynch(setwd2, 0x10);
01212 }
01213 }
01214
01215 void
01216 #ifdef __USE_PROTOS
01217 unaryExpression(AST**_root)
01218 #else
01219 unaryExpression(_root)
01220 AST **_root;
01221 #endif
01222 {
01223 zzRULE;
01224 zzBLOCK(zztasp1);
01225 zzMake0;
01226 {
01227 if ( (setwd2[LA(1)]&0x20) && (LA(2)==LPAREN) && !(
01228 LA(1)==BANG && LA(2)==1
01229 || LA(1)==SEMI && LA(2)==1
01230 || LA(1)==STRING_LITERAL && LA(2)==1
01231 || LA(1)==STAR && LA(2)==1
01232 || LA(1)==PLUS && LA(2)==1
01233 || LA(1)==MINUS && LA(2)==1
01234 || LA(1)==DIV && LA(2)==1
01235 || LA(1)==EQUAL && LA(2)==1
01236 || LA(1)==TURNSTILE && LA(2)==1
01237 || LA(1)==IDENT && LA(2)==1
01238 || LA(1)==SPECIAL_CHAR_LITERAL && LA(2)==1
01239 ) ) {
01240 normalStruct(zzSTR); zzlink(_root, &_sibling, &_tail);
01241 }
01242 else {
01243 if ( (LA(1)==ICLDATAQ_LITERAL) && (LA(2)==LPAREN) && !( LA(1)==ICLDATAQ_LITERAL && LA(2)==1) ) {
01244 icldataqStruct(zzSTR); zzlink(_root, &_sibling, &_tail);
01245 }
01246 else {
01247 if ( (setwd2[LA(1)]&0x40) &&
01248 (setwd2[LA(2)]&0x80) ) {
01249 unaryExpressionNotPlusMinus(zzSTR); zzlink(_root, &_sibling, &_tail);
01250 }
01251 else {zzFAIL(2,zzerr6,zzerr7,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
01252 }
01253 }
01254 zzEXIT(zztasp1);
01255 return;
01256 fail:
01257 zzEXIT(zztasp1);
01258 zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
01259 zzresynch(setwd3, 0x1);
01260 }
01261 }
01262
01263 void
01264 #ifdef __USE_PROTOS
01265 normalStruct(AST**_root)
01266 #else
01267 normalStruct(_root)
01268 AST **_root;
01269 #endif
01270 {
01271 zzRULE;
01272 zzBLOCK(zztasp1);
01273 zzMake0;
01274 {
01275 {
01276 zzBLOCK(zztasp2);
01277 zzMake0;
01278 {
01279 if ( (LA(1)==BANG) ) {
01280 zzmatch(BANG); zzsubroot(_root, &_sibling, &_tail); zzCONSUME;
01281 }
01282 else {
01283 if ( (LA(1)==SEMI) ) {
01284 zzmatch(SEMI); zzsubroot(_root, &_sibling, &_tail); zzCONSUME;
01285 }
01286 else {
01287 if ( (LA(1)==STRING_LITERAL) ) {
01288 zzmatch(STRING_LITERAL); zzsubroot(_root, &_sibling, &_tail); zzCONSUME;
01289 }
01290 else {
01291 if ( (LA(1)==IDENT) ) {
01292 zzmatch(IDENT); zzsubroot(_root, &_sibling, &_tail); zzCONSUME;
01293 }
01294 else {
01295 if ( (LA(1)==PLUS)
01296 ) {
01297 zzmatch(PLUS); zzsubroot(_root, &_sibling, &_tail); zzCONSUME;
01298 }
01299 else {
01300 if ( (LA(1)==MINUS) ) {
01301 zzmatch(MINUS); zzsubroot(_root, &_sibling, &_tail); zzCONSUME;
01302 }
01303 else {
01304 if ( (LA(1)==STAR) ) {
01305 zzmatch(STAR); zzsubroot(_root, &_sibling, &_tail); zzCONSUME;
01306 }
01307 else {
01308 if ( (LA(1)==DIV) ) {
01309 zzmatch(DIV); zzsubroot(_root, &_sibling, &_tail); zzCONSUME;
01310 }
01311 else {
01312 if ( (LA(1)==EQUAL) ) {
01313 zzmatch(EQUAL); zzsubroot(_root, &_sibling, &_tail); zzCONSUME;
01314 }
01315 else {
01316 if ( (LA(1)==TURNSTILE)
01317 ) {
01318 zzmatch(TURNSTILE); zzsubroot(_root, &_sibling, &_tail); zzCONSUME;
01319 }
01320 else {
01321 if ( (LA(1)==COLON) ) {
01322 zzmatch(COLON); zzsubroot(_root, &_sibling, &_tail); zzCONSUME;
01323 }
01324 else {
01325 if ( (LA(1)==DBL_COLON) ) {
01326 zzmatch(DBL_COLON); zzsubroot(_root, &_sibling, &_tail); zzCONSUME;
01327 }
01328 else {
01329 if ( (LA(1)==SPECIAL_CHAR_LITERAL) ) {
01330 zzmatch(SPECIAL_CHAR_LITERAL); zzsubroot(_root, &_sibling, &_tail); zzCONSUME;
01331 }
01332 else {
01333 if ( (LA(1)==BACKSLASH) ) {
01334 zzmatch(BACKSLASH); zzsubroot(_root, &_sibling, &_tail); zzCONSUME;
01335 }
01336 else {zzFAIL(1,zzerr8,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
01337 }
01338 }
01339 }
01340 }
01341 }
01342 }
01343 }
01344 }
01345 }
01346 }
01347 }
01348 }
01349 }
01350 zzEXIT(zztasp2);
01351 }
01352 }
01353 (*_root)->type = STRUCT; if(parser_DEBUG) printf("normalStruct\n");
01354 zzmatch(LPAREN); zzCONSUME;
01355 nonEmptyExpressionList(zzSTR); zzlink(_root, &_sibling, &_tail);
01356 zzmatch(RPAREN); zzCONSUME;
01357 zzEXIT(zztasp1);
01358 return;
01359 fail:
01360 zzEXIT(zztasp1);
01361 zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
01362 zzresynch(setwd3, 0x2);
01363 }
01364 }
01365
01366 void
01367 #ifdef __USE_PROTOS
01368 nonEmptyExpressionList(AST**_root)
01369 #else
01370 nonEmptyExpressionList(_root)
01371 AST **_root;
01372 #endif
01373 {
01374 zzRULE;
01375 zzBLOCK(zztasp1);
01376 zzMake0;
01377 {
01378 structure(zzSTR); zzlink(_root, &_sibling, &_tail);
01379 {
01380 zzBLOCK(zztasp2);
01381 zzMake0;
01382 {
01383 while ( (LA(1)==COMMA)
01384 ) {
01385 zzmatch(COMMA); zzCONSUME;
01386 structure(zzSTR); zzlink(_root, &_sibling, &_tail);
01387 zzLOOP(zztasp2);
01388 }
01389 zzEXIT(zztasp2);
01390 }
01391 }
01392 zzEXIT(zztasp1);
01393 return;
01394 fail:
01395 zzEXIT(zztasp1);
01396 zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
01397 zzresynch(setwd3, 0x4);
01398 }
01399 }
01400
01401 void
01402 #ifdef __USE_PROTOS
01403 expressionList(AST**_root)
01404 #else
01405 expressionList(_root)
01406 AST **_root;
01407 #endif
01408 {
01409 zzRULE;
01410 zzBLOCK(zztasp1);
01411 zzMake0;
01412 {
01413 {
01414 zzBLOCK(zztasp2);
01415 zzMake0;
01416 {
01417 if ( (setwd3[LA(1)]&0x8) ) {
01418 structure(zzSTR); zzlink(_root, &_sibling, &_tail);
01419 {
01420 zzBLOCK(zztasp3);
01421 zzMake0;
01422 {
01423 while ( (LA(1)==COMMA) ) {
01424 zzmatch(COMMA); zzCONSUME;
01425 structure(zzSTR); zzlink(_root, &_sibling, &_tail);
01426 zzLOOP(zztasp3);
01427 }
01428 zzEXIT(zztasp3);
01429 }
01430 }
01431 }
01432 else {
01433 if ( (setwd3[LA(1)]&0x10) ) {
01434 }
01435 else {zzFAIL(1,zzerr9,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
01436 }
01437 zzEXIT(zztasp2);
01438 }
01439 }
01440 zzEXIT(zztasp1);
01441 return;
01442 fail:
01443 zzEXIT(zztasp1);
01444 zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
01445 zzresynch(setwd3, 0x20);
01446 }
01447 }
01448
01449 void
01450 #ifdef __USE_PROTOS
01451 icldataqStruct(AST**_root)
01452 #else
01453 icldataqStruct(_root)
01454 AST **_root;
01455 #endif
01456 {
01457 zzRULE;
01458 zzBLOCK(zztasp1);
01459 zzMake0;
01460 {
01461 zzmatch(ICLDATAQ_LITERAL); zzCONSUME;
01462 zzmatch(LPAREN); zzCONSUME;
01463 {
01464 zzBLOCK(zztasp2);
01465 zzMake0;
01466 {
01467 if ( (LA(1)==DBLQUOTED) ) {
01468 icldataqShortStruct(zzSTR); zzlink(_root, &_sibling, &_tail);
01469 }
01470 else {
01471 if ( (setwd3[LA(1)]&0x40)
01472 ) {
01473 icldataqLongStruct(zzSTR); zzlink(_root, &_sibling, &_tail);
01474 }
01475 else {zzFAIL(1,zzerr10,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
01476 }
01477 zzEXIT(zztasp2);
01478 }
01479 }
01480 zzmatch(RPAREN); zzCONSUME;
01481 zzEXIT(zztasp1);
01482 return;
01483 fail:
01484 zzEXIT(zztasp1);
01485 zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
01486 zzresynch(setwd3, 0x80);
01487 }
01488 }
01489
01490 void
01491 #ifdef __USE_PROTOS
01492 icldataqShortStruct(AST**_root)
01493 #else
01494 icldataqShortStruct(_root)
01495 AST **_root;
01496 #endif
01497 {
01498 zzRULE;
01499 zzBLOCK(zztasp1);
01500 zzMake0;
01501 {
01502 zzmatch(DBLQUOTED); zzsubroot(_root, &_sibling, &_tail);
01503 (*_root)->type = ICLDATAQ; if(parser_DEBUG) printf("icldataqShort\n");
01504 zzCONSUME;
01505
01506 zzEXIT(zztasp1);
01507 return;
01508 fail:
01509 zzEXIT(zztasp1);
01510 zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
01511 zzresynch(setwd4, 0x1);
01512 }
01513 }
01514
01515 void
01516 #ifdef __USE_PROTOS
01517 icldataqLongStruct(AST**_root)
01518 #else
01519 icldataqLongStruct(_root)
01520 AST **_root;
01521 #endif
01522 {
01523 zzRULE;
01524 zzBLOCK(zztasp1);
01525 zzMake0;
01526 {
01527 {
01528 zzBLOCK(zztasp2);
01529 zzMake0;
01530 {
01531 if ( (LA(1)==NUM_INTONE) ) {
01532 zzmatch(NUM_INTONE); zzCONSUME;
01533 }
01534 else {
01535 if ( (LA(1)==NUM_INTTWO) ) {
01536 zzmatch(NUM_INTTWO); zzCONSUME;
01537 }
01538 else {zzFAIL(1,zzerr11,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
01539 }
01540 zzEXIT(zztasp2);
01541 }
01542 }
01543 zzmatch(COMMA); zzCONSUME;
01544 {
01545 zzBLOCK(zztasp2);
01546 zzMake0;
01547 {
01548 if ( (LA(1)==NUM_INTONE) ) {
01549 zzmatch(NUM_INTONE); zzCONSUME;
01550 }
01551 else {
01552 if ( (LA(1)==NUM_INTTWO) ) {
01553 zzmatch(NUM_INTTWO); zzCONSUME;
01554 }
01555 else {zzFAIL(1,zzerr12,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
01556 }
01557 zzEXIT(zztasp2);
01558 }
01559 }
01560 zzmatch(COMMA); zzCONSUME;
01561 zzmatch(DBLQUOTED); zzsubroot(_root, &_sibling, &_tail);
01562 (*_root)->type = ICLDATAQ; if(parser_DEBUG) printf("icldataqLong\n");
01563 zzCONSUME;
01564
01565 zzEXIT(zztasp1);
01566 return;
01567 fail:
01568 zzEXIT(zztasp1);
01569 zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
01570 zzresynch(setwd4, 0x2);
01571 }
01572 }
01573
01574 void
01575 #ifdef __USE_PROTOS
01576 unaryExpressionNotPlusMinus(AST**_root)
01577 #else
01578 unaryExpressionNotPlusMinus(_root)
01579 AST **_root;
01580 #endif
01581 {
01582 zzRULE;
01583 zzBLOCK(zztasp1);
01584 zzMake0;
01585 {
01586 if ( (LA(1)==NUM_INTONE)
01587 ) {
01588 zzmatch(NUM_INTONE); zzsubchild(_root, &_sibling, &_tail);
01589 (*_root)->type = INT; if(parser_DEBUG) printf("intone\n");
01590 zzCONSUME;
01591
01592 }
01593 else {
01594 if ( (LA(1)==NUM_INTTWO) ) {
01595 zzmatch(NUM_INTTWO); zzsubchild(_root, &_sibling, &_tail);
01596 (*_root)->type = INT; if(parser_DEBUG) printf("inttwo\n");
01597 zzCONSUME;
01598
01599 }
01600 else {
01601 if ( (LA(1)==NUM_FLOATONE) ) {
01602 zzmatch(NUM_FLOATONE); zzsubchild(_root, &_sibling, &_tail);
01603 (*_root)->type = FLOAT; if(parser_DEBUG) printf("floatone\n");
01604 zzCONSUME;
01605
01606 }
01607 else {
01608 if ( (LA(1)==NUM_FLOATTWO) ) {
01609 zzmatch(NUM_FLOATTWO); zzsubchild(_root, &_sibling, &_tail);
01610 (*_root)->type = FLOAT; if(parser_DEBUG) printf("floattwo\n");
01611 zzCONSUME;
01612
01613 }
01614 else {
01615 if ( (setwd4[LA(1)]&0x4) ) {
01616 str(zzSTR); zzlink(_root, &_sibling, &_tail);
01617 }
01618 else {
01619 if ( (LA(1)==VARIABLE)
01620 ) {
01621 var(zzSTR); zzlink(_root, &_sibling, &_tail);
01622 }
01623 else {
01624 if ( (LA(1)==LBRACK) ) {
01625 list(zzSTR); zzlink(_root, &_sibling, &_tail);
01626 }
01627 else {
01628 if ( (setwd4[LA(1)]&0x8) ) {
01629 group(zzSTR); zzlink(_root, &_sibling, &_tail);
01630 }
01631 else {zzFAIL(1,zzerr13,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
01632 }
01633 }
01634 }
01635 }
01636 }
01637 }
01638 }
01639 zzEXIT(zztasp1);
01640 return;
01641 fail:
01642 zzEXIT(zztasp1);
01643 zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
01644 zzresynch(setwd4, 0x10);
01645 }
01646 }
01647
01648 void
01649 #ifdef __USE_PROTOS
01650 str(AST**_root)
01651 #else
01652 str(_root)
01653 AST **_root;
01654 #endif
01655 {
01656 zzRULE;
01657 zzBLOCK(zztasp1);
01658 zzMake0;
01659 {
01660 if ( (LA(1)==BANG) ) {
01661 zzmatch(BANG); zzsubchild(_root, &_sibling, &_tail);
01662 (*_root)->type = STR; if(parser_DEBUG) printf("str\n");
01663 zzCONSUME;
01664
01665 }
01666 else {
01667 if ( (LA(1)==SEMI) ) {
01668 zzmatch(SEMI); zzsubchild(_root, &_sibling, &_tail);
01669 (*_root)->type = STR; if(parser_DEBUG) printf("str\n");
01670 zzCONSUME;
01671
01672 }
01673 else {
01674 if ( (LA(1)==STRING_LITERAL)
01675 ) {
01676 zzmatch(STRING_LITERAL); zzsubchild(_root, &_sibling, &_tail);
01677 (*_root)->type = STR; if(parser_DEBUG) printf("str\n");
01678 zzCONSUME;
01679
01680 }
01681 else {
01682 if ( (LA(1)==STAR) ) {
01683 zzmatch(STAR); zzsubchild(_root, &_sibling, &_tail);
01684 (*_root)->type = STR; if(parser_DEBUG) printf("str\n");
01685 zzCONSUME;
01686
01687 }
01688 else {
01689 if ( (LA(1)==PLUS) ) {
01690 zzmatch(PLUS); zzsubchild(_root, &_sibling, &_tail);
01691 (*_root)->type = STR; if(parser_DEBUG) printf("str\n");
01692 zzCONSUME;
01693
01694 }
01695 else {
01696 if ( (LA(1)==MINUS) ) {
01697 zzmatch(MINUS); zzsubchild(_root, &_sibling, &_tail);
01698 (*_root)->type = STR; if(parser_DEBUG) printf("str\n");
01699 zzCONSUME;
01700
01701 }
01702 else {
01703 if ( (LA(1)==DIV) ) {
01704 zzmatch(DIV); zzsubchild(_root, &_sibling, &_tail);
01705 (*_root)->type = STR; if(parser_DEBUG) printf("str\n");
01706 zzCONSUME;
01707
01708 }
01709 else {
01710 if ( (LA(1)==EQUAL)
01711 ) {
01712 zzmatch(EQUAL); zzsubchild(_root, &_sibling, &_tail);
01713 (*_root)->type = STR; if(parser_DEBUG) printf("str\n");
01714 zzCONSUME;
01715
01716 }
01717 else {
01718 if ( (LA(1)==TURNSTILE) ) {
01719 zzmatch(TURNSTILE); zzsubchild(_root, &_sibling, &_tail);
01720 (*_root)->type = STR; if(parser_DEBUG) printf("str\n");
01721 zzCONSUME;
01722
01723 }
01724 else {
01725 if ( (LA(1)==IDENT) ) {
01726 zzmatch(IDENT); zzsubchild(_root, &_sibling, &_tail);
01727 (*_root)->type = STR; if(parser_DEBUG) printf("str\n");
01728 zzCONSUME;
01729
01730 }
01731 else {
01732 if ( (LA(1)==SPECIAL_CHAR_LITERAL) ) {
01733 zzmatch(SPECIAL_CHAR_LITERAL); zzsubchild(_root, &_sibling, &_tail);
01734 (*_root)->type = STR; if(parser_DEBUG) { printf("SPECIAL_CHAR_LITERAL str\n"); printf("%s\n", (*_root)->tokenData); }
01735 zzCONSUME;
01736
01737 }
01738 else {
01739 if ( (LA(1)==TERM_LITERAL) ) {
01740 zzmatch(TERM_LITERAL); zzsubchild(_root, &_sibling, &_tail);
01741 (*_root)->type = STR; if(parser_DEBUG) printf("str\n");
01742 zzCONSUME;
01743
01744 }
01745 else {
01746 if ( (LA(1)==ICLDATAQ_LITERAL)
01747 ) {
01748 zzmatch(ICLDATAQ_LITERAL); zzsubchild(_root, &_sibling, &_tail);
01749 (*_root)->type = STR; if(parser_DEBUG) printf("str\n");
01750 zzCONSUME;
01751
01752 }
01753 else {zzFAIL(1,zzerr14,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
01754 }
01755 }
01756 }
01757 }
01758 }
01759 }
01760 }
01761 }
01762 }
01763 }
01764 }
01765 }
01766 zzEXIT(zztasp1);
01767 return;
01768 fail:
01769 zzEXIT(zztasp1);
01770 zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
01771 zzresynch(setwd4, 0x20);
01772 }
01773 }
01774
01775 void
01776 #ifdef __USE_PROTOS
01777 var(AST**_root)
01778 #else
01779 var(_root)
01780 AST **_root;
01781 #endif
01782 {
01783 zzRULE;
01784 zzBLOCK(zztasp1);
01785 zzMake0;
01786 {
01787 zzmatch(VARIABLE); zzsubchild(_root, &_sibling, &_tail);
01788 (*_root)->type = VAR; if(parser_DEBUG) printf("var\n");
01789 zzCONSUME;
01790
01791 zzEXIT(zztasp1);
01792 return;
01793 fail:
01794 zzEXIT(zztasp1);
01795 zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
01796 zzresynch(setwd4, 0x40);
01797 }
01798 }
01799
01800 void
01801 #ifdef __USE_PROTOS
01802 list(AST**_root)
01803 #else
01804 list(_root)
01805 AST **_root;
01806 #endif
01807 {
01808 zzRULE;
01809 zzBLOCK(zztasp1);
01810 zzMake0;
01811 {
01812 zzmatch(LBRACK); zzsubroot(_root, &_sibling, &_tail);
01813 (*_root)->type = LIST; if(parser_DEBUG) printf("list\n");
01814 zzCONSUME;
01815
01816 expressionList(zzSTR); zzlink(_root, &_sibling, &_tail);
01817 zzmatch(RBRACK); zzCONSUME;
01818 zzEXIT(zztasp1);
01819 return;
01820 fail:
01821 zzEXIT(zztasp1);
01822 zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
01823 zzresynch(setwd4, 0x80);
01824 }
01825 }
01826
01827 void
01828 #ifdef __USE_PROTOS
01829 group(AST**_root)
01830 #else
01831 group(_root)
01832 AST **_root;
01833 #endif
01834 {
01835 zzRULE;
01836 zzBLOCK(zztasp1);
01837 zzMake0;
01838 {
01839 if ( (LA(1)==LBRACE) ) {
01840 zzmatch(LBRACE); zzsubroot(_root, &_sibling, &_tail);
01841 (*_root)->type = GROUP; if(parser_DEBUG) printf("group\n");
01842 zzCONSUME;
01843
01844 expressionList(zzSTR); zzlink(_root, &_sibling, &_tail);
01845 zzmatch(RBRACE); zzCONSUME;
01846 }
01847 else {
01848 if ( (LA(1)==LPAREN) ) {
01849 zzmatch(LPAREN); zzsubroot(_root, &_sibling, &_tail);
01850 (*_root)->type = GROUP; if(parser_DEBUG) printf("group\n");
01851 zzCONSUME;
01852
01853 expressionList(zzSTR); zzlink(_root, &_sibling, &_tail);
01854 zzmatch(RPAREN); zzCONSUME;
01855 }
01856 else {zzFAIL(1,zzerr15,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
01857 }
01858 zzEXIT(zztasp1);
01859 return;
01860 fail:
01861 zzEXIT(zztasp1);
01862 zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
01863 zzresynch(setwd5, 0x1);
01864 }
01865 }