parser.c

Go to the documentation of this file.
00001 /*
00002  * A n t l r  T r a n s l a t i o n  H e a d e r
00003  *
00004  * Terence Parr, Will Cohen, and Hank Dietz: 1989-2001
00005  * Purdue University Electrical Engineering
00006  * With AHPCRC, University of Minnesota
00007  * ANTLR Version 1.33MR33
00008  *
00009  *   ./pccts/bin/antlr -o ../ -gh parser.h -gt -mrhoist off -k 2 parser.g
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 /* Abstract Syntax Tree fields */
00028 #define AST_FIELDS int isDefined; int type; char* tokenData; size_t tokenLen;
00029 /* Remember column numbers */
00030 #define ZZCOL
00031 /* We define syntax error function */
00032 #define USER_ZZSYN
00033 /* Token buffer size */
00034 /* #define ZZLEXBUFSIZE 10485760*/
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     char* buf = (char*)malloc(parser_dblQuoteLen + 1); \
00052     memcpy(buf, text, parser_dblQuoteLen); \
00053     buf[parser_dblQuoteLen] = '\0'; \
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   /* printf("zzcr_ast at pointer %p\n", ast); */ \
00075 };
00076 
00077 /*
00078 #define zzd_ast(t) { \
00079   GC_debug_free(t->tokenData); \
00080   fprintf(stderr, "freed token data at pointer %p\n", t); \
00081   t->isDefined = 0; \
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     char* buf = (char*)malloc(parser_dblQuoteLen + 1); \
00094     memcpy(buf, text, parser_dblQuoteLen); \
00095     buf[parser_dblQuoteLen] = '\0'; \
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   /* printf("zzcr_ast at pointer %p\n", ast); */ \
00117 };
00118 
00119 /*
00120 #define zzd_ast(t) { \
00121   free(t->tokenData); \
00122   t->isDefined = 0; \
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 /*extern void zzsyn(char *text, int tok, char *egroup, SetWordType *eset, int etok, int k, char *bad_text);*/
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 /* MR23 In order to remove calls to PURIFY use the antlr -nopurify option */
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; /* defined in err.h */
00162 extern void (*zzerr)(const char*); /* defined in dlgauto.h */
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     /* we save the dlg automaton state each time--could do it just once, but it's */
00187 /* not that expensive */
00188 zzsave_dlg_state(&dlgState);
00189 
00190     /* if we've been here before without finishing the data, continue where we left off */
00191 if(parser_savedIndexSet) {
00192 stringbuffer_setIndex(currentBuf, parser_savedIndex);
00193 }
00194 else {
00195 parser_dblQuoteBuf = g_byte_array_new();
00196 }
00197 
00198     /* A tiny state machine of two states--CONTINUE or FOUNDQUOTE; we enter FOUNDQUOTE */
00199 /* when we find a double quote, so that we can check if it is the ending double quote */
00200 /* or just a quadruple quote (a quoted double quote: "").  If we ever hit EOF, we */
00201 /* save the index in the currentBuf object and return so that the pccts automaton */
00202 /* can fail to find the token correctly */
00203 while(!done) {
00204 nextChar = (*(dlgState.func_ptr))();
00205 if(nextChar == EOF) {
00206 done = TRUE;
00207 //g_byte_array_free(parser_dblQuoteBuf, TRUE);
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 /* printf("Adding char %o\n", nextChar); */
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 /* printf("Adding char %o\n", '"'); */
00230 g_byte_array_append(parser_dblQuoteBuf, (guint8*)"\"", 1);
00231 }
00232 else {
00233 /* done */
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++;                             /* MR11 */
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 /* Check if we go down or right or up */
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 /* parentIndex stays the same, since we removed and added one */
00541 }
00542 else {
00543 /* both down  and right are NULL--we're at a leaf */
00544 /* Keep going up the tree until we get to a non-NULL
00545 * right, or we hit the root of the tree
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 /* done */
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 /* keep making ICLTerm tree */
00576 /* remove the current sibling and replace with the new one */
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 /* error */
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 //printf("zztextLA = [%s:%i,%s:%i]\n", zztextLA[0], zztextLA[0][0], zztextLA[1], zztextLA[1][0]);
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 int main(int argc, char* argv[]) {
00777 AST* root;
00778 while(1) {
00779 zzmode(START);
00780 ANTLR(startNet(&root), stdin);
00781 printf("Printing AST: \n");
00782 zzpre_ast(zzchild(root), printAst, before, after);
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 }

Generated on Wed May 23 17:20:13 2007 using doxygen 1.5.2