📄 antlr.c
字号:
}} zzmatch(104); zzCONSUME; zzEXIT(zztasp1); return _retv;fail: zzEXIT(zztasp1); zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText); zzresynch(setwd4, 0x8); return _retv; }} Node *#ifdef __USE_PROTOSelement( int not, int first_on_line, int use_def_MT_handler )#elseelement(not,first_on_line,use_def_MT_handler) int not;int first_on_line;int use_def_MT_handler ;#endif{ Node * _retv; zzRULE; zzBLOCK(zztasp1); PURIFY(_retv,sizeof( Node * )) zzMake0; { Attrib blk; Predicate *pred = NULL; int local_use_def_MT_handler=0; ActionNode *act; RuleRefNode *rr; set toksrefd, rulesrefd; TermEntry *term; TokNode *p=NULL; RuleRefNode *q; int approx=0; LabelEntry *label=NULL; int predMsgDone=0; int semDepth=0; int ampersandStyle; int height; /* MR11 */ int equal_height; /* MR11 */ _retv = NULL; if ( (setwd4[LA(1)]&0x10) ) { { zzBLOCK(zztasp2); zzMake0; { if ( (LA(1)==LABEL) ) { label = element_label(); } zzEXIT(zztasp2); } } { zzBLOCK(zztasp2); zzMake0; { if ( (LA(1)==TokenTerm) ) { zzmatch(TokenTerm); term = (TermEntry *) hash_get(Tname, LATEXT(1)); if ( term==NULL && UserDefdTokens ) { err("implicit token definition not allowed with #tokdefs"); zzaRet.left = zzaRet.right = NULL; } else { zzaRet = buildToken(LATEXT(1)); p=((TokNode *)((Junction *)zzaRet.left)->p1); term = (TermEntry *) hash_get(Tname, LATEXT(1)); require( term!= NULL, "hash table mechanism is broken"); p->tclass = term->tclass; p->complement = not; if ( label!=NULL ) { p->el_label = label->str; label->elem = (Node *)p; } } zzCONSUME; { zzBLOCK(zztasp3); zzMake0; { if ( (LA(1)==117) ) { zzmatch(117); zzCONSUME; { zzBLOCK(zztasp4); zzMake0; { if ( (LA(1)==QuotedTerm) ) { zzmatch(QuotedTerm); if ( p!=NULL ) setUpperRange(p, LATEXT(1)); zzCONSUME; } else { if ( (LA(1)==TokenTerm) ) { zzmatch(TokenTerm); if ( p!=NULL ) setUpperRange(p, LATEXT(1)); zzCONSUME; } else {zzFAIL(1,zzerr9,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;} } zzEXIT(zztasp4); } } } zzEXIT(zztasp3); } } if ( p!=NULL && (p->upper_range!=0 || p->tclass || not) ) list_add(&MetaTokenNodes, (void *)p); { zzBLOCK(zztasp3); zzMake0; { if ( (LA(1)==123) ) { zzmatch(123); if ( p!=NULL ) p->astnode=ASTroot; zzCONSUME; } else { if ( (setwd4[LA(1)]&0x20) ) { if ( p!=NULL ) p->astnode=ASTchild; } else { if ( (LA(1)==101) ) { zzmatch(101); if ( p!=NULL ) p->astnode=ASTexclude; zzCONSUME; } else {zzFAIL(1,zzerr10,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;} } } zzEXIT(zztasp3); } } { zzBLOCK(zztasp3); zzMake0; { if ( (LA(1)==88) ) { zzmatch(88); local_use_def_MT_handler = 1; zzCONSUME; } zzEXIT(zztasp3); } } if ( p!=NULL && first_on_line ) { CurAltStart = (Junction *)zzaRet.left; altAdd(CurAltStart); /* MR7 */ p->altstart = CurAltStart; } if ( p!=NULL ) p->use_def_MT_handler = use_def_MT_handler || local_use_def_MT_handler; _retv = (Node *)p; } else { if ( (LA(1)==QuotedTerm) ) { zzmatch(QuotedTerm); term = (TermEntry *) hash_get(Texpr, LATEXT(1)); if ( term==NULL && UserDefdTokens ) { err("implicit token definition not allowed with #tokdefs"); zzaRet.left = zzaRet.right = NULL; } else { zzaRet = buildToken(LATEXT(1)); p=((TokNode *)((Junction *)zzaRet.left)->p1); p->complement = not; if ( label!=NULL ) { p->el_label = label->str; label->elem = (Node *)p; } } zzCONSUME; { zzBLOCK(zztasp3); zzMake0; { if ( (LA(1)==117) ) { zzmatch(117); zzCONSUME; { zzBLOCK(zztasp4); zzMake0; { if ( (LA(1)==QuotedTerm) ) { zzmatch(QuotedTerm); if ( p!=NULL ) setUpperRange(p, LATEXT(1)); zzCONSUME; } else { if ( (LA(1)==TokenTerm) ) { zzmatch(TokenTerm); if ( p!=NULL ) setUpperRange(p, LATEXT(1)); zzCONSUME; } else {zzFAIL(1,zzerr11,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;} } zzEXIT(zztasp4); } } } zzEXIT(zztasp3); } } { zzBLOCK(zztasp3); zzMake0; { if ( (LA(1)==123) ) { zzmatch(123); if ( p!=NULL ) p->astnode=ASTroot; zzCONSUME; } else { if ( (setwd4[LA(1)]&0x40) ) { if ( p!=NULL ) p->astnode=ASTchild; } else { if ( (LA(1)==101) ) { zzmatch(101); if ( p!=NULL ) p->astnode=ASTexclude; zzCONSUME; } else {zzFAIL(1,zzerr12,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;} } } zzEXIT(zztasp3); } } { zzBLOCK(zztasp3); zzMake0; { if ( (LA(1)==88) ) { zzmatch(88); local_use_def_MT_handler = 1; zzCONSUME; } zzEXIT(zztasp3); } } if ( p!=NULL && (p->upper_range!=0 || p->tclass || not) ) list_add(&MetaTokenNodes, (void *)p); if ( first_on_line ) { CurAltStart = (Junction *)zzaRet.left; altAdd(CurAltStart); /* MR7 */ p->altstart = CurAltStart; } if ( p!=NULL ) p->use_def_MT_handler = use_def_MT_handler || local_use_def_MT_handler; _retv = (Node *)p; } else { if ( (LA(1)==WildCard) ) { if ( not ) warn("~ WILDCARD is an undefined operation (implies 'nothing')"); zzmatch(WildCard); zzaRet = buildWildCard(LATEXT(1)); p=((TokNode *)((Junction *)zzaRet.left)->p1); zzCONSUME; { zzBLOCK(zztasp3); zzMake0; { if ( (LA(1)==123) ) { zzmatch(123); p->astnode=ASTroot; zzCONSUME; } else { if ( (setwd4[LA(1)]&0x80) ) { p->astnode=ASTchild; } else { if ( (LA(1)==101) ) { zzmatch(101); p->astnode=ASTexclude; zzCONSUME; } else {zzFAIL(1,zzerr13,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;} } } zzEXIT(zztasp3); } } list_add(&MetaTokenNodes, (void *)p); if ( first_on_line ) { CurAltStart = (Junction *)zzaRet.left; altAdd(CurAltStart); /* MR7 */ p->altstart = CurAltStart; if ( label!=NULL ) { p->el_label = label->str; label->elem = (Node *)p; } } _retv = (Node *)p; } else { if ( (LA(1)==NonTerminal) ) { if ( not ) warn("~ NONTERMINAL is an undefined operation"); zzmatch(NonTerminal); zzaRet = buildRuleRef(LATEXT(1)); zzCONSUME; { zzBLOCK(zztasp3); zzMake0; { if ( (LA(1)==101) ) { zzmatch(101); q = (RuleRefNode *) ((Junction *)zzaRet.left)->p1; q->astnode=ASTexclude; zzCONSUME; } zzEXIT(zztasp3); } } { zzBLOCK(zztasp3); zzMake0; { if ( (setwd5[LA(1)]&0x1) ) { { zzBLOCK(zztasp4); zzMake0; { if ( (LA(1)==102) ) { zzmatch(102); zzCONSUME; } zzEXIT(zztasp4); } } zzmatch(PassAction); addParm(((Junction *)zzaRet.left)->p1, LATEXT(1)); zzCONSUME; } zzEXIT(zztasp3); } } rr=(RuleRefNode *) ((Junction *)zzaRet.left)->p1; { zzBLOCK(zztasp3); zzMake0; { char *a; if ( (LA(1)==103) ) { zzmatch(103); zzCONSUME; zzmatch(PassAction); a = (char *) calloc(strlen(LATEXT(1))+1, sizeof(char)); require(a!=NULL, "rule element: cannot allocate assignment"); strcpy(a, LATEXT(1)); rr->assign = a; zzCONSUME; } zzEXIT(zztasp3); } } if ( label!=NULL ) { rr->el_label = label->str; label->elem = (Node *)rr; } if ( first_on_line ) { CurAltStart = (Junction *)zzaRet.left; altAdd(CurAltStart); /* MR7 */ ((RuleRefNode *)((Junction *)zzaRet.left)->p1)->altstart = CurAltStart; } _retv = (Node *)rr; } else {zzFAIL(1,zzerr14,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;} } } } zzEXIT(zztasp2); } } } else { if ( (LA(1)==Action) ) { if ( not ) warn("~ ACTION is an undefined operation"); zzmatch(Action); zzaArg(zztasp1,0) = buildAction(LATEXT(1),action_file,action_line, 0); zzCONSUME; if ( first_on_line ) { /* MR7 */ CurAltStart = (Junction *)zzaArg(zztasp1,0 ).left; /* MR7 */ altAdd(CurAltStart); /* MR7 */ }; _retv = (Node *) ((Junction *)zzaArg(zztasp1,0 ).left)->p1; } else { if ( (LA(1)==Pred) ) { if ( not ) warn("~ SEMANTIC-PREDICATE is an undefined operation"); zzmatch(Pred); zzaArg(zztasp1,0) = buildAction(LATEXT(1),action_file,action_line, 1); zzCONSUME; act = (ActionNode *) ((Junction *)zzaArg(zztasp1,0 ).left)->p1; if (numericActionLabel) { /* MR10 */ list_add(&NumericPredLabels,act); /* MR10 */ numericActionLabel=0; /* MR10 */ }; /* MR10 */ { zzBLOCK(zztasp2); zzMake0; { char *a; if ( (LA(1)==PassAction) ) { zzmatch(PassAction); a = (char *) calloc(strlen(LATEXT(1))+1, sizeof(char)); require(a!=NULL, "rule element: cannot allocate predicate fail action"); strcpy(a, LATEXT(1)); act->pred_fail = a; zzCONSUME; } zzEXIT(zztasp2); } } if ( first_on_line ) { /* MR7 */ CurAltStart = (Junction *)zzaArg(zztasp1,0 ).left; /* MR7 */ altAdd(CurAltStart); /* MR7 */ }; _retv = (Node *)act; } else { if ( (setwd5[LA(1)]&0x2) ) { if ( not ) warn("~ BLOCK is an undefined operation"); BlkLevel++; { zzBLOCK(zztasp2); zzMake0; { if ( (LA(1)==124) ) { zzmatch(124); zzCONSUME; { zzBLOCK(zztasp3); zzMake0; { if ( (LA(1)==125) ) { zzmatch(125); approx=LL_k; zzCONSUME; } else { if ( (LA(1)==126) ) { zzmatch(126); approx = 1; zzCONSUME; } else { if ( (LA(1)==127) ) { zzmatch(127); approx = 2; zzCONSUME; } else {zzFAIL(1,zzerr15,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;} } } zzEXIT(zztasp3); } } } zzEXIT(zztasp2); } } { zzBLOCK(zztasp2); zzMake0; { if ( (LA(1)==112) ) { zzmatch(112); zzCONSUME; block( &toksrefd,&rulesrefd ); zzmatch(113); blk = zzaRet = zzaArg(zztasp2,2); --BlkLevel; zzCONSUME; { zzBLOCK(zztasp3); zzMake0; { if ( (LA(1)==128) ) { zzmatch(128); zzaRet = makeLoop(zzaRet,approx); zzCONSUME; } else { if ( (LA(1)==129) ) { zzmatch(129); zzaRet = makePlus(zzaRet,approx); zzCONSUME; } else { if ( (LA(1)==130) ) { zzmatch(130); zzCONSUME; { zzBLOCK(zztasp4); zzMake0; { if ( (setwd5[LA(1)]&0x4) ) { { zzBLOCK(zztasp5); zzMake0; { if ( (LA(1)==131) ) { zzmatch(131); ampersandStyle=0; zzCONSUME; } else { if ( (LA(1)==111) ) { zzmatch(111); ampersandStyle=1; zzCONSUME; } else {zzFAIL(1,zzerr16,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;} } zzEXIT(zztasp5); } } zzmatch(Pred); zzaRet = buildAction(LATEXT(1),action_file,action_line,1); zzCONSUME; act = (ActionNode *) ((Junction *)zzaRet.left)->p1; semDepth=predicateLookaheadDepth(act); if (numericActionLabel) { /* MR10 */ list_add(&NumericPredLabels,act); /* MR10 */ numericActionLabel=0; /* MR10 */ }; /* MR10 */ { zzBLOCK(zztasp5); zzMake0; { char *a; if ( (LA(1)==PassAction) ) { zzmatch(PassAction); a = (char *)calloc(strlen(LATEXT(1))+1, sizeof(char)); require(a!=NULL, "rule element: cannot allocate predicate fail action"); strcpy(a, LATEXT(1)); act->pred_fail = a; zzCONSUME; } zzEXIT(zztasp5); } } if ( first_on_line) { /* MR7 */ CurAltStart=(Junction *)zzaRet.left; /* MR7 */ altAdd(CurAltStart); /* MR7 */ }; _retv = (Node *)act; pred = computePredicateFromContextGuard(blk,&predMsgDone); /* MR10 */ if ( pred==NULL) { /* MR10 */ if ( !predMsgDone) err("invalid or missing context guard"); /* MR10 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -