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

📄 lempar.c

📁 ethereal公司开发的aodv路由协议代码
💻 C
📖 第 1 页 / 共 2 页
字号:
    pAction = &pState->hashtbl[iLookAhead & pState->mask];    while( pAction ){      if( pAction->lookahead==iLookAhead ) return pAction->action;      pAction = pAction->next;    }  }else if( pState->mask!=0 || pState->hashtbl->lookahead!=YYNOCODE ){    return YY_NO_ACTION;  }  return pState->actionDefault;}/*** Perform a shift action.*/static void yy_shift(  yyParser *yypParser,          /* The parser to be shifted */  int yyNewState,               /* The new state to shift in */  int yyMajor,                  /* The major token to shift in */  YYMINORTYPE *yypMinor         /* Pointer ot the minor token to shift in */){  yypParser->idx++;  yypParser->top++;  if( yypParser->idx>=YYSTACKDEPTH ){     yypParser->idx--;     yypParser->top--;#ifndef NDEBUG     if( yyTraceFILE ){       fprintf(yyTraceFILE,"%sStack Overflow!\n",yyTracePrompt);     }#endif     while( yypParser->idx>=0 ) yy_pop_parser_stack(yypParser);     /* Here code is inserted which will execute if the parser     ** stack every overflows */%%     return;  }  yypParser->top->stateno = yyNewState;  yypParser->top->major = yyMajor;  yypParser->top->minor = *yypMinor;#ifndef NDEBUG  if( yyTraceFILE && yypParser->idx>0 ){    int i;    fprintf(yyTraceFILE,"%sShift %d\n",yyTracePrompt,yyNewState);    fprintf(yyTraceFILE,"%sStack:",yyTracePrompt);    for(i=1; i<=yypParser->idx; i++)      fprintf(yyTraceFILE," %s",yyTokenName[yypParser->stack[i].major]);    fprintf(yyTraceFILE,"\n");  }#endif}/* The following table contains information about every rule that** is used during the reduce.*/static struct {  YYCODETYPE lhs;         /* Symbol on the left-hand side of the rule */  unsigned char nrhs;     /* Number of right-hand side symbols in the rule */} yyRuleInfo[] = {%%};static void yy_accept();  /* Forward declaration *//*** Perform a reduce action and the shift that must immediately** follow the reduce.*/static void yy_reduce(  yyParser *yypParser,         /* The parser */  int yyruleno                 /* Number of the rule by which to reduce */  ParseANSIARGDECL){  int yygoto;                     /* The next state */  int yyact;                      /* The next action */  YYMINORTYPE yygotominor;        /* The LHS of the rule reduced */  struct yyStackEntry *yymsp;     /* The top of the parser's stack */  int yysize;                     /* Amount to pop the stack */  yymsp = yypParser->top;  switch( yyruleno ){  /* Beginning here are the reduction cases.  A typical example  ** follows:  **   case 0:  **     YYTRACE("<text of the rule>");  **  #line <lineno> <grammarfile>  **     { ... }           // User supplied code  **  #line <lineno> <thisfile>  **     break;  */%%  };  yygoto = yyRuleInfo[yyruleno].lhs;  yysize = yyRuleInfo[yyruleno].nrhs;  yypParser->idx -= yysize;  yypParser->top -= yysize;  yyact = yy_find_parser_action(yypParser,yygoto);  if( yyact < YYNSTATE ){    yy_shift(yypParser,yyact,yygoto,&yygotominor);  }else if( yyact == YYNSTATE + YYNRULE + 1 ){    yy_accept(yypParser ParseARGDECL);  }}/*** The following code executes when the parse fails*/static void yy_parse_failed(  yyParser *yypParser           /* The parser */  ParseANSIARGDECL              /* Extra arguments (if any) */){#ifndef NDEBUG  if( yyTraceFILE ){    fprintf(yyTraceFILE,"%sFail!\n",yyTracePrompt);  }#endif  while( yypParser->idx>=0 ) yy_pop_parser_stack(yypParser);  /* Here code is inserted which will be executed whenever the  ** parser fails */%%}/*** The following code executes when a syntax error first occurs.*/static void yy_syntax_error(  yyParser *yypParser,           /* The parser */  int yymajor,                   /* The major type of the error token */  YYMINORTYPE yyminor            /* The minor type of the error token */  ParseANSIARGDECL               /* Extra arguments (if any) */){#define TOKEN (yyminor.yy0)%%}/*** The following is executed when the parser accepts*/static void yy_accept(  yyParser *yypParser           /* The parser */  ParseANSIARGDECL              /* Extra arguments (if any) */){#ifndef NDEBUG  if( yyTraceFILE ){    fprintf(yyTraceFILE,"%sAccept!\n",yyTracePrompt);  }#endif  while( yypParser->idx>=0 ) yy_pop_parser_stack(yypParser);  /* Here code is inserted which will be executed whenever the  ** parser accepts */%%}/* The main parser program.** The first argument is a pointer to a structure obtained from** "ParseAlloc" which describes the current state of the parser.** The second argument is the major token number.  The third is** the minor token.  The fourth optional argument is whatever the** user wants (and specified in the grammar) and is available for** use by the action routines.**** Inputs:** <ul>** <li> A pointer to the parser (an opaque structure.)** <li> The major token number.** <li> The minor token number.** <li> An option argument of a grammar-specified type.** </ul>**** Outputs:** None.*/void Parse(  void *yyp,                   /* The parser */  int yymajor,                 /* The major token code number */  ParseTOKENTYPE yyminor       /* The value for the token */  ParseANSIARGDECL){  YYMINORTYPE yyminorunion;  int yyact;            /* The parser action. */  int yyendofinput;     /* True if we are at the end of input */  int yyerrorhit = 0;   /* True if yymajor has invoked an error */  yyParser *yypParser;  /* The parser */  /* (re)initialize the parser, if necessary */  yypParser = (yyParser*)yyp;  if( yypParser->idx<0 ){    if( yymajor==0 ) return;    yypParser->idx = 0;    yypParser->errcnt = -1;    yypParser->top = &yypParser->stack[0];    yypParser->top->stateno = 0;    yypParser->top->major = 0;  }  yyminorunion.yy0 = yyminor;  yyendofinput = (yymajor==0);#ifndef NDEBUG  if( yyTraceFILE ){    fprintf(yyTraceFILE,"%sInput %s\n",yyTracePrompt,yyTokenName[yymajor]);  }#endif  do{    yyact = yy_find_parser_action(yypParser,yymajor);    if( yyact<YYNSTATE ){      yy_shift(yypParser,yyact,yymajor,&yyminorunion);      yypParser->errcnt--;      if( yyendofinput && yypParser->idx>=0 ){        yymajor = 0;      }else{        yymajor = YYNOCODE;      }    }else if( yyact < YYNSTATE + YYNRULE ){      yy_reduce(yypParser,yyact-YYNSTATE ParseARGDECL);    }else if( yyact == YY_ERROR_ACTION ){#ifndef NDEBUG      if( yyTraceFILE ){        fprintf(yyTraceFILE,"%sSyntax Error!\n",yyTracePrompt);      }#endif#ifdef YYERRORSYMBOL      /* A syntax error has occurred.      ** The response to an error depends upon whether or not the      ** grammar defines an error token "ERROR".        **      ** This is what we do if the grammar does define ERROR:      **      **  * Call the %syntax_error function.      **      **  * Begin popping the stack until we enter a state where      **    it is legal to shift the error symbol, then shift      **    the error symbol.      **      **  * Set the error count to three.      **      **  * Begin accepting and shifting new tokens.  No new error      **    processing will occur until three tokens have been      **    shifted successfully.      **      */      if( yypParser->errcnt<0 ){        yy_syntax_error(yypParser,yymajor,yyminorunion ParseARGDECL);      }      if( yypParser->top->major==YYERRORSYMBOL || yyerrorhit ){#ifndef NDEBUG        if( yyTraceFILE ){          fprintf(yyTraceFILE,"%sDiscard input token %s\n",             yyTracePrompt,yyTokenName[yymajor]);        }#endif        yy_destructor(yymajor,&yyminorunion);        yymajor = YYNOCODE;      }else{         while(          yypParser->idx >= 0 &&          yypParser->top->major != YYERRORSYMBOL &&          (yyact = yy_find_parser_action(yypParser,YYERRORSYMBOL)) >= YYNSTATE        ){          yy_pop_parser_stack(yypParser);        }        if( yypParser->idx < 0 || yymajor==0 ){          yy_destructor(yymajor,&yyminorunion);          yy_parse_failed(yypParser ParseARGDECL);          yymajor = YYNOCODE;        }else if( yypParser->top->major!=YYERRORSYMBOL ){          YYMINORTYPE u2;          u2.YYERRSYMDT = 0;          yy_shift(yypParser,yyact,YYERRORSYMBOL,&u2);        }      }      yypParser->errcnt = 3;      yyerrorhit = 1;#else  /* YYERRORSYMBOL is not defined */      /* This is what we do if the grammar does not define ERROR:      **      **  * Report an error message, and throw away the input token.      **      **  * If the input token is $, then fail the parse.      **      ** As before, subsequent error messages are suppressed until      ** three input tokens have been successfully shifted.      */      if( yypParser->errcnt<=0 ){        yy_syntax_error(yypParser,yymajor,yyminorunion ParseARGDECL);      }      yypParser->errcnt = 3;      yy_destructor(yymajor,&yyminorunion);      if( yyendofinput ){        yy_parse_failed(yypParser ParseARGDECL);      }      yymajor = YYNOCODE;#endif    }else{      yy_accept(yypParser ParseARGDECL);      yymajor = YYNOCODE;    }  }while( yymajor!=YYNOCODE && yypParser->idx>=0 );  return;}

⌨️ 快捷键说明

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