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

📄 bison.hairy

📁 通常一个VC项目中包含多个C或C++文件
💻 HAIRY
字号:
extern int timeclock;int yyerror;		/*  Yyerror and yycost are set by guards.	*/int yycost;		/*  If yyerror is set to a nonzero value by a	*/			/*  guard, the reduction with which the guard	*/			/*  is associated is not performed, and the	*/			/*  error recovery mechanism is invoked.	*/			/*  Yycost indicates the cost of performing	*/			/*  the reduction given the attributes of the	*/			/*  symbols.					*//*  YYMAXDEPTH indicates the size of the parser's state and value	*//*  stacks.								*/#ifndef	YYMAXDEPTH#define	YYMAXDEPTH	500#endif/*  YYMAXRULES must be at least as large as the number of rules that	*//*  could be placed in the rule queue.  That number could be determined	*//*  from the grammar and the size of the stack, but, as yet, it is not.	*/#ifndef	YYMAXRULES#define	YYMAXRULES	100#endif#ifndef	YYMAXBACKUP#define YYMAXBACKUP	100#endifshort	yyss[YYMAXDEPTH];	/*  the state stack			*/YYSTYPE	yyvs[YYMAXDEPTH];	/*  the semantic value stack		*/YYLTYPE yyls[YYMAXDEPTH];	/*  the location stack			*/short	yyrq[YYMAXRULES];	/*  the rule queue			*/int	yychar;			/*  the lookahead symbol		*/YYSTYPE	yylval;			/*  the semantic value of the		*/				/*  lookahead symbol			*/YYSTYPE yytval;			/*  the semantic value for the state	*/				/*  at the top of the state stack.	*/YYSTYPE yyval;			/*  the variable used to return		*/				/*  semantic values from the action	*/				/*  routines				*/YYLTYPE yylloc;		/*  location data for the lookahead	*/				/*  symbol				*/YYLTYPE yytloc;		/*  location data for the state at the	*/				/*  top of the state stack		*/int	yynunlexed;short	yyunchar[YYMAXBACKUP];YYSTYPE	yyunval[YYMAXBACKUP];YYLTYPE yyunloc[YYMAXBACKUP];short *yygssp;			/*  a pointer to the top of the state	*/				/*  stack; only set during error	*/				/*  recovery.				*/YYSTYPE *yygvsp;		/*  a pointer to the top of the value	*/				/*  stack; only set during error	*/				/*  recovery.				*/YYLTYPE *yyglsp;		/*  a pointer to the top of the		*/				/*  location stack; only set during	*/				/*  error recovery.			*//*  Yyget is an interface between the parser and the lexical analyzer.	*//*  It is costly to provide such an interface, but it avoids requiring	*//*  the lexical analyzer to be able to back up the scan.		*/yyget(){  if (yynunlexed > 0)    {      yynunlexed--;      yychar = yyunchar[yynunlexed];      yylval = yyunval[yynunlexed];      yylloc = yyunloc[yynunlexed];    }  else if (yychar <= 0)    yychar = 0;  else    {      yychar = yylex();      if (yychar < 0)	yychar = 0;      else yychar = YYTRANSLATE(yychar);    }}yyunlex(chr, val, loc)int chr;YYSTYPE val;YYLTYPE loc;{  yyunchar[yynunlexed] = chr;  yyunval[yynunlexed] = val;  yyunloc[yynunlexed] = loc;  yynunlexed++;}yyrestore(first, last)register short *first;register short *last;{  register short *ssp;  register short *rp;  register int symbol;  register int state;  register int tvalsaved;  ssp = yygssp;  yyunlex(yychar, yylval, yylloc);  tvalsaved = 0;  while (first != last)    {      symbol = yystos[*ssp];      if (symbol < YYNTBASE)	{	  yyunlex(symbol, yytval, yytloc);	  tvalsaved = 1;	  ssp--;	}      ssp--;      if (first == yyrq)	first = yyrq + YYMAXRULES;      first--;      for (rp = yyrhs + yyprhs[*first]; symbol = *rp; rp++)	{	  if (symbol < YYNTBASE)	    state = yytable[yypact[*ssp] + symbol];	  else	    {	      state = yypgoto[symbol - YYNTBASE] + *ssp;	      if (state >= 0 && state <= YYLAST && yycheck[state] == *ssp)		state = yytable[state];	      else		state = yydefgoto[symbol - YYNTBASE];	    }	  *++ssp = state;	}    }  if ( ! tvalsaved && ssp > yyss)    {      yyunlex(yystos[*ssp], yytval, yytloc);      ssp--;    }  yygssp = ssp;}intyyparse(){  register int yystate;  register int yyn;  register short *yyssp;  register short *yyrq0;  register short *yyptr;  register YYSTYPE *yyvsp;  int yylen;  YYLTYPE *yylsp;  short *yyrq1;  short *yyrq2;  yystate = 0;  yyssp = yyss - 1;  yyvsp = yyvs - 1;  yylsp = yyls - 1;  yyrq0 = yyrq;  yyrq1 = yyrq0;  yyrq2 = yyrq0;  yychar = yylex();  if (yychar < 0)    yychar = 0;  else yychar = YYTRANSLATE(yychar);yynewstate:  if (yyssp >= yyss + YYMAXDEPTH - 1)    {      yyabort("Parser Stack Overflow");      YYABORT;    }  *++yyssp = yystate;yyresume:  yyn = yypact[yystate];  if (yyn == YYFLAG)    goto yydefault;  yyn += yychar;  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar)    goto yydefault;  yyn = yytable[yyn];  if (yyn < 0)    {      yyn = -yyn;      goto yyreduce;    }  else if (yyn == 0)    goto yyerrlab;  yystate = yyn;  yyptr = yyrq2;  while (yyptr != yyrq1)    {      yyn = *yyptr++;      yylen = yyr2[yyn];      yyvsp -= yylen;      yylsp -= yylen;      yyguard(yyn, yyvsp, yylsp);      if (yyerror)	goto yysemerr;      yyaction(yyn, yyvsp, yylsp);      *++yyvsp = yyval;      yylsp++;      if (yylen == 0)	{	  yylsp->timestamp = timeclock;	  yylsp->first_line = yytloc.first_line;	  yylsp->first_column = yytloc.first_column;	  yylsp->last_line = (yylsp-1)->last_line;	  yylsp->last_column = (yylsp-1)->last_column;	  yylsp->text = 0;	}      else	{	  yylsp->last_line = (yylsp+yylen-1)->last_line;	  yylsp->last_column = (yylsp+yylen-1)->last_column;	}	        if (yyptr == yyrq + YYMAXRULES)        yyptr = yyrq;    }  if (yystate == YYFINAL)    YYACCEPT;  yyrq2 = yyptr;  yyrq1 = yyrq0;  *++yyvsp = yytval;  *++yylsp = yytloc;  yytval = yylval;  yytloc = yylloc;  yyget();  goto yynewstate;yydefault:  yyn = yydefact[yystate];  if (yyn == 0)    goto yyerrlab;yyreduce:  *yyrq0++ = yyn;  if (yyrq0 == yyrq + YYMAXRULES)    yyrq0 = yyrq;  if (yyrq0 == yyrq2)    {      yyabort("Parser Rule Queue Overflow");      YYABORT;    }  yyssp -= yyr2[yyn];  yyn = yyr1[yyn];  yystate = yypgoto[yyn - YYNTBASE] + *yyssp;  if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)    yystate = yytable[yystate];  else    yystate = yydefgoto[yyn - YYNTBASE];  goto yynewstate;yysemerr:  *--yyptr = yyn;  yyrq2 = yyptr;  yyvsp += yyr2[yyn];yyerrlab:  yygssp = yyssp;  yygvsp = yyvsp;  yyglsp = yylsp;  yyrestore(yyrq0, yyrq2);  yyrecover();  yystate = *yygssp;  yyssp = yygssp;  yyvsp = yygvsp;  yyrq0 = yyrq;  yyrq1 = yyrq0;  yyrq2 = yyrq0;  goto yyresume;}$

⌨️ 快捷键说明

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