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

📄 antlr.c

📁 SRI international 发布的OAA框架软件
💻 C
📖 第 1 页 / 共 5 页
字号:
/*
 * A n t l r  T r a n s l a t i o n  H e a d e r
 *
 * Terence Parr, Will Cohen, and Hank Dietz: 1989-2001
 * Purdue University Electrical Engineering
 * With AHPCRC, University of Minnesota
 * ANTLR Version 1.33MR33
 *
 *   ..\bin\antlr -gh antlr.g
 *
 */

#define ANTLR_VERSION	13333
#include "pcctscfg.h"
#include "pccts_stdio.h"

#include "pcctscfg.h"
#include "set.h"
#include <ctype.h>
#include "syn.h"
#include "hash.h"
#include "generic.h"
#define zzcr_attr(attr,tok,t)
#define zzSET_SIZE 20
#include "antlr.h"
#include "tokens.h"
#include "dlgdef.h"
#include "mode.h"

/* MR23 In order to remove calls to PURIFY use the antlr -nopurify option */

#ifndef PCCTS_PURIFY
#define PCCTS_PURIFY(r,s) memset((char *) &(r),'\0',(s));
#endif

ANTLR_INFO


/* MR20 G. Hobbelt For Borland C++ 4.x & 5.x compiling with ALL warnings enabled */
#if defined(__TURBOC__)
#pragma warn -aus  /* unused assignment of 'xxx' */
#endif


#ifdef __USE_PROTOS
static void chkToken(char *, char *, char *, int);
#else
static void chkToken();
#endif

#ifdef __USE_PROTOS
static int isDLGmaxToken(char *Token);				     /* MR3 */
#else
static int isDLGmaxToken();				                             /* MR3 */
#endif

static int class_nest_level = 0;

/* MR20 G. Hobbelt extern definitions moved to antlr.h */

  

void
#ifdef __USE_PROTOS
grammar(void)
#else
grammar()
#endif
{
  zzRULE;
  zzBLOCK(zztasp1);
  zzMake0;
  {
  Graph g;
  {
    zzBLOCK(zztasp2);
    zzMake0;
    {
    for (;;) {
      if ( !((setwd1[LA(1)]&0x1))) break;
      if ( (LA(1)==94) ) {
        zzmatch(94); zzCONSUME;
        zzmatch(Action);
        
        if ( HdrAction==NULL ) {
          HdrAction = (char *) calloc(strlen(LATEXT(1))+1, sizeof(char));
          require(HdrAction!=NULL, "rule grammar: cannot allocate header action");
          strcpy(HdrAction, LATEXT(1));
        }
        else warn("additional #header statement ignored");
 zzCONSUME;

      }
      else {
        if ( (LA(1)==95) ) {
          zzmatch(95); zzCONSUME;
          zzmatch(Action);
          
          if ( FirstAction==NULL ) {
            FirstAction = (char *) calloc(strlen(LATEXT(1))+1, sizeof(char));
            require(FirstAction!=NULL, "rule grammar: cannot allocate #first action");
            strcpy(FirstAction, LATEXT(1));
          } else {
            warn("additional #first statement ignored");
          };
 zzCONSUME;

        }
        else {
          if ( (LA(1)==96) ) {
            zzmatch(96); zzCONSUME;
            zzmatch(QuotedTerm);
            
            if ( GenCC ) {
              warn("#parser meta-op incompatible with -CC; ignored");
            }
            else {
              if ( strcmp(ParserName,"zzparser")==0 ) {
                ParserName=StripQuotes(mystrdup(LATEXT(1)));
                if ( RulePrefix[0]!='\0' )
                {
                  warn("#parser meta-op incompatible with '-gp prefix'; '-gp' ignored");
                  RulePrefix[0]='\0';
                }
              }
              else warn("additional #parser statement ignored");
            }
 zzCONSUME;

          }
          else {
            if ( (LA(1)==97) ) {
              zzmatch(97); zzCONSUME;
              zzmatch(QuotedTerm);
              {
                char *fname;
                zzantlr_state st; FILE *f; struct zzdlg_state dst;
                UserTokenDefsFile = mystrdup(LATEXT(1));
                zzsave_antlr_state(&st);
                zzsave_dlg_state(&dst);
                fname = mystrdup(LATEXT(1));
                f = fopen(StripQuotes(fname), "r");
                if ( f==NULL ) {warn(eMsg1("cannot open token defs file '%s'", fname+1));}
                else {
                  ANTLRm(enum_file(fname+1), f, PARSE_ENUM_FILE);
                  UserDefdTokens = 1;
                }
                zzrestore_antlr_state(&st);
                zzrestore_dlg_state(&dst);
              }
 zzCONSUME;

            }
            else break; /* MR6 code for exiting loop "for sure" */
          }
        }
      }
      zzLOOP(zztasp2);
    }
    zzEXIT(zztasp2);
    }
  }
  {
    zzBLOCK(zztasp2);
    zzMake0;
    {
    for (;;) {
      if ( !((setwd1[LA(1)]&0x2))) break;
      if ( (LA(1)==Action) ) {
        zzmatch(Action);
        {
          UserAction *ua = newUserAction(LATEXT(1));
          ua->file = action_file; ua->line = action_line;
          if ( class_nest_level>0 ) list_add(&class_before_actions, ua);
          else list_add(&BeforeActions, ua);
        }
 zzCONSUME;

      }
      else {
        if ( (LA(1)==108) ) {
          laction();
        }
        else {
          if ( (LA(1)==109) ) {
            lmember();
          }
          else {
            if ( (LA(1)==110) ) {
              lprefix();
            }
            else {
              if ( (LA(1)==116) ) {
                aLexclass();
              }
              else {
                if ( (LA(1)==120) ) {
                  token();
                }
                else {
                  if ( (LA(1)==117) ) {
                    error();
                  }
                  else {
                    if ( (LA(1)==118) ) {
                      tclass();
                    }
                    else {
                      if ( (LA(1)==111) ) {
                        aPred();
                      }
                      else {
                        if ( (LA(1)==133) ) {
                          default_exception_handler();
                        }
                        else {
                          if ( (LA(1)==99) ) {
                            class_def();
                          }
                          else {
                            if ( (LA(1)==98) ) {
                              zzmatch(98);
                              
                              if ( class_nest_level==0 )
                              warn("missing class definition for trailing '}'");
                              class_nest_level--;
 zzCONSUME;

                            }
                            else break; /* MR6 code for exiting loop "for sure" */
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
      zzLOOP(zztasp2);
    }
    zzEXIT(zztasp2);
    }
  }
  rule();
  g=zzaArg(zztasp1,3); SynDiag = (Junction *) zzaArg(zztasp1,3 ).left;
  {
    zzBLOCK(zztasp2);
    zzMake0;
    {
    for (;;) {
      if ( !((setwd1[LA(1)]&0x4))) break;
      if ( (LA(1)==NonTerminal) ) {
        rule();
        if ( zzaArg(zztasp2,1 ).left!=NULL ) {
          g.right = NULL;
          
/* MR21a */             /*  Avoid use of a malformed graph when CannotContinue */
          /* MR21a */             /*  is already set                                     */
          /* MR21a */
          /* MR21a */             if (! (CannotContinue && g.left == NULL)) {
            /* MR21a */               g = Or(g, zzaArg(zztasp2,1));
            /* MR21a */             }
          /* MR21a */		      }
      }
      else {
        if ( (LA(1)==116) ) {
          aLexclass();
        }
        else {
          if ( (LA(1)==120) ) {
            token();
          }
          else {
            if ( (LA(1)==117) ) {
              error();
            }
            else {
              if ( (LA(1)==118) ) {
                tclass();
              }
              else {
                if ( (LA(1)==111) ) {
                  aPred();
                }
                else {
                  if ( (LA(1)==99) ) {
                    class_def();
                  }
                  else {
                    if ( (LA(1)==98) ) {
                      zzmatch(98);
                      
                      if ( class_nest_level==0 )
                      warn("missing class definition for trailing '}'");
                      class_nest_level--;
 zzCONSUME;

                    }
                    else break; /* MR6 code for exiting loop "for sure" */
                  }
                }
              }
            }
          }
        }
      }
      zzLOOP(zztasp2);
    }
    zzEXIT(zztasp2);
    }
  }
  {
    zzBLOCK(zztasp2);
    zzMake0;
    {
    for (;;) {
      if ( !((setwd1[LA(1)]&0x8))) break;
      if ( (LA(1)==Action) ) {
        zzmatch(Action);
        {
          UserAction *ua = newUserAction(LATEXT(1));
          ua->file = action_file; ua->line = action_line;
          if ( class_nest_level>0 ) list_add(&class_after_actions, ua);
          else list_add(&AfterActions, ua);
        }
 zzCONSUME;

      }
      else {
        if ( (LA(1)==108) ) {
          laction();
        }
        else {
          if ( (LA(1)==109) ) {
            lmember();
          }
          else {
            if ( (LA(1)==110) ) {
              lprefix();
            }
            else {
              if ( (LA(1)==117) ) {
                error();
              }
              else {
                if ( (LA(1)==118) ) {
                  tclass();
                }
                else {
                  if ( (LA(1)==99) ) {
                    class_def();
                  }
                  else {
                    if ( (LA(1)==111) ) {
                      aPred();
                    }
                    else {
                      if ( (LA(1)==98) ) {
                        zzmatch(98);
                        
                        if ( class_nest_level==0 )
                        warn("missing class definition for trailing '}'");
                        class_nest_level--;
 zzCONSUME;

                      }
                      else break; /* MR6 code for exiting loop "for sure" */
                    }
                  }
                }
              }
            }
          }
        }
      }
      zzLOOP(zztasp2);
    }
    zzEXIT(zztasp2);
    }
  }
  zzmatch(Eof); zzCONSUME;
  zzEXIT(zztasp1);
  return;
fail:
  zzEXIT(zztasp1);
  CannotContinue=TRUE;  
  zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
  zzresynch(setwd1, 0x10);
  }
}

void
#ifdef __USE_PROTOS
class_def(void)
#else
class_def()
#endif
{
  zzRULE;
  zzBLOCK(zztasp1);
  zzMake0;
  {
  int go=1; char name[MaxRuleName+1];
  zzmatch(99); zzCONSUME;
  {
    zzBLOCK(zztasp2);
    zzMake0;
    {
    if ( (LA(1)==NonTerminal) ) {
      zzmatch(NonTerminal);
      if(go) strncpy(name,LATEXT(1),MaxRuleName);
 zzCONSUME;

    }
    else {
      if ( (LA(1)==TokenTerm) ) {
        zzmatch(TokenTerm);
        if(go) strncpy(name,LATEXT(1),MaxRuleName);
 zzCONSUME;

      }
      else {zzFAIL(1,zzerr1,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
    }
    zzEXIT(zztasp2);
    }
  }
  
  if ( CurrentClassName[0]!='\0' && strcmp(CurrentClassName,name)!=0
  && GenCC ) {
    err("only one grammar class allowed in this release");
    go = 0;
  }
  else strcpy(CurrentClassName, name);
  if ( !GenCC ) { err("class meta-op used without C++ option"); }
  {
    zzBLOCK(zztasp2);
    zzMake0;
    {
    while ( (setwd1[LA(1)]&0x20) ) {
      zzsetmatch(zzerr2, zzerr3);
      if (ClassDeclStuff == NULL) {
        /* MR10 */                   ClassDeclStuff=(char *)calloc(MaxClassDeclStuff+1,sizeof(char));
        /* MR10 */              };
      /* MR10 */              strncat(ClassDeclStuff," ",MaxClassDeclStuff);
      /* MR10 */              strncat(ClassDeclStuff,LATEXT(1),MaxClassDeclStuff);
      /* MR22 */              do {
        /* MR22 */                if (0 == strcmp(LATEXT(1),"public")) break;
        /* MR22 */                if (0 == strcmp(LATEXT(1),"private")) break;
        /* MR22 */                if (0 == strcmp(LATEXT(1),"protected")) break;
        /* MR22 */                if (0 == strcmp(LATEXT(1),"virtual")) break;
        /* MR22 */                if (0 == strcmp(LATEXT(1),",")) break;
        /* MR22 */                if (0 == strcmp(LATEXT(1),":")) break;
        /* MR22 */                if (BaseClassName != NULL) break;
        /* MR22 */                BaseClassName=(char *)calloc(strlen(LATEXT(1))+1,sizeof(char));
        /* MR22 */                require(BaseClassName!=NULL, "rule grammar: cannot allocate base class name");
        /* MR22 */				  strcpy(BaseClassName,LATEXT(1));
        /* MR22 */              } while (0);
      /* MR10 */
 zzCONSUME;

      zzLOOP(zztasp2);
    }
    zzEXIT(zztasp2);
    }
  }
  zzmatch(102);
  
  no_classes_found = 0;
  if ( class_nest_level>=1 ) {warn("cannot have nested classes");}
  else class_nest_level++;
 zzCONSUME;

  zzEXIT(zztasp1);
  return;
fail:
  zzEXIT(zztasp1);
  CannotContinue=TRUE;  
  zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);
  zzresynch(setwd1, 0x40);
  }
}

void
#ifdef __USE_PROTOS
rule(void)
#else
rule()
#endif
{
  zzRULE;
  zzBLOCK(zztasp1);
  zzMake0;
  {
  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -