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

📄 btyaccpa.ske

📁 yacc源码
💻 SKE
📖 第 1 页 / 共 2 页
字号:
/*  The banner used here should be replaced with an #ident directive    *//*  if the target C compiler supports #ident directives.                *//*                                                                      *//*  If the skeleton is changed, the banner should be changed so that    *//*  the altered version can easily be distinguished from the original.  */%% banner/***    "@(#)btyaccpar, based on byacc 1.8 (Berkeley) 01/20/91";*/#define YYBTYACC 1typedef int Yshort;%% tables#ifdef __cplusplus#define _C_ "C"#else#define _C_ #endifextern _C_ Yshort yylhs[];extern _C_ Yshort yylen[];extern _C_ Yshort yydefred[];extern _C_ Yshort yydgoto[];extern _C_ Yshort yysindex[];extern _C_ Yshort yyrindex[];extern _C_ Yshort yycindex[];extern _C_ Yshort yygindex[];extern _C_ Yshort yytable[];extern _C_ Yshort yycheck[];extern _C_ Yshort yyctable[];#if YYDEBUGextern _C_ char *yyname[];extern _C_ char *yyrule[];#endif%% header#define yyclearin (yychar=(-1))#define yyerrok (yyerrflag=0)#ifndef YYSTACKGROWTH#define YYSTACKGROWTH 16#endif#ifndef YYDEFSTACKSIZE#define YYDEFSTACKSIZE 12#endif/*  #ifdef YYSTACKSIZE    #ifndef YYMAXDEPTH    #define YYMAXDEPTH YYSTACKSIZE    #endif    #else    #ifdef YYMAXDEPTH    #define YYSTACKSIZE YYMAXDEPTH    #else    #define YYSTACKSIZE 500    #define YYMAXDEPTH 500    #endif    #endif */#ifdef YYDEBUGint yydebug;#endifint yynerrs;YYSTYPE yylval;struct yyparsestate {  struct yyparsestate *save;        // Previously saved parser state  int                  state;  int                  errflag;  Yshort              *ssp;         // state stack pointer  YYSTYPE             *vsp;         // value stack pointer  YYSTYPE              val;  Yshort              *ss;          // state stack base  YYSTYPE             *vs;          // values stack base  int                  lexeme;      // index of the conflict lexeme in the lexical queue  unsigned int         stacksize;   // current maximum stack size  Yshort               ctry;        // index in yyctable[] for this conflict};// Current parser statestatic struct yyparsestate *yyps=0;// yypath!=NULL: do the full parse, starting at *yypath parser state.static struct yyparsestate *yypath=0;// Base of the lexical value queuestatic YYSTYPE *yylvals=0;// Current posistion at lexical value queuestatic YYSTYPE *yylvp=0;// End position of lexical value queuestatic YYSTYPE *yylve=0;// The last allocated position at the lexical value queuestatic YYSTYPE *yylvlim=0;// Current position at lexical token queuestatic Yshort *yylexp=0;static Yshort *yylexemes=0;#define yytrial (yyps->save)#define yyvsp   (yyps->vsp)#define yyval   (yyps->val)#define YYLEX (yylvp<yylve ? yylval=*yylvp++, *yylexp++ :                    \                             yyps->save ? (yylvp==yylvlim ? yyexpand() : 0), \                                          *yylexp = yylex(),                 \                                          *yylvp++ = yylval, yylve++, *yylexp++ \                                        : yylex())int yyparse(void);#ifndef __cplusplus#define YYSCOPY(t, f, s)        memcpy(t, f, (s)*sizeof(YYSTYPE))#define YYMORESTACK             \  do {                          \    int p = (yyps->ssp) - (yyps->ss);                           \    yyps->stacksize += YYSTACKGROWTH;                                   \    yyps->ss = (Yshort *)realloc(yyps->ss,  yyps->stacksize * sizeof(Yshort)); \    yyps->vs = (YYSTYPE *)realloc(yyps->vs, yyps->stacksize * sizeof(YYSTYPE)); \    yyps->ssp = (yyps->ss) + p;                                 \    yyps->vsp = (yyps->vs) + p;                                 \  } while (0)#else  /* C++ */#define YYSCOPY(to, from, size)         \  do {                                  \    int _i;                             \    for (_i = (size)-1; _i >= 0; _i--)  \      (to)[_i] = (from)[_i];            \  } while(0)#define YYMORESTACK                                             \  do {                                                          \    int p = yyps->ssp - yyps->ss;                               \    Yshort *tss = yyps->ss; YYSTYPE *tvs = (yyps->vs);          \    yyps->ss = new Yshort[(yyps->stacksize) + YYSTACKGROWTH];   \    yyps->vs = new YYSTYPE[(yyps->stacksize) + YYSTACKGROWTH];  \    memcpy(yyps->ss, tss, (yyps->stacksize) * sizeof(Yshort));  \    YYSCOPY(yyps->vs, tvs, (yyps->stacksize));                  \    yyps->stacksize += YYSTACKGROWTH;                           \    delete[] tss;                                               \    delete[] tvs;                                               \    yyps->ssp = yyps->ss + p;                                   \    yyps->vsp = yyps->vs + p;                                   \  } while (0)#endif /* C++ */%% body#ifndef YYNEWSTATE#ifdef __oldcstruct yyparsestate *YYNEWSTATE(size) {int size;#elsestruct yyparsestate *YYNEWSTATE(int size) {#endif /* __oldc */  struct yyparsestate *p;#ifndef __cplusplus  p = (struct yyparsestate *)malloc(sizeof(struct yyparsestate));  p->stacksize = size+4;  p->ss = (Yshort *)malloc((size+4)*sizeof(Yshort));  p->vs = (YYSTYPE *)malloc((size+4)*sizeof(YYSTYPE));#else /* C++ */  p = new yyparsestate;  p->stacksize = size+4;  p->ss = new Yshort[size + 4];  p->vs = new YYSTYPE[size + 4];#endif /* C++ */  { unsigned i;    for(i=0; i<(size+4)*sizeof(YYSTYPE); i++) {      ((char*)p->vs)[i] = 0;    }  }  return p;}#endif /* YYNEWSTATE */#ifndef YYFREESTATE#ifndef __cplusplus#define YYFREESTATE(p) (free((p)->ss), free((p)->vs), free(p))#else /* C++ */#define YYFREESTATE(p) (delete[] (p)->ss, delete[] (p)->vs, delete (p))#endif /* C++ */#endif /* YYFREESTATE */static int yyexpand() {  int p = yylvp-yylvals;  int s = yylvlim-yylvals;  s += YYSTACKGROWTH;#ifndef __cplusplus  yylvals = (YYSTYPE *)realloc(yylvals, s*sizeof(YYSTYPE));  yylexemes = (Yshort *)realloc(yylexemes, s*sizeof(Yshort));#else /* C++ */  { Yshort *tl = yylexemes; YYSTYPE *tv = yylvals;    yylvals = new YYSTYPE[s];    yylexemes = new Yshort[s];    memcpy(yylexemes, tl, (s-YYSTACKGROWTH)*sizeof(Yshort));    YYSCOPY(yylvals, tv, s-YYSTACKGROWTH);    delete[] tl;    delete[] tv;   }#endif /* C++ */  yylvp = yylve = yylvals + p;  yylvlim = yylvals + s;  yylexp = yylexemes + p;  return 0;}#define YYABORT  goto yyabort#define YYACCEPT goto yyaccept#define YYERROR  goto yyerrlab#define YYVALID         do { if (yyps->save)                        goto yyvalid; } while(0)#define YYVALID_NESTED  do { if (yyps->save && yyps->save->save==0) goto yyvalid; } while(0)#ifdef __cplusplus#include <stdlib.h>#elseextern char *getenv();#endif//// Parser function//int yyparse() {  int yym, yyn, yystate, yychar, yynewerrflag;  struct yyparsestate *yyerrctx = NULL;#if YYDEBUG  char *yys;    if ((yys = getenv("YYDEBUG"))) {    yyn = *yys;    if (yyn >= '0' && yyn <= '9')      yydebug = yyn - '0';   }#endif    yyps = YYNEWSTATE(YYDEFSTACKSIZE);  yyps->save = 0;  yynerrs = 0;  yyps->errflag = 0;  yychar = (-1);    yyps->ssp = yyps->ss;  yyps->vsp = yyps->vs;  *(yyps->ssp) = yystate = 0;    //  // Main parsing loop  // yyloop:  if ((yyn = yydefred[yystate])) {    goto yyreduce;  }  //  // Read one token  //  if (yychar < 0) {    if ((yychar = YYLEX) < 0) yychar = 0;#if YYDEBUG    if (yydebug) {      yys = 0;      if (yychar <= YYMAXTOKEN) yys = yyname[yychar];      if (!yys) yys = "illegal-symbol";      printf("yydebug: state %d, reading %d (%s)", yystate, yychar, yys);#ifdef YYDBPR      printf("<");      YYDBPR(yylval);      printf(">");#endif      printf("\n");     }#endif  }  //  // Do we have a conflict?  //  if ((yyn = yycindex[yystate]) &&      (yyn += yychar) >= 0 &&      yyn <= YYTABLESIZE &&      yycheck[yyn] == yychar) {    int ctry;    if (yypath) {#if YYDEBUG      if (yydebug) {        printf("yydebug: CONFLICT in state %d: following successful trial parse\n", yystate);      }#endif      // Switch to the next conflict context      struct yyparsestate *save = yypath;      yypath = save->save;      ctry = save->ctry;      if (save->state != yystate)         goto yyabort;      YYFREESTATE(save);     } else {#if YYDEBUG      if (yydebug) {        printf("yydebug: CONFLICT in state %d. ", yystate);        if(yyps->save) {          printf("ALREADY in conflict. Continue trial parse.");        } else {          printf("Start trial parse.");        }        printf("\n");      }      if(yyps->save) {        void yyerror_detailed(char *text, int err_token, YYSTYPE err_token_value);      }#endif      struct yyparsestate *save = YYNEWSTATE(yyps->ssp - yyps->ss);      save->save    = yyps->save;      save->state   = yystate;      save->errflag = yyps->errflag;      save->ssp     = save->ss + (yyps->ssp - yyps->ss);      save->vsp     = save->vs + (yyps->vsp - yyps->vs);      memcpy (save->ss, yyps->ss, (yyps->ssp - yyps->ss + 1)*sizeof(Yshort));      YYSCOPY(save->vs, yyps->vs, (yyps->ssp - yyps->ss + 1));      ctry = yytable[yyn];      if (yyctable[ctry] == -1) {#if YYDEBUG        if (yydebug && yychar >= 0)          printf("yydebug: backtracking 1 token\n");#endif        ctry++;       }      save->ctry = ctry;      if (!yyps->save) {

⌨️ 快捷键说明

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