⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 antlr.c

📁 SRI international 发布的OAA框架软件
💻 C
📖 第 1 页 / 共 5 页
字号:
  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 + -