git-svn-id: https://cvs.khronos.org/svn/repos/ogl/trunk/ecosystem/public/sdk/tools/glslang@19944 e7fa87d3-cd2b-0410-9028-fcbf551c1848
		
			
				
	
	
		
			335 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			335 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
 | 
						|
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
 | 
						|
#endif
 | 
						|
 | 
						|
 | 
						|
short	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;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
int
 | 
						|
yyparse()
 | 
						|
{
 | 
						|
  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;
 | 
						|
}
 | 
						|
 | 
						|
$
 |