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

📄 gram.tab.c

📁 about sound recognition.i want to downlod
💻 C
📖 第 1 页 / 共 3 页
字号:
#line 121 "gram.y"{    ModeAssignAccptFlag = 0;;    break;}}#line 705 "/usr/share/bison/bison.simple"  yyvsp -= yylen;  yyssp -= yylen;#if YYLSP_NEEDED  yylsp -= yylen;#endif#if YYDEBUG  if (yydebug)    {      short *yyssp1 = yyss - 1;      YYFPRINTF (stderr, "state stack now");      while (yyssp1 != yyssp)	YYFPRINTF (stderr, " %d", *++yyssp1);      YYFPRINTF (stderr, "\n");    }#endif  *++yyvsp = yyval;#if YYLSP_NEEDED  *++yylsp = yyloc;#endif  /* Now `shift' the result of the reduction.  Determine what state     that goes to, based on the state we popped back to and the rule     number reduced by.  */  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;/*------------------------------------.| yyerrlab -- here on detecting error |`------------------------------------*/yyerrlab:  /* If not already recovering from an error, report this error.  */  if (!yyerrstatus)    {      ++yynerrs;#ifdef YYERROR_VERBOSE      yyn = yypact[yystate];      if (yyn > YYFLAG && yyn < YYLAST)	{	  YYSIZE_T yysize = 0;	  char *yymsg;	  int yyx, yycount;	  yycount = 0;	  /* Start YYX at -YYN if negative to avoid negative indexes in	     YYCHECK.  */	  for (yyx = yyn < 0 ? -yyn : 0;	       yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)	    if (yycheck[yyx + yyn] == yyx)	      yysize += yystrlen (yytname[yyx]) + 15, yycount++;	  yysize += yystrlen ("parse error, unexpected ") + 1;	  yysize += yystrlen (yytname[YYTRANSLATE (yychar)]);	  yymsg = (char *) YYSTACK_ALLOC (yysize);	  if (yymsg != 0)	    {	      char *yyp = yystpcpy (yymsg, "parse error, unexpected ");	      yyp = yystpcpy (yyp, yytname[YYTRANSLATE (yychar)]);	      if (yycount < 5)		{		  yycount = 0;		  for (yyx = yyn < 0 ? -yyn : 0;		       yyx < (int) (sizeof (yytname) / sizeof (char *));		       yyx++)		    if (yycheck[yyx + yyn] == yyx)		      {			const char *yyq = ! yycount ? ", expecting " : " or ";			yyp = yystpcpy (yyp, yyq);			yyp = yystpcpy (yyp, yytname[yyx]);			yycount++;		      }		}	      yyerror (yymsg);	      YYSTACK_FREE (yymsg);	    }	  else	    yyerror ("parse error; also virtual memory exhausted");	}      else#endif /* defined (YYERROR_VERBOSE) */	yyerror ("parse error");    }  goto yyerrlab1;/*--------------------------------------------------.| yyerrlab1 -- error raised explicitly by an action |`--------------------------------------------------*/yyerrlab1:  if (yyerrstatus == 3)    {      /* If just tried and failed to reuse lookahead token after an	 error, discard it.  */      /* return failure if at end of input */      if (yychar == YYEOF)	YYABORT;      YYDPRINTF ((stderr, "Discarding token %d (%s).\n",		  yychar, yytname[yychar1]));      yychar = YYEMPTY;    }  /* Else will try to reuse lookahead token after shifting the error     token.  */  yyerrstatus = 3;		/* Each real token shifted decrements this */  goto yyerrhandle;/*-------------------------------------------------------------------.| yyerrdefault -- current state does not do anything special for the || error token.                                                       |`-------------------------------------------------------------------*/yyerrdefault:#if 0  /* This is wrong; only states that explicitly want error tokens     should shift them.  */  /* If its default is to accept any token, ok.  Otherwise pop it.  */  yyn = yydefact[yystate];  if (yyn)    goto yydefault;#endif/*---------------------------------------------------------------.| yyerrpop -- pop the current state because it cannot handle the || error token                                                    |`---------------------------------------------------------------*/yyerrpop:  if (yyssp == yyss)    YYABORT;  yyvsp--;  yystate = *--yyssp;#if YYLSP_NEEDED  yylsp--;#endif#if YYDEBUG  if (yydebug)    {      short *yyssp1 = yyss - 1;      YYFPRINTF (stderr, "Error: state stack now");      while (yyssp1 != yyssp)	YYFPRINTF (stderr, " %d", *++yyssp1);      YYFPRINTF (stderr, "\n");    }#endif/*--------------.| yyerrhandle.  |`--------------*/yyerrhandle:  yyn = yypact[yystate];  if (yyn == YYFLAG)    goto yyerrdefault;  yyn += YYTERROR;  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)    goto yyerrdefault;  yyn = yytable[yyn];  if (yyn < 0)    {      if (yyn == YYFLAG)	goto yyerrpop;      yyn = -yyn;      goto yyreduce;    }  else if (yyn == 0)    goto yyerrpop;  if (yyn == YYFINAL)    YYACCEPT;  YYDPRINTF ((stderr, "Shifting error token, "));  *++yyvsp = yylval;#if YYLSP_NEEDED  *++yylsp = yylloc;#endif  yystate = yyn;  goto yynewstate;/*-------------------------------------.| yyacceptlab -- YYACCEPT comes here.  |`-------------------------------------*/yyacceptlab:  yyresult = 0;  goto yyreturn;/*-----------------------------------.| yyabortlab -- YYABORT comes here.  |`-----------------------------------*/yyabortlab:  yyresult = 1;  goto yyreturn;/*---------------------------------------------.| yyoverflowab -- parser overflow comes here.  |`---------------------------------------------*/yyoverflowlab:  yyerror ("parser stack overflow");  yyresult = 2;  /* Fall through.  */yyreturn:#ifndef yyoverflow  if (yyss != yyssa)    YYSTACK_FREE (yyss);#endif  return yyresult;}#line 127 "gram.y"#include "lex.yy.c"void appendNonTerm( char *name, int modeAssign ){    BODY *body;    body = setNonTerm();    entryNonTerm( name, body, modeAssign, StartFlag, ModeBlock, 0 );    BodyNo = 0;}BODY *setNonTerm( void ){    int i;    BODY *body;    BODY *top = NULL, *prev = NULL;    for( i = 0; i < BodyNo; i++ ){	if( (body = malloc( sizeof(BODY) )) == NULL ){	    errMes( "Can't alloc nonterminal list buffer" );	}	strcpy( body->name, BodyName[ i ] );	body->abort = 0;	if( prev != NULL ){	    prev->next = body;	} else {	    top = body;	}	prev = body;       }    body->next = NULL;    return( top );}CLASS *entryNonTerm( char *name, BODY *body, int modeAccpt, int start, int member, int tmp ){    CLASS *class;    class = getClass( name );    if( class != NULL ){	if( member ){	    errMes("Accepted flag of class \"%s\" is re-assigned", HeadName );	    ErrParse++;	}    } else {	if( (class = malloc( sizeof(CLASS) )) == NULL ){	    errMes( "Can't alloc memory for Class Finite Automaton." );	}	strcpy( class->name, name );	if( modeAccpt ){	    if( member ){		class->no = CurClassNo;	    } else {		if( !tmp ){		    outputHeader( name );		    class->no = CurClassNo;		}	    }	} else {	    class->no = -1;	}	class->branch = 0;	class->usedFA = 0;	class->used = 1;	/* non-terminal does not appear in voca */	class->bodyList = NULL;	class->tmp = tmp;	class->next = NULL;	if( ClassListTail == NULL ){	    ClassList = class;	} else {	    ClassListTail->next = class;	}	ClassListTail = class;    }    if( body != NULL ) pushBody( class, body );    if( start ){	StartFlag = 0;	if( StartSymbol == NULL ){	    StartSymbol = class;	} else {	    errMes("Start symbol is redifined as \"%s\"", class->name );	    ErrParse++;	}    }    return( class );}void pushBody( CLASS *class, BODY *newbody ){    BODYLIST *bodyList = class->bodyList;    BODYLIST *preBodyList = NULL;    BODYLIST *newBodyList;    BODY *body;    int cmp;    int defineNo = 1;    while( bodyList != NULL ){	body = bodyList->body;	cmp = strcmp( body->name, newbody->name );	if( cmp > 0 ) break;	if( cmp == 0 ){	    if( unifyBody( class->name, body, newbody ) ){		warnMes( "Class \"%s\" is defined as \"%s..\" again.", class->name, body->name );	    }	    return;	}	preBodyList = bodyList;	bodyList = bodyList->next;	defineNo++;    }    if( (newBodyList = malloc( sizeof(BODYLIST) )) == NULL ){	errMes( "Can't alloc class body buffer." );    }    newBodyList->body = newbody;    if( preBodyList != NULL ){	preBodyList->next = newBodyList;    } else {	class->bodyList = newBodyList;    }    newBodyList->next = bodyList;    class->branch++;}int unifyBody( char *className, BODY *body, BODY *newbody ){    BODY *bodyNext, *newbodyNext;    char *newClassName;    BODY *newBody;    CLASS *class;    bodyNext = body->next;    newbodyNext = newbody->next;    while( 1 ){	if( bodyNext == NULL && newbodyNext == NULL ){	    return( -1 );	}	if( newbodyNext == NULL ){	    if( body->abort ){		return( -1 );	    } else {		body->abort = 1;		return( 0 );	    }	}	if( bodyNext == NULL ){	    body->abort = 1;	    body->next = newbodyNext;	    return( 0 );	}	if( strcmp( bodyNext->name, newbodyNext->name ) ) break;	body = bodyNext;	newbody = newbodyNext;	bodyNext = body->next;	newbodyNext = newbody->next;    }    class = getClass( body->name );    if( class != NULL && class->tmp ){	entryNonTerm( body->name, newbodyNext, 0, 0, 0, 1 );    } else {	newClassName = getNewClassName( className );	entryNonTerm( newClassName, bodyNext, 0, 0, 0, 1 );	entryNonTerm( newClassName, newbodyNext, 0, 0, 0, 1 );	if( (newBody = malloc( sizeof(BODY) )) == NULL ){	    errMes( "Can't alloc body buffer of tmp class, \"%s\".", newClassName );	}	strcpy( newBody->name, newClassName );	newBody->abort = 0;	newBody->next = NULL;	body->next = newBody;	newbody->next = newBody;    }    return( 0 );}char *getNewClassName( char *keyname ){    static char classname[ SYMBOL_LEN ];    static int tmpClassNo = 0;    sprintf( classname, "%s#%d", keyname , tmpClassNo++ );    if( !SW_SemiQuiet ){	fprintf( stderr, "\rNow modifying grammar to minimize states[%d]", GramModifyNum );	NoNewLine = 1;    }    GramModifyNum++;    return( classname );}void setGram( void ){    char *name;    if( (yyin = fopen( GramFile, "r" )) == NULL ){	errMes( "Can't open grammar file \"%s\"", GramFile );    }    if( SW_Compati ){	strcpy( HeaderFile, "/dev/null" );    }    if( (FPheader = fopen( HeaderFile, "w" )) == NULL ){	errMes( "Can't open Header File for writting\"%s\"", HeaderFile );    }    fprintf( FPheader,	    "/* Header of class reduction flag for finite automaton parser\n"	    "                    made with mkfa %s\n\n"	    "        Do logicalAND between label and FA's field #4,#5.\n"	    "*/\n\n", VerNo	    );    if( !SW_Quiet ) fputs( "Now parsing grammar file\n", stderr );    yyparse();    if( !SW_Quiet ){	fprintf( stderr, "\rNow modifying grammar to minimize states[%d]\n", GramModifyNum - 1 );	NoNewLine = 0;    }    if( StartSymbol == NULL ) StartSymbol = ClassList;    fprintf( FPheader, "/* Start Symbol: %s */\n", StartSymbol->name );    fclose( FPheader );    if( (name = chkNoInstantClass()) != NULL ){	errMes( "Prototype-declared Class \"%s\" has no instant definitions", name );    }    if( ErrParse ) errMes( "%d fatal errors exist", ErrParse );}void outputHeader( char *name ){    if( ClassNo >= CLASSFLAG_MAX ){	if( !SW_Compati ){	    warnMes( "Class accepted flag overflow.\"%s\"", name );	    CurClassNo = -1;	}    } else {	if( !SW_Compati ){	    fprintf( FPheader, "#define ACCEPT_%s 0x%08x\n",		    name, 1 << ClassNo );	}	CurClassNo = ClassNo++;    }}char *chkNoInstantClass( void ){    CLASS *class = ClassList;    while( class != NULL ){	if( !class->branch ) return( class->name );	class = class->next;    }    return( NULL );}int yyerror( char *mes ){    errMes(mes );    ErrParse++;    return( 0 );}

⌨️ 快捷键说明

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