15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* Driver template for the LEMON parser generator.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** The author disclaims copyright to this source code.
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** This version of "lempar.c" is modified, slightly, for use by SQLite.
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** The only modifications are the addition of a couple of NEVER()
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** macros to disable tests that are needed in the case of a general
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** LALR(1) grammar but which are always false in the
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** specific grammar used by SQLite.
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* First off, code is included that follows the "include" declaration
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** in the input grammar file. */
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stdio.h>
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)%%
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* Next is all token values, in a form suitable for use by makeheaders.
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** This section will be null unless lemon is run with the -m switch.
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** These constants (all generated automatically by the parser generator)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** specify the various kinds of tokens (terminals) that the parser
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** understands.
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Each symbol here is a terminal symbol in the grammar.
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)%%
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* Make sure the INTERFACE macro is defined.
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef INTERFACE
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define INTERFACE 1
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* The next thing included is series of defines which control
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** various aspects of the generated parser.
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**    YYCODETYPE         is the data type used for storing terminal
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**                       and nonterminal numbers.  "unsigned char" is
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**                       used if there are fewer than 250 terminals
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**                       and nonterminals.  "int" is used otherwise.
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**    YYNOCODE           is a number of type YYCODETYPE which corresponds
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**                       to no legal terminal or nonterminal number.  This
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**                       number is used to fill in empty slots of the hash
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**                       table.
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**    YYFALLBACK         If defined, this indicates that one or more tokens
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**                       have fall-back values which should be used if the
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**                       original value of the token will not parse.
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**    YYACTIONTYPE       is the data type used for storing terminal
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**                       and nonterminal numbers.  "unsigned char" is
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**                       used if there are fewer than 250 rules and
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**                       states combined.  "int" is used otherwise.
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**    ParseTOKENTYPE     is the data type used for minor tokens given
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**                       directly to the parser from the tokenizer.
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**    YYMINORTYPE        is the data type used for all minor tokens.
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**                       This is typically a union of many types, one of
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**                       which is ParseTOKENTYPE.  The entry in the union
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**                       for base tokens is called "yy0".
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**    YYSTACKDEPTH       is the maximum depth of the parser's stack.  If
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**                       zero the stack is dynamically sized using realloc()
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**    ParseARG_SDECL     A static variable declaration for the %extra_argument
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**    ParseARG_PDECL     A parameter declaration for the %extra_argument
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**    ParseARG_STORE     Code to store %extra_argument into yypParser
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**    ParseARG_FETCH     Code to extract %extra_argument from yypParser
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**    YYNSTATE           the combined number of states.
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**    YYNRULE            the number of rules in the grammar
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**    YYERRORSYMBOL      is the code number of the error symbol.  If not
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**                       defined, then do no error processing.
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)%%
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define YY_NO_ACTION      (YYNSTATE+YYNRULE+2)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define YY_ACCEPT_ACTION  (YYNSTATE+YYNRULE+1)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define YY_ERROR_ACTION   (YYNSTATE+YYNRULE)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* The yyzerominor constant is used to initialize instances of
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** YYMINORTYPE objects to zero. */
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const YYMINORTYPE yyzerominor = { 0 };
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* Define the yytestcase() macro to be a no-op if is not already defined
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** otherwise.
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Applications can choose to define yytestcase() in the %include section
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** to a macro that can assist in verifying code coverage.  For production
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** code the yytestcase() macro should be turned off.  But it is useful
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** for testing.
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef yytestcase
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define yytestcase(X)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* Next are the tables used to determine what action to take based on the
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** current state and lookahead token.  These tables are used to implement
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** functions that take a state number and lookahead value and return an
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** action integer.
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Suppose the action integer is N.  Then the action is determined as
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** follows
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**   0 <= N < YYNSTATE                  Shift N.  That is, push the lookahead
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**                                      token onto the stack and goto state N.
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**   YYNSTATE <= N < YYNSTATE+YYNRULE   Reduce by rule N-YYNSTATE.
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**   N == YYNSTATE+YYNRULE              A syntax error has occurred.
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**   N == YYNSTATE+YYNRULE+1            The parser accepts its input.
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**   N == YYNSTATE+YYNRULE+2            No such action.  Denotes unused
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**                                      slots in the yy_action[] table.
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** The action table is constructed as a single large table named yy_action[].
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Given state S and lookahead X, the action is computed as
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      yy_action[ yy_shift_ofst[S] + X ]
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** If the index value yy_shift_ofst[S]+X is out of range or if the value
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** yy_lookahead[yy_shift_ofst[S]+X] is not equal to X or if yy_shift_ofst[S]
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** is equal to YY_SHIFT_USE_DFLT, it means that the action is not in the table
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** and that yy_default[S] should be used instead.
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** The formula above is for computing the action when the lookahead is
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** a terminal symbol.  If the lookahead is a non-terminal (as occurs after
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** a reduce action) then the yy_reduce_ofst[] array is used in place of
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** the yy_shift_ofst[] array and YY_REDUCE_USE_DFLT is used in place of
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** YY_SHIFT_USE_DFLT.
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** The following are the tables generated in this section:
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**  yy_action[]        A single table containing all actions.
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**  yy_lookahead[]     A table containing the lookahead for each entry in
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**                     yy_action.  Used to detect hash collisions.
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**  yy_shift_ofst[]    For each state, the offset into yy_action for
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**                     shifting terminals.
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**  yy_reduce_ofst[]   For each state, the offset into yy_action for
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**                     shifting non-terminals after a reduce.
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**  yy_default[]       Default action for each state.
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)%%
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* The next table maps tokens into fallback tokens.  If a construct
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** like the following:
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      %fallback ID X Y Z.
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** appears in the grammar, then ID becomes a fallback token for X, Y,
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** and Z.  Whenever one of the tokens X, Y, or Z is input to the parser
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** but it does not parse, the type of the token is changed to ID and
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** the parse is retried before an error is thrown.
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef YYFALLBACK
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const YYCODETYPE yyFallback[] = {
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)%%
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* YYFALLBACK */
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* The following structure represents a single element of the
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** parser's stack.  Information stored includes:
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**   +  The state number for the parser at this level of the stack.
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**   +  The value of the token stored at this level of the stack.
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      (In other words, the "major" token.)
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**   +  The semantic value stored at this level of the stack.  This is
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      the information used by the action routines in the grammar.
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      It is sometimes called the "minor" token.
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct yyStackEntry {
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  YYACTIONTYPE stateno;  /* The state-number */
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  YYCODETYPE major;      /* The major token value.  This is the code
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         ** number for the token at this stack level */
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  YYMINORTYPE minor;     /* The user-supplied minor token value.  This
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         ** is the value of the token  */
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef struct yyStackEntry yyStackEntry;
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* The state of the parser is completely contained in an instance of
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** the following structure */
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct yyParser {
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int yyidx;                    /* Index of top element in stack */
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef YYTRACKMAXSTACKDEPTH
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int yyidxMax;                 /* Maximum value of yyidx */
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int yyerrcnt;                 /* Shifts left before out of the error */
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ParseARG_SDECL                /* A place to hold %extra_argument */
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if YYSTACKDEPTH<=0
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int yystksz;                  /* Current side of the stack */
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  yyStackEntry *yystack;        /* The parser's stack */
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  yyStackEntry yystack[YYSTACKDEPTH];  /* The parser's stack */
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef struct yyParser yyParser;
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef NDEBUG
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stdio.h>
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static FILE *yyTraceFILE = 0;
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static char *yyTracePrompt = 0;
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* NDEBUG */
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef NDEBUG
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Turn parser tracing on by giving a stream to which to write the trace
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** and a prompt to preface each trace message.  Tracing is turned off
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** by making either argument NULL
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Inputs:
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** <ul>
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** <li> A FILE* to which trace output should be written.
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      If NULL, then tracing is turned off.
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** <li> A prefix string written at the beginning of every
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      line of trace output.  If NULL, then tracing is
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**      turned off.
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** </ul>
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Outputs:
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** None.
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ParseTrace(FILE *TraceFILE, char *zTracePrompt){
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  yyTraceFILE = TraceFILE;
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  yyTracePrompt = zTracePrompt;
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if( yyTraceFILE==0 ) yyTracePrompt = 0;
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else if( yyTracePrompt==0 ) yyTraceFILE = 0;
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* NDEBUG */
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef NDEBUG
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* For tracing shifts, the names of all terminals and nonterminals
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** are required.  The following table supplies these names */
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const char *const yyTokenName[] = {
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)%%
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* NDEBUG */
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef NDEBUG
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* For tracing reduce actions, the names of all rules are required.
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const char *const yyRuleName[] = {
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)%%
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* NDEBUG */
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if YYSTACKDEPTH<=0
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Try to increase the size of the parser stack.
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void yyGrowStack(yyParser *p){
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int newSize;
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  yyStackEntry *pNew;
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  newSize = p->yystksz*2 + 100;
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pNew = realloc(p->yystack, newSize*sizeof(pNew[0]));
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if( pNew ){
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    p->yystack = pNew;
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    p->yystksz = newSize;
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef NDEBUG
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if( yyTraceFILE ){
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      fprintf(yyTraceFILE,"%sStack grows to %d entries!\n",
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              yyTracePrompt, p->yystksz);
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** This function allocates a new parser.
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** The only argument is a pointer to a function which works like
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** malloc.
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Inputs:
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** A pointer to the function used to allocate memory.
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Outputs:
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** A pointer to a parser.  This pointer is used in subsequent calls
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** to Parse and ParseFree.
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void *ParseAlloc(void *(*mallocProc)(size_t)){
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  yyParser *pParser;
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pParser = (yyParser*)(*mallocProc)( (size_t)sizeof(yyParser) );
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if( pParser ){
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    pParser->yyidx = -1;
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef YYTRACKMAXSTACKDEPTH
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    pParser->yyidxMax = 0;
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if YYSTACKDEPTH<=0
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    pParser->yystack = NULL;
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    pParser->yystksz = 0;
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    yyGrowStack(pParser);
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return pParser;
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* The following function deletes the value associated with a
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** symbol.  The symbol can be either a terminal or nonterminal.
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** "yymajor" is the symbol code, and "yypminor" is a pointer to
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** the value.
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void yy_destructor(
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  yyParser *yypParser,    /* The parser */
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  YYCODETYPE yymajor,     /* Type code for object to destroy */
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  YYMINORTYPE *yypminor   /* The object to be destroyed */
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)){
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ParseARG_FETCH;
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  switch( yymajor ){
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /* Here is inserted the actions which take place when a
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ** terminal or non-terminal is destroyed.  This can happen
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ** when the symbol is popped from the stack during a
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ** reduce or during error processing or when a parser is
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ** being destroyed before it is finished parsing.
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    **
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ** Note: during a reduce, the only symbols destroyed are those
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ** which appear on the RHS of the rule, but which are not used
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ** inside the C code.
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    */
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)%%
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:  break;   /* If no destructor action specified: do nothing */
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Pop the parser's stack once.
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** If there is a destructor routine associated with the token which
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** is popped from the stack, then call it.
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Return the major token number for the symbol popped.
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int yy_pop_parser_stack(yyParser *pParser){
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  YYCODETYPE yymajor;
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  yyStackEntry *yytos = &pParser->yystack[pParser->yyidx];
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* There is no mechanism by which the parser stack can be popped below
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ** empty in SQLite.  */
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if( NEVER(pParser->yyidx<0) ) return 0;
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef NDEBUG
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if( yyTraceFILE && pParser->yyidx>=0 ){
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fprintf(yyTraceFILE,"%sPopping %s\n",
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      yyTracePrompt,
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      yyTokenName[yytos->major]);
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  yymajor = yytos->major;
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  yy_destructor(pParser, yymajor, &yytos->minor);
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pParser->yyidx--;
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return yymajor;
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Deallocate and destroy a parser.  Destructors are all called for
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** all stack elements before shutting the parser down.
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Inputs:
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** <ul>
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** <li>  A pointer to the parser.  This should be a pointer
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**       obtained from ParseAlloc.
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** <li>  A pointer to a function used to reclaim memory obtained
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**       from malloc.
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** </ul>
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ParseFree(
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void *p,                    /* The parser to be deleted */
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void (*freeProc)(void*)     /* Function used to reclaim memory */
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)){
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  yyParser *pParser = (yyParser*)p;
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* In SQLite, we never try to destroy a parser that was not successfully
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ** created in the first place. */
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if( NEVER(pParser==0) ) return;
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  while( pParser->yyidx>=0 ) yy_pop_parser_stack(pParser);
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if YYSTACKDEPTH<=0
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  free(pParser->yystack);
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  (*freeProc)((void*)pParser);
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Return the peak depth of the stack for a parser.
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef YYTRACKMAXSTACKDEPTH
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int ParseStackPeak(void *p){
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  yyParser *pParser = (yyParser*)p;
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return pParser->yyidxMax;
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Find the appropriate action for a parser given the terminal
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** look-ahead token iLookAhead.
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** If the look-ahead token is YYNOCODE, then check to see if the action is
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** independent of the look-ahead.  If it is, return the action, otherwise
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** return YY_NO_ACTION.
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int yy_find_shift_action(
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  yyParser *pParser,        /* The parser */
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  YYCODETYPE iLookAhead     /* The look-ahead token */
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)){
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int i;
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int stateno = pParser->yystack[pParser->yyidx].stateno;
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if( stateno>YY_SHIFT_COUNT
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   || (i = yy_shift_ofst[stateno])==YY_SHIFT_USE_DFLT ){
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return yy_default[stateno];
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  assert( iLookAhead!=YYNOCODE );
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  i += iLookAhead;
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if( i<0 || i>=YY_ACTTAB_COUNT || yy_lookahead[i]!=iLookAhead ){
4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if( iLookAhead>0 ){
4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef YYFALLBACK
4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      YYCODETYPE iFallback;            /* Fallback token */
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if( iLookAhead<sizeof(yyFallback)/sizeof(yyFallback[0])
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)             && (iFallback = yyFallback[iLookAhead])!=0 ){
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef NDEBUG
4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if( yyTraceFILE ){
4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          fprintf(yyTraceFILE, "%sFALLBACK %s => %s\n",
4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)             yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[iFallback]);
4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return yy_find_shift_action(pParser, iFallback);
4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef YYWILDCARD
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      {
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        int j = i - iLookAhead + YYWILDCARD;
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if(
4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if YY_SHIFT_MIN+YYWILDCARD<0
4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          j>=0 &&
4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if YY_SHIFT_MAX+YYWILDCARD>=YY_ACTTAB_COUNT
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          j<YY_ACTTAB_COUNT &&
4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          yy_lookahead[j]==YYWILDCARD
4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        ){
4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef NDEBUG
4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          if( yyTraceFILE ){
4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            fprintf(yyTraceFILE, "%sWILDCARD %s => %s\n",
4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[YYWILDCARD]);
4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          }
4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* NDEBUG */
4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          return yy_action[j];
4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* YYWILDCARD */
4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return yy_default[stateno];
4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }else{
4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return yy_action[i];
4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Find the appropriate action for a parser given the non-terminal
4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** look-ahead token iLookAhead.
4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**
4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** If the look-ahead token is YYNOCODE, then check to see if the action is
4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** independent of the look-ahead.  If it is, return the action, otherwise
4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** return YY_NO_ACTION.
4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int yy_find_reduce_action(
4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int stateno,              /* Current state number */
4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  YYCODETYPE iLookAhead     /* The look-ahead token */
4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)){
4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int i;
4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef YYERRORSYMBOL
4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if( stateno>YY_REDUCE_COUNT ){
4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return yy_default[stateno];
4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  assert( stateno<=YY_REDUCE_COUNT );
4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  i = yy_reduce_ofst[stateno];
4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  assert( i!=YY_REDUCE_USE_DFLT );
4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  assert( iLookAhead!=YYNOCODE );
4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  i += iLookAhead;
4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef YYERRORSYMBOL
4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if( i<0 || i>=YY_ACTTAB_COUNT || yy_lookahead[i]!=iLookAhead ){
4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return yy_default[stateno];
4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  assert( i>=0 && i<YY_ACTTAB_COUNT );
4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  assert( yy_lookahead[i]==iLookAhead );
4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return yy_action[i];
4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** The following routine is called if the stack overflows.
4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void yyStackOverflow(yyParser *yypParser, YYMINORTYPE *yypMinor){
4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   ParseARG_FETCH;
4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   yypParser->yyidx--;
4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef NDEBUG
4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   if( yyTraceFILE ){
4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     fprintf(yyTraceFILE,"%sStack Overflow!\n",yyTracePrompt);
4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   }
4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   /* Here code is inserted which will execute if the parser
4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   ** stack every overflows */
4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)%%
4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   ParseARG_STORE; /* Suppress warning about unused %extra_argument var */
4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Perform a shift action.
5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void yy_shift(
5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  yyParser *yypParser,          /* The parser to be shifted */
5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int yyNewState,               /* The new state to shift in */
5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int yyMajor,                  /* The major token to shift in */
5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  YYMINORTYPE *yypMinor         /* Pointer to the minor token to shift in */
5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)){
5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  yyStackEntry *yytos;
5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  yypParser->yyidx++;
5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef YYTRACKMAXSTACKDEPTH
5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if( yypParser->yyidx>yypParser->yyidxMax ){
5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    yypParser->yyidxMax = yypParser->yyidx;
5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if YYSTACKDEPTH>0
5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if( yypParser->yyidx>=YYSTACKDEPTH ){
5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    yyStackOverflow(yypParser, yypMinor);
5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if( yypParser->yyidx>=yypParser->yystksz ){
5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    yyGrowStack(yypParser);
5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if( yypParser->yyidx>=yypParser->yystksz ){
5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      yyStackOverflow(yypParser, yypMinor);
5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return;
5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  yytos = &yypParser->yystack[yypParser->yyidx];
5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  yytos->stateno = (YYACTIONTYPE)yyNewState;
5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  yytos->major = (YYCODETYPE)yyMajor;
5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  yytos->minor = *yypMinor;
5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef NDEBUG
5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if( yyTraceFILE && yypParser->yyidx>0 ){
5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int i;
5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fprintf(yyTraceFILE,"%sShift %d\n",yyTracePrompt,yyNewState);
5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fprintf(yyTraceFILE,"%sStack:",yyTracePrompt);
5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for(i=1; i<=yypParser->yyidx; i++)
5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      fprintf(yyTraceFILE," %s",yyTokenName[yypParser->yystack[i].major]);
5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fprintf(yyTraceFILE,"\n");
5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* The following table contains information about every rule that
5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** is used during the reduce.
5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const struct {
5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  YYCODETYPE lhs;         /* Symbol on the left-hand side of the rule */
5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  unsigned char nrhs;     /* Number of right-hand side symbols in the rule */
5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} yyRuleInfo[] = {
5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)%%
5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void yy_accept(yyParser*);  /* Forward Declaration */
5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Perform a reduce action and the shift that must immediately
5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** follow the reduce.
5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void yy_reduce(
5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  yyParser *yypParser,         /* The parser */
5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int yyruleno                 /* Number of the rule by which to reduce */
5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)){
5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int yygoto;                     /* The next state */
5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int yyact;                      /* The next action */
5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  YYMINORTYPE yygotominor;        /* The LHS of the rule reduced */
5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  yyStackEntry *yymsp;            /* The top of the parser's stack */
5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int yysize;                     /* Amount to pop the stack */
5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ParseARG_FETCH;
5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  yymsp = &yypParser->yystack[yypParser->yyidx];
5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef NDEBUG
5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if( yyTraceFILE && yyruleno>=0
5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        && yyruleno<(int)(sizeof(yyRuleName)/sizeof(yyRuleName[0])) ){
5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fprintf(yyTraceFILE, "%sReduce [%s].\n", yyTracePrompt,
5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      yyRuleName[yyruleno]);
5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* NDEBUG */
5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* Silence complaints from purify about yygotominor being uninitialized
5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ** in some cases when it is copied into the stack after the following
5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ** switch.  yygotominor is uninitialized when a rule reduces that does
5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ** not set the value of its left-hand side nonterminal.  Leaving the
5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ** value of the nonterminal uninitialized is utterly harmless as long
5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ** as the value is never used.  So really the only thing this code
5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ** accomplishes is to quieten purify.
5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  **
5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ** 2007-01-16:  The wireshark project (www.wireshark.org) reports that
5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ** without this code, their parser segfaults.  I'm not sure what there
5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ** parser is doing to make this happen.  This is the second bug report
5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ** from wireshark this week.  Clearly they are stressing Lemon in ways
5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ** that it has not been previously stressed...  (SQLite ticket #2172)
5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  */
5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /*memset(&yygotominor, 0, sizeof(yygotominor));*/
5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  yygotominor = yyzerominor;
5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  switch( yyruleno ){
6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* Beginning here are the reduction cases.  A typical example
6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ** follows:
6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  **   case 0:
6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  **  #line <lineno> <grammarfile>
6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  **     { ... }           // User supplied code
6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  **  #line <lineno> <thisfile>
6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  **     break;
6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  */
6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)%%
6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  yygoto = yyRuleInfo[yyruleno].lhs;
6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  yysize = yyRuleInfo[yyruleno].nrhs;
6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  yypParser->yyidx -= yysize;
6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  yyact = yy_find_reduce_action(yymsp[-yysize].stateno,(YYCODETYPE)yygoto);
6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if( yyact < YYNSTATE ){
6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef NDEBUG
6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /* If we are not debugging and the reduce action popped at least
6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ** one element off the stack, then we can push the new element back
6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ** onto the stack here, and skip the stack overflow test in yy_shift().
6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ** That gives a significant speed improvement. */
6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if( yysize ){
6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      yypParser->yyidx++;
6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      yymsp -= yysize-1;
6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      yymsp->stateno = (YYACTIONTYPE)yyact;
6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      yymsp->major = (YYCODETYPE)yygoto;
6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      yymsp->minor = yygotominor;
6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }else
6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      yy_shift(yypParser,yyact,yygoto,&yygotominor);
6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }else{
6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    assert( yyact == YYNSTATE + YYNRULE + 1 );
6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    yy_accept(yypParser);
6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** The following code executes when the parse fails
6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef YYNOERRORRECOVERY
6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void yy_parse_failed(
6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  yyParser *yypParser           /* The parser */
6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)){
6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ParseARG_FETCH;
6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef NDEBUG
6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if( yyTraceFILE ){
6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fprintf(yyTraceFILE,"%sFail!\n",yyTracePrompt);
6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* Here code is inserted which will be executed whenever the
6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ** parser fails */
6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)%%
6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ParseARG_STORE; /* Suppress warning about unused %extra_argument variable */
6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* YYNOERRORRECOVERY */
6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** The following code executes when a syntax error first occurs.
6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void yy_syntax_error(
6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  yyParser *yypParser,           /* The parser */
6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int yymajor,                   /* The major type of the error token */
6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  YYMINORTYPE yyminor            /* The minor type of the error token */
6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)){
6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ParseARG_FETCH;
6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define TOKEN (yyminor.yy0)
6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)%%
6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ParseARG_STORE; /* Suppress warning about unused %extra_argument variable */
6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** The following is executed when the parser accepts
6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void yy_accept(
6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  yyParser *yypParser           /* The parser */
6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)){
6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ParseARG_FETCH;
6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef NDEBUG
6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if( yyTraceFILE ){
6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fprintf(yyTraceFILE,"%sAccept!\n",yyTracePrompt);
6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* Here code is inserted which will be executed whenever the
6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ** parser accepts */
6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)%%
6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ParseARG_STORE; /* Suppress warning about unused %extra_argument variable */
6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* The main parser program.
6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** The first argument is a pointer to a structure obtained from
6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** "ParseAlloc" which describes the current state of the parser.
6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** The second argument is the major token number.  The third is
6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** the minor token.  The fourth optional argument is whatever the
6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** user wants (and specified in the grammar) and is available for
6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** use by the action routines.
6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**
7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Inputs:
7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** <ul>
7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** <li> A pointer to the parser (an opaque structure.)
7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** <li> The major token number.
7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** <li> The minor token number.
7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** <li> An option argument of a grammar-specified type.
7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** </ul>
7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**
7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Outputs:
7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** None.
7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void Parse(
7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void *yyp,                   /* The parser */
7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int yymajor,                 /* The major token code number */
7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ParseTOKENTYPE yyminor       /* The value for the token */
7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ParseARG_PDECL               /* Optional %extra_argument parameter */
7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)){
7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  YYMINORTYPE yyminorunion;
7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int yyact;            /* The parser action. */
7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int yyendofinput;     /* True if we are at the end of input */
7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef YYERRORSYMBOL
7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int yyerrorhit = 0;   /* True if yymajor has invoked an error */
7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  yyParser *yypParser;  /* The parser */
7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* (re)initialize the parser, if necessary */
7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  yypParser = (yyParser*)yyp;
7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if( yypParser->yyidx<0 ){
7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if YYSTACKDEPTH<=0
7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if( yypParser->yystksz <=0 ){
7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      /*memset(&yyminorunion, 0, sizeof(yyminorunion));*/
7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      yyminorunion = yyzerominor;
7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      yyStackOverflow(yypParser, &yyminorunion);
7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return;
7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    yypParser->yyidx = 0;
7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    yypParser->yyerrcnt = -1;
7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    yypParser->yystack[0].stateno = 0;
7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    yypParser->yystack[0].major = 0;
7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  yyminorunion.yy0 = yyminor;
7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  yyendofinput = (yymajor==0);
7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ParseARG_STORE;
7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef NDEBUG
7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if( yyTraceFILE ){
7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fprintf(yyTraceFILE,"%sInput %s\n",yyTracePrompt,yyTokenName[yymajor]);
7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  do{
7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    yyact = yy_find_shift_action(yypParser,(YYCODETYPE)yymajor);
7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if( yyact<YYNSTATE ){
7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      assert( !yyendofinput );  /* Impossible to shift the $ token */
7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      yy_shift(yypParser,yyact,yymajor,&yyminorunion);
7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      yypParser->yyerrcnt--;
7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      yymajor = YYNOCODE;
7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }else if( yyact < YYNSTATE + YYNRULE ){
7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      yy_reduce(yypParser,yyact-YYNSTATE);
7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }else{
7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      assert( yyact == YY_ERROR_ACTION );
7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef YYERRORSYMBOL
7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int yymx;
7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef NDEBUG
7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if( yyTraceFILE ){
7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        fprintf(yyTraceFILE,"%sSyntax Error!\n",yyTracePrompt);
7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef YYERRORSYMBOL
7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      /* A syntax error has occurred.
7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ** The response to an error depends upon whether or not the
7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ** grammar defines an error token "ERROR".
7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      **
7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ** This is what we do if the grammar does define ERROR:
7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      **
7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      **  * Call the %syntax_error function.
7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      **
7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      **  * Begin popping the stack until we enter a state where
7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      **    it is legal to shift the error symbol, then shift
7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      **    the error symbol.
7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      **
7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      **  * Set the error count to three.
7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      **
7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      **  * Begin accepting and shifting new tokens.  No new error
7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      **    processing will occur until three tokens have been
7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      **    shifted successfully.
7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      **
7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      */
7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if( yypParser->yyerrcnt<0 ){
7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        yy_syntax_error(yypParser,yymajor,yyminorunion);
7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      yymx = yypParser->yystack[yypParser->yyidx].major;
7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if( yymx==YYERRORSYMBOL || yyerrorhit ){
7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef NDEBUG
7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if( yyTraceFILE ){
7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          fprintf(yyTraceFILE,"%sDiscard input token %s\n",
7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)             yyTracePrompt,yyTokenName[yymajor]);
7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        yy_destructor(yypParser, (YYCODETYPE)yymajor,&yyminorunion);
8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        yymajor = YYNOCODE;
8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }else{
8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)         while(
8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          yypParser->yyidx >= 0 &&
8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          yymx != YYERRORSYMBOL &&
8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          (yyact = yy_find_reduce_action(
8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        yypParser->yystack[yypParser->yyidx].stateno,
8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        YYERRORSYMBOL)) >= YYNSTATE
8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        ){
8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          yy_pop_parser_stack(yypParser);
8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if( yypParser->yyidx < 0 || yymajor==0 ){
8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion);
8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          yy_parse_failed(yypParser);
8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          yymajor = YYNOCODE;
8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }else if( yymx!=YYERRORSYMBOL ){
8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          YYMINORTYPE u2;
8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          u2.YYERRSYMDT = 0;
8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          yy_shift(yypParser,yyact,YYERRORSYMBOL,&u2);
8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      yypParser->yyerrcnt = 3;
8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      yyerrorhit = 1;
8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(YYNOERRORRECOVERY)
8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      /* If the YYNOERRORRECOVERY macro is defined, then do not attempt to
8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ** do any kind of error recovery.  Instead, simply invoke the syntax
8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ** error routine and continue going as if nothing had happened.
8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      **
8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ** Applications can set this macro (for example inside %include) if
8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ** they intend to abandon the parse upon the first syntax error seen.
8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      */
8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      yy_syntax_error(yypParser,yymajor,yyminorunion);
8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion);
8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      yymajor = YYNOCODE;
8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else  /* YYERRORSYMBOL is not defined */
8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      /* This is what we do if the grammar does not define ERROR:
8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      **
8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      **  * Report an error message, and throw away the input token.
8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      **
8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      **  * If the input token is $, then fail the parse.
8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      **
8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ** As before, subsequent error messages are suppressed until
8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ** three input tokens have been successfully shifted.
8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      */
8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if( yypParser->yyerrcnt<=0 ){
8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        yy_syntax_error(yypParser,yymajor,yyminorunion);
8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      yypParser->yyerrcnt = 3;
8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion);
8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if( yyendofinput ){
8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        yy_parse_failed(yypParser);
8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      yymajor = YYNOCODE;
8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }while( yymajor!=YYNOCODE && yypParser->yyidx>=0 );
8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return;
8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
861