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

📄 lempar.c

📁 SQLite 2.8.6 源代码,用来在Linux/Unix/Windows上编译安装.它是一个小型的数据库,但是非常好用,速度也快,一般的数据库查询之类的操作据统计比MySQL,PostgreSQL
💻 C
📖 第 1 页 / 共 2 页
字号:
/* Driver template for the LEMON parser generator.** The author disclaims copyright to this source code.*//* First off, code is include which follows the "include" declaration** in the input file. */#include <stdio.h>%%/* Next is all token values, in a form suitable for use by makeheaders.** This section will be null unless lemon is run with the -m switch.*//* ** These constants (all generated automatically by the parser generator)** specify the various kinds of tokens (terminals) that the parser** understands. **** Each symbol here is a terminal symbol in the grammar.*/%%/* Make sure the INTERFACE macro is defined.*/#ifndef INTERFACE# define INTERFACE 1#endif/* The next thing included is series of defines which control** various aspects of the generated parser.**    YYCODETYPE         is the data type used for storing terminal**                       and nonterminal numbers.  "unsigned char" is**                       used if there are fewer than 250 terminals**                       and nonterminals.  "int" is used otherwise.**    YYNOCODE           is a number of type YYCODETYPE which corresponds**                       to no legal terminal or nonterminal number.  This**                       number is used to fill in empty slots of the hash **                       table.**    YYFALLBACK         If defined, this indicates that one or more tokens**                       have fall-back values which should be used if the**                       original value of the token will not parse.**    YYACTIONTYPE       is the data type used for storing terminal**                       and nonterminal numbers.  "unsigned char" is**                       used if there are fewer than 250 rules and**                       states combined.  "int" is used otherwise.**    ParseTOKENTYPE     is the data type used for minor tokens given **                       directly to the parser from the tokenizer.**    YYMINORTYPE        is the data type used for all minor tokens.**                       This is typically a union of many types, one of**                       which is ParseTOKENTYPE.  The entry in the union**                       for base tokens is called "yy0".**    YYSTACKDEPTH       is the maximum depth of the parser's stack.**    ParseARG_SDECL     A static variable declaration for the %extra_argument**    ParseARG_PDECL     A parameter declaration for the %extra_argument**    ParseARG_STORE     Code to store %extra_argument into yypParser**    ParseARG_FETCH     Code to extract %extra_argument from yypParser**    YYNSTATE           the combined number of states.**    YYNRULE            the number of rules in the grammar**    YYERRORSYMBOL      is the code number of the error symbol.  If not**                       defined, then do no error processing.*/%%#define YY_NO_ACTION      (YYNSTATE+YYNRULE+2)#define YY_ACCEPT_ACTION  (YYNSTATE+YYNRULE+1)#define YY_ERROR_ACTION   (YYNSTATE+YYNRULE)/* Next is the action table.  Each entry in this table contains****  +  An integer which is the number representing the look-ahead**     token****  +  An integer indicating what action to take.  Number (N) between**     0 and YYNSTATE-1 mean shift the look-ahead and go to state N.**     Numbers between YYNSTATE and YYNSTATE+YYNRULE-1 mean reduce by**     rule N-YYNSTATE.  Number YYNSTATE+YYNRULE means that a syntax**     error has occurred.  Number YYNSTATE+YYNRULE+1 means the parser**     accepts its input.****  +  A pointer to the next entry with the same hash value.**** The action table is really a series of hash tables.  Each hash** table contains a number of entries which is a power of two.  The** "state" table (which follows) contains information about the starting** point and size of each hash table.*/struct yyActionEntry {  YYCODETYPE   lookahead;   /* The value of the look-ahead token */  YYCODETYPE   next;        /* Next entry + 1. Zero at end of collision chain */  YYACTIONTYPE action;      /* Action to take for this look-ahead */};typedef struct yyActionEntry yyActionEntry;static const yyActionEntry yyActionTable[] = {%%};/* The state table contains information needed to look up the correct** action in the action table, given the current state of the parser.** Information needed includes:****  +  A pointer to the start of the action hash table in yyActionTable.****  +  The number of entries in the action hash table.****  +  The default action.  This is the action to take if no entry for**     the given look-ahead is found in the action hash table.*/struct yyStateEntry {  const yyActionEntry *hashtbl;  /* Start of the hash table in yyActionTable */  YYCODETYPE nEntry;             /* Number of entries in action hash table */  YYACTIONTYPE actionDefault;    /* Default action if look-ahead not found */};typedef struct yyStateEntry yyStateEntry;static const yyStateEntry yyStateTable[] = {%%};/* The next table maps tokens into fallback tokens.  If a construct** like the following:** **      %fallback ID X Y Z.**** appears in the grammer, then ID becomes a fallback token for X, Y,** and Z.  Whenever one of the tokens X, Y, or Z is input to the parser** but it does not parse, the type of the token is changed to ID and** the parse is retried before an error is thrown.*/#ifdef YYFALLBACKstatic const YYCODETYPE yyFallback[] = {%%};#endif /* YYFALLBACK *//* The following structure represents a single element of the** parser's stack.  Information stored includes:****   +  The state number for the parser at this level of the stack.****   +  The value of the token stored at this level of the stack.**      (In other words, the "major" token.)****   +  The semantic value stored at this level of the stack.  This is**      the information used by the action routines in the grammar.**      It is sometimes called the "minor" token.*/struct yyStackEntry {  int stateno;       /* The state-number */  int major;         /* The major token value.  This is the code                     ** number for the token at this stack level */  YYMINORTYPE minor; /* The user-supplied minor token value.  This                     ** is the value of the token  */};typedef struct yyStackEntry yyStackEntry;/* The state of the parser is completely contained in an instance of** the following structure */struct yyParser {  int yyidx;                    /* Index of top element in stack */  int yyerrcnt;                 /* Shifts left before out of the error */  yyStackEntry *yytop;          /* Pointer to the top stack element */  ParseARG_SDECL                /* A place to hold %extra_argument */  yyStackEntry yystack[YYSTACKDEPTH];  /* The parser's stack */};typedef struct yyParser yyParser;#ifndef NDEBUG#include <stdio.h>static FILE *yyTraceFILE = 0;static char *yyTracePrompt = 0;#endif /* NDEBUG */#ifndef NDEBUG/* ** Turn parser tracing on by giving a stream to which to write the trace** and a prompt to preface each trace message.  Tracing is turned off** by making either argument NULL **** Inputs:** <ul>** <li> A FILE* to which trace output should be written.**      If NULL, then tracing is turned off.** <li> A prefix string written at the beginning of every**      line of trace output.  If NULL, then tracing is**      turned off.** </ul>**** Outputs:** None.*/void ParseTrace(FILE *TraceFILE, char *zTracePrompt){  yyTraceFILE = TraceFILE;  yyTracePrompt = zTracePrompt;  if( yyTraceFILE==0 ) yyTracePrompt = 0;  else if( yyTracePrompt==0 ) yyTraceFILE = 0;}#endif /* NDEBUG */#ifndef NDEBUG/* For tracing shifts, the names of all terminals and nonterminals** are required.  The following table supplies these names */static const char *yyTokenName[] = { %%};#endif /* NDEBUG */#ifndef NDEBUG/* For tracing reduce actions, the names of all rules are required.*/static const char *yyRuleName[] = {%%};#endif /* NDEBUG *//*** This function returns the symbolic name associated with a token** value.*/const char *ParseTokenName(int tokenType){#ifndef NDEBUG  if( tokenType>0 && tokenType<(sizeof(yyTokenName)/sizeof(yyTokenName[0])) ){    return yyTokenName[tokenType];  }else{    return "Unknown";  }#else  return "";#endif}/* ** This function allocates a new parser.** The only argument is a pointer to a function which works like** malloc.**** Inputs:** A pointer to the function used to allocate memory.**** Outputs:** A pointer to a parser.  This pointer is used in subsequent calls** to Parse and ParseFree.*/void *ParseAlloc(void *(*mallocProc)(size_t)){  yyParser *pParser;  pParser = (yyParser*)(*mallocProc)( (size_t)sizeof(yyParser) );  if( pParser ){    pParser->yyidx = -1;  }  return pParser;}/* The following function deletes the value associated with a** symbol.  The symbol can be either a terminal or nonterminal.** "yymajor" is the symbol code, and "yypminor" is a pointer to** the value.*/static void yy_destructor(YYCODETYPE yymajor, YYMINORTYPE *yypminor){  switch( yymajor ){    /* Here is inserted the actions which take place when a    ** terminal or non-terminal is destroyed.  This can happen    ** when the symbol is popped from the stack during a    ** reduce or during error processing or when a parser is     ** being destroyed before it is finished parsing.    **    ** Note: during a reduce, the only symbols destroyed are those    ** which appear on the RHS of the rule, but which are not used    ** inside the C code.    */%%    default:  break;   /* If no destructor action specified: do nothing */  }}/*** Pop the parser's stack once.**** If there is a destructor routine associated with the token which** is popped from the stack, then call it.**** Return the major token number for the symbol popped.*/static int yy_pop_parser_stack(yyParser *pParser){  YYCODETYPE yymajor;  if( pParser->yyidx<0 ) return 0;#ifndef NDEBUG  if( yyTraceFILE && pParser->yyidx>=0 ){    fprintf(yyTraceFILE,"%sPopping %s\n",      yyTracePrompt,      yyTokenName[pParser->yytop->major]);  }#endif  yymajor = pParser->yytop->major;  yy_destructor( yymajor, &pParser->yytop->minor);  pParser->yyidx--;  pParser->yytop--;  return yymajor;}/* ** Deallocate and destroy a parser.  Destructors are all called for** all stack elements before shutting the parser down.**** Inputs:** <ul>** <li>  A pointer to the parser.  This should be a pointer**       obtained from ParseAlloc.** <li>  A pointer to a function used to reclaim memory obtained**       from malloc.** </ul>*/void ParseFree(  void *p,                    /* The parser to be deleted */  void (*freeProc)(void*)     /* Function used to reclaim memory */){  yyParser *pParser = (yyParser*)p;  if( pParser==0 ) return;  while( pParser->yyidx>=0 ) yy_pop_parser_stack(pParser);  (*freeProc)((void*)pParser);}/*** Find the appropriate action for a parser given the look-ahead token.**** If the look-ahead token is YYNOCODE, then check to see if the action is** independent of the look-ahead.  If it is, return the action, otherwise** return YY_NO_ACTION.*/static int yy_find_parser_action(  yyParser *pParser,        /* The parser */  int iLookAhead             /* The look-ahead token */){  const yyStateEntry *pState;   /* Appropriate entry in the state table */  const yyActionEntry *pAction; /* Action appropriate for the look-ahead */  int iFallback;                /* Fallback token */   /* if( pParser->yyidx<0 ) return YY_NO_ACTION;  */

⌨️ 快捷键说明

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