?? antlr.c
字號:
Predicate *predExpr;
Predicate **tail=NULL;
predExpr = predAndExpr();
ORnode=new_pred();
ORnode->expr=PRED_OR_LIST;
if (predExpr != NULL) {
ORnode->down=predExpr;
tail=&predExpr->right;
};
{
zzBLOCK(zztasp2);
zzMake0;
{
while ( (LA(1)==112) ) {
zzmatch(112); zzCONSUME;
predExpr = predAndExpr();
if (predExpr != NULL) {
*tail=predExpr;
tail=&predExpr->right;
};
zzLOOP(zztasp2);
}
zzEXIT(zztasp2);
}
}
_retv=ORnode;
ORnode=NULL;
zzEXIT(zztasp1);
return _retv;
fail:
zzEXIT(zztasp1);
predicate_free(ORnode);
zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
zzresynch(setwd3, 0x20);
return _retv;
}
}
Predicate *
#ifdef __USE_PROTOS
predAndExpr(void)
#else
predAndExpr()
#endif
{
Predicate * _retv;
zzRULE;
zzBLOCK(zztasp1);
PCCTS_PURIFY(_retv,sizeof(Predicate * ))
zzMake0;
{
Predicate *ANDnode;
Predicate *predExpr;
Predicate **tail=NULL;
predExpr = predPrimary();
ANDnode=new_pred();
ANDnode->expr=PRED_AND_LIST;
if (predExpr != NULL) {
ANDnode->down=predExpr;
tail=&predExpr->right;
};
{
zzBLOCK(zztasp2);
zzMake0;
{
while ( (LA(1)==113) ) {
zzmatch(113); zzCONSUME;
predExpr = predPrimary();
if (predExpr != NULL) {
*tail=predExpr;
tail=&predExpr->right;
};
zzLOOP(zztasp2);
}
zzEXIT(zztasp2);
}
}
_retv=ANDnode;
ANDnode=NULL;
zzEXIT(zztasp1);
return _retv;
fail:
zzEXIT(zztasp1);
predicate_free(ANDnode);
zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
zzresynch(setwd3, 0x40);
return _retv;
}
}
Predicate *
#ifdef __USE_PROTOS
predPrimary(void)
#else
predPrimary()
#endif
{
Predicate * _retv;
zzRULE;
zzBLOCK(zztasp1);
PCCTS_PURIFY(_retv,sizeof(Predicate * ))
zzMake0;
{
char *name=NULL;
PredEntry *predEntry=NULL;
Predicate *predExpr=NULL;
if ( (LA(1)==TokenTerm) ) {
zzmatch(TokenTerm);
name=mystrdup(LATEXT(1));
zzCONSUME;
predEntry=(PredEntry *) hash_get(Pname,name);
if (predEntry == NULL) {
warnFL(eMsg1("no previously defined #pred with name \"%s\"",name),
FileStr[CurFile],zzline);
name=NULL;
_retv=NULL;
} else {
predExpr=predicate_dup(predEntry->pred);
predExpr->predEntry=predEntry;
_retv=predExpr;
};
}
else {
if ( (LA(1)==114) ) {
zzmatch(114); zzCONSUME;
predExpr = predOrExpr();
zzmatch(115);
_retv=predExpr;
zzCONSUME;
}
else {
if ( (LA(1)==103) ) {
zzmatch(103); zzCONSUME;
predExpr = predPrimary();
predExpr->inverted=!predExpr->inverted;
_retv=predExpr;
}
else {zzFAIL(1,zzerr13,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
}
}
zzEXIT(zztasp1);
return _retv;
fail:
zzEXIT(zztasp1);
predicate_free(predExpr);
zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
zzresynch(setwd3, 0x80);
return _retv;
}
}
void
#ifdef __USE_PROTOS
aLexclass(void)
#else
aLexclass()
#endif
{
zzRULE;
zzBLOCK(zztasp1);
zzMake0;
{
zzmatch(116); zzCONSUME;
zzmatch(TokenTerm);
lexclass(mystrdup(LATEXT(1)));
zzCONSUME;
zzEXIT(zztasp1);
return;
fail:
zzEXIT(zztasp1);
CannotContinue=TRUE;
zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
zzresynch(setwd4, 0x1);
}
}
void
#ifdef __USE_PROTOS
error(void)
#else
error()
#endif
{
zzRULE;
zzBLOCK(zztasp1);
zzMake0;
{
char *t=NULL; ECnode *e; int go=1; TermEntry *p;
zzmatch(117); zzCONSUME;
{
zzBLOCK(zztasp2);
zzMake0;
{
;
if ( (LA(1)==TokenTerm) ) {
zzmatch(TokenTerm);
t=mystrdup(LATEXT(1));
zzCONSUME;
}
else {
if ( (LA(1)==QuotedTerm) ) {
zzmatch(QuotedTerm);
t=mystrdup(LATEXT(1));
zzCONSUME;
}
else {zzFAIL(1,zzerr14,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
}
zzEXIT(zztasp2);
}
}
e = newECnode;
require(e!=NULL, "cannot allocate error class node");
e->lexclass = CurrentLexClass;
if ( Tnum( (t=StripQuotes(t)) ) == 0 )
{
if ( hash_get(Texpr, t) != NULL )
warn(eMsg1("errclass name conflicts with regular expression '%s'",t));
e->tok = addTname( t );
set_orel(e->tok, &imag_tokens);
require((p=(TermEntry *)hash_get(Tname, t)) != NULL,
"hash table mechanism is broken");
p->classname = 1; /* entry is errclass name, not token */
list_add(&eclasses, (char *)e);
}
else
{
warn(eMsg1("redefinition of errclass or conflict w/token or tokclass '%s'; ignored",t));
free( (char *)e );
go=0;
}
zzmatch(102); zzCONSUME;
{
zzBLOCK(zztasp2);
zzMake0;
{
if ( (LA(1)==NonTerminal) ) {
zzmatch(NonTerminal);
if ( go ) t=mystrdup(LATEXT(1));
zzCONSUME;
}
else {
if ( (LA(1)==TokenTerm) ) {
zzmatch(TokenTerm);
if ( go ) t=mystrdup(LATEXT(1));
zzCONSUME;
}
else {
if ( (LA(1)==QuotedTerm) ) {
zzmatch(QuotedTerm);
if ( go ) t=mystrdup(LATEXT(1));
zzCONSUME;
}
else {zzFAIL(1,zzerr15,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
}
}
zzEXIT(zztasp2);
}
}
if ( go ) list_add(&(e->elist), t);
{
zzBLOCK(zztasp2);
zzMake0;
{
while ( (setwd4[LA(1)]&0x2) ) {
{
zzBLOCK(zztasp3);
zzMake0;
{
if ( (LA(1)==NonTerminal) ) {
zzmatch(NonTerminal);
if ( go ) t=mystrdup(LATEXT(1));
zzCONSUME;
}
else {
if ( (LA(1)==TokenTerm) ) {
zzmatch(TokenTerm);
if ( go ) t=mystrdup(LATEXT(1));
zzCONSUME;
}
else {
if ( (LA(1)==QuotedTerm) ) {
zzmatch(QuotedTerm);
if ( go ) t=mystrdup(LATEXT(1));
zzCONSUME;
}
else {zzFAIL(1,zzerr16,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
}
}
zzEXIT(zztasp3);
}
}
if ( go ) list_add(&(e->elist), t);
zzLOOP(zztasp2);
}
zzEXIT(zztasp2);
}
}
zzmatch(98); zzCONSUME;
zzEXIT(zztasp1);
return;
fail:
zzEXIT(zztasp1);
CannotContinue=TRUE;
zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
zzresynch(setwd4, 0x4);
}
}
void
#ifdef __USE_PROTOS
tclass(void)
#else
tclass()
#endif
{
zzRULE;
zzBLOCK(zztasp1);
zzMake0;
{
char *t=NULL; TCnode *e; int go=1,tok,totok; TermEntry *p, *term, *toterm;
char *akaString=NULL; int save_file; int save_line;
char *totext=NULL;
zzmatch(118); zzCONSUME;
zzmatch(TokenTerm);
t=mystrdup(LATEXT(1));
zzCONSUME;
e = newTCnode;
require(e!=NULL, "cannot allocate token class node");
e->lexclass = CurrentLexClass;
if ( Tnum( t ) == 0 )
{
e->tok = addTname( t );
set_orel(e->tok, &imag_tokens);
set_orel(e->tok, &tokclasses);
require((p=(TermEntry *)hash_get(Tname, t)) != NULL,
"hash table mechanism is broken");
p->classname = 1; /* entry is class name, not token */
p->tclass = e; /* save ptr to this tclass def */
list_add(&tclasses, (char *)e);
}
else
{
warn(eMsg1("redefinition of tokclass or conflict w/token '%s'; ignored",t));
free( (char *)e );
go=0;
}
{
zzBLOCK(zztasp2);
zzMake0;
{
if ( (LA(1)==114) ) {
zzmatch(114); zzCONSUME;
zzmatch(QuotedTerm);
akaString=mystrdup(StripQuotes(LATEXT(1)));
/* MR11 */ save_file=CurFile;save_line=zzline;
/* MR23 */
zzCONSUME;
zzmatch(115); zzCONSUME;
}
else {
if ( (LA(1)==102) ) {
}
else {zzFAIL(1,zzerr17,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
}
zzEXIT(zztasp2);
}
}
/* MR23 */ if (p!= NULL && akaString != NULL) {
/* MR23 */ if (p->akaString != NULL) {
/* MR23 */ if (strcmp(p->akaString,akaString) != 0) {
/* MR23 */ warnFL(eMsg2("this #tokclass statment conflicts with a previous #tokclass %s(\"%s\") statement",
/* MR23 */ t,p->akaString),
/* MR23 */ FileStr[save_file],save_line);
/* MR23 */ };
/* MR23 */ } else {
/* MR23 */ p->akaString=akaString;
/* MR23 */ };
/* MR23 */ };
/* MR23 */
zzmatch(102); zzCONSUME;
{
zzBLOCK(zztasp2);
int zzcnt=1;
zzMake0;
{
do {
{
zzBLOCK(zztasp3);
zzMake0;
{
if ( (LA(1)==TokenTerm) ) {
zzmatch(TokenTerm);
if ( go ) {
term = (TermEntry *) hash_get(Tname, LATEXT(1));
if ( term==NULL && UserDefdTokens ) {
err("implicit token definition not allowed with #tokdefs");
go = 0;
}
else {t=mystrdup(LATEXT(1)); tok=addTname(LATEXT(1));}
}
zzCONSUME;
{
zzBLOCK(zztasp4);
zzMake0;
{
if ( (LA(1)==119) ) {
zzmatch(119); zzCONSUME;
zzmatch(TokenTerm);
if ( go ) {
toterm = (TermEntry *) hash_get(Tname, LATEXT(1));
if ( toterm==NULL && UserDefdTokens ) {
err("implicit token definition not allowed with #tokdefs");
go = 0;
} else {
totext=mystrdup(LATEXT(1)); totok=addTname(LATEXT(1));
}
}
zzCONSUME;
}
else {
if ( (setwd4[LA(1)]&0x8) ) {
}
else {zzFAIL(1,zzerr18,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
}
zzEXIT(zztasp4);
}
}
}
else {
if ( (LA(1)==QuotedTerm) ) {
zzmatch(QuotedTerm);
if ( go ) {
term = (TermEntry *) hash_get(Texpr, LATEXT(1));
if ( term==NULL && UserDefdTokens ) {
err("implicit token definition not allowed with #tokdefs");
go = 0;
}
else {t=mystrdup(LATEXT(1)); tok=addTexpr(LATEXT(1));}
}
zzCONSUME;
}
else {zzFAIL(1,zzerr19,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
}
zzEXIT(zztasp3);
}
}
if ( go ) {
if (totext == NULL) {
list_add(&(e->tlist), t);
} else {
list_add(&(e->tlist),"..");
list_add(&(e->tlist),t);
list_add(&(e->tlist),totext);
}
totext=NULL;
}
zzLOOP(zztasp2);
} while ( (setwd4[LA(1)]&0x10) );
zzEXIT(zztasp2);
}
}
zzmatch(98); zzCONSUME;
zzEXIT(zztasp1);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -