/* This file is automatically generated by Lemon from input grammar
** source file "../src/CFCParseHeader.y".
*/
/*
** 2000-05-29
**
** The author disclaims copyright to this source code.  In place of
** a legal notice, here is a blessing:
**
**    May you do good and not evil.
**    May you find forgiveness for yourself and forgive others.
**    May you share freely, never taking more than you give.
**
*************************************************************************
** Driver template for the LEMON parser generator.
**
** The "lemon" program processes an LALR(1) input grammar file, then uses
** this template to construct a parser.  The "lemon" program inserts text
** at each "%%" line.  Also, any "P-a-r-s-e" identifier prefix (without the
** interstitial "-" characters) contained in this template is changed into
** the value of the %name directive from the grammar.  Otherwise, the content
** of this template is copied straight through into the generated parser
** source file.
**
** The following is the concatenation of all %include directives from the
** input grammar file:
*/
/************ Begin %include sections from the grammar ************************/
#line 24 "../src/CFCParseHeader.y"

#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <stdlib.h>
#include "CFC.h"
#include "CFCLexHeader.h"
#ifndef true
  #define true 1
  #define false 0
#endif

static CFCClass*
S_start_class(CFCParser *state, CFCDocuComment *docucomment, char *exposure,
              char *modifiers, char *class_name, char *class_nickname,
              char *inheritance) {
    CFCFileSpec *file_spec = CFCParser_get_file_spec(state);
    int is_final = false;
    int is_inert = false;
    int is_abstract = false;
    if (modifiers) {
        if (strstr(modifiers, "inline")) {
            CFCUtil_die("Illegal class modifiers: '%s'", modifiers);
        }
        is_final = !!strstr(modifiers, "final");
        is_inert = !!strstr(modifiers, "inert");
        is_abstract = !!strstr(modifiers, "abstract");
    }
    CFCParser_set_class_name(state, class_name);
    CFCParser_set_class_final(state, is_final);
    CFCClass *klass = CFCClass_create(CFCParser_get_parcel(state), exposure,
                                      class_name, class_nickname, docucomment,
                                      file_spec, inheritance, is_final,
                                      is_inert, is_abstract);
    CFCBase_decref((CFCBase*)docucomment);
    return klass;
}

static CFCVariable*
S_new_var(char *exposure, char *modifiers, CFCType *type, char *name) {
    int inert = false;
    if (modifiers) {
        if (strcmp(modifiers, "inert") != 0) {
            CFCUtil_die("Illegal variable modifiers: '%s'", modifiers);
        }
        inert = true;
    }

    CFCVariable *var = CFCVariable_new(exposure, name, type, inert);

    /* Consume tokens. */
    CFCBase_decref((CFCBase*)type);

    return var;
}

static CFCBase*
S_new_sub(CFCParser *state, CFCDocuComment *docucomment, 
          char *exposure, char *modifiers, CFCType *type, char *name,
          CFCParamList *param_list) {
    /* Find modifiers by scanning the list. */
    int is_abstract = false;
    int is_final    = false;
    int is_inline   = false;
    int is_inert    = false;
    if (modifiers) {
        is_abstract = !!strstr(modifiers, "abstract");
        is_final    = !!strstr(modifiers, "final");
        is_inline   = !!strstr(modifiers, "inline");
        is_inert    = !!strstr(modifiers, "inert");
    }
    if (CFCParser_get_class_final(state) && !is_inert) {
        is_final = true;
    }

    /* If "inert", it's a function, otherwise it's a method. */
    CFCBase *sub;
    if (is_inert) {
        if (is_abstract) {
            CFCUtil_die("Inert functions must not be abstract");
        }
        if (is_final) {
            CFCUtil_die("Inert functions must not be final");
        }
        sub = (CFCBase*)CFCFunction_new(exposure, name, type, param_list,
                                        docucomment, is_inline);
    }
    else {
        if (is_inline) {
            CFCUtil_die("Methods must not be inline");
        }
        const char *class_name = CFCParser_get_class_name(state);
        sub = (CFCBase*)CFCMethod_new(exposure, name, type, param_list,
                                      docucomment, class_name, is_final,
                                      is_abstract);
    }

    /* Consume tokens. */
    CFCBase_decref((CFCBase*)docucomment);
    CFCBase_decref((CFCBase*)type);
    CFCBase_decref((CFCBase*)param_list);

    return sub;
}

static CFCType*
S_new_type(CFCParser *state, int flags, char *type_name,
           char *asterisk_postfix, char *array_postfix) {
    (void)state; /* unused */
    CFCType *type = NULL;
    size_t type_name_len = strlen(type_name);
    int indirection = asterisk_postfix ? (int)strlen(asterisk_postfix) : 0;

    /* Apply "nullable" to outermost pointer, but "const", etc to innermost
     * type. This is an ugly kludge and the Clownfish header language needs to
     * be fixed, either to support C's terrible pointer type syntax, or to do
     * something better. */
    int composite_flags = 0;
    if (indirection) {
        composite_flags = flags & CFCTYPE_NULLABLE;
        flags &= ~CFCTYPE_NULLABLE;
    }

    if (!strcmp(type_name, "int8_t")
        || !strcmp(type_name, "int16_t")
        || !strcmp(type_name, "int32_t")
        || !strcmp(type_name, "int64_t")
        || !strcmp(type_name, "uint8_t")
        || !strcmp(type_name, "uint16_t")
        || !strcmp(type_name, "uint32_t")
        || !strcmp(type_name, "uint64_t")
        || !strcmp(type_name, "char")
        || !strcmp(type_name, "short")
        || !strcmp(type_name, "int")
        || !strcmp(type_name, "long")
        || !strcmp(type_name, "size_t")
        || !strcmp(type_name, "bool")
       ) {
        type = CFCType_new_integer(flags, type_name);
    }
    else if (!strcmp(type_name, "float")
             || !strcmp(type_name, "double")
            ) {
        type = CFCType_new_float(flags, type_name);
    }
    else if (!strcmp(type_name, "void")) {
        type = CFCType_new_void(!!(flags & CFCTYPE_CONST));
    }
    else if (!strcmp(type_name, "va_list")) {
        type = CFCType_new_va_list();
    }
    else if (type_name_len > 2
             && !strcmp(type_name + type_name_len - 2, "_t")
            ) {
        type = CFCType_new_arbitrary(CFCParser_get_parcel(state), type_name);
    }
    else if (indirection > 0) {
        /* The only remaining possibility is an object type, and we can let
         * the constructor perform the complex validation of the type name. */
        indirection--;
        if (indirection == 0) {
            flags |= composite_flags;
            composite_flags = 0;
        }
        type = CFCType_new_object(flags, CFCParser_get_parcel(state), type_name, 1);
    }
    else {
        CFCUtil_die("Invalid type specification at/near '%s'", type_name);
    }

    if (indirection) {
        CFCType *composite = CFCType_new_composite(composite_flags, type,
                                                   indirection, NULL);
        CFCBase_decref((CFCBase*)type);
        type = composite;
    }
    else if (array_postfix) {
        CFCType *composite = CFCType_new_composite(composite_flags, type,
                                                   0, array_postfix);
        CFCBase_decref((CFCBase*)type);
        type = composite;
    }

    return type;
}

#line 217 "../src/CFCParseHeader.c"
/**************** End of %include directives **********************************/
/* These constants specify the various numeric values for terminal symbols.
***************** Begin token definitions *************************************/
#ifndef CFC_TOKENTYPE_FILE_START
#define CFC_TOKENTYPE_FILE_START                      1
#define CFC_TOKENTYPE_PARCEL                          2
#define CFC_TOKENTYPE_SEMICOLON                       3
#define CFC_TOKENTYPE_RIGHT_CURLY_BRACE               4
#define CFC_TOKENTYPE_CLASS                           5
#define CFC_TOKENTYPE_LEFT_CURLY_BRACE                6
#define CFC_TOKENTYPE_VOID                            7
#define CFC_TOKENTYPE_VA_LIST                         8
#define CFC_TOKENTYPE_INTEGER_TYPE_NAME               9
#define CFC_TOKENTYPE_FLOAT_TYPE_NAME                10
#define CFC_TOKENTYPE_IDENTIFIER                     11
#define CFC_TOKENTYPE_PUBLIC                         12
#define CFC_TOKENTYPE_CONST                          13
#define CFC_TOKENTYPE_NULLABLE                       14
#define CFC_TOKENTYPE_INCREMENTED                    15
#define CFC_TOKENTYPE_DECREMENTED                    16
#define CFC_TOKENTYPE_INERT                          17
#define CFC_TOKENTYPE_INLINE                         18
#define CFC_TOKENTYPE_ABSTRACT                       19
#define CFC_TOKENTYPE_FINAL                          20
#define CFC_TOKENTYPE_ASTERISK                       21
#define CFC_TOKENTYPE_LEFT_SQUARE_BRACKET            22
#define CFC_TOKENTYPE_RIGHT_SQUARE_BRACKET           23
#define CFC_TOKENTYPE_INTEGER_LITERAL                24
#define CFC_TOKENTYPE_HEX_LITERAL                    25
#define CFC_TOKENTYPE_FLOAT_LITERAL                  26
#define CFC_TOKENTYPE_STRING_LITERAL                 27
#define CFC_TOKENTYPE_TRUE                           28
#define CFC_TOKENTYPE_FALSE                          29
#define CFC_TOKENTYPE_NULL                           30
#define CFC_TOKENTYPE_LEFT_PAREN                     31
#define CFC_TOKENTYPE_RIGHT_PAREN                    32
#define CFC_TOKENTYPE_COMMA                          33
#define CFC_TOKENTYPE_ELLIPSIS                       34
#define CFC_TOKENTYPE_EQUALS                         35
#define CFC_TOKENTYPE_SCOPE_OP                       36
#define CFC_TOKENTYPE_DOCUCOMMENT                    37
#define CFC_TOKENTYPE_INHERITS                       38
#define CFC_TOKENTYPE_NICKNAME                       39
#define CFC_TOKENTYPE_CBLOCK_START                   40
#define CFC_TOKENTYPE_CBLOCK_CLOSE                   41
#define CFC_TOKENTYPE_BLOB                           42
#endif
/**************** End token definitions ***************************************/

/* The next sections is a series of control #defines.
** various aspects of the generated parser.
**    YYCODETYPE         is the data type used to store the integer codes
**                       that represent terminal and non-terminal symbols.
**                       "unsigned char" is used if there are fewer than
**                       256 symbols.  Larger types otherwise.
**    YYNOCODE           is a number of type YYCODETYPE that is not used for
**                       any terminal or nonterminal symbol.
**    YYFALLBACK         If defined, this indicates that one or more tokens
**                       (also known as: "terminal symbols") have fall-back
**                       values which should be used if the original symbol
**                       would not parse.  This permits keywords to sometimes
**                       be used as identifiers, for example.
**    YYACTIONTYPE       is the data type used for "action codes" - numbers
**                       that indicate what to do in response to the next
**                       token.
**    CFCParseHeaderTOKENTYPE     is the data type used for minor type for terminal
**                       symbols.  Background: A "minor type" is a semantic
**                       value associated with a terminal or non-terminal
**                       symbols.  For example, for an "ID" terminal symbol,
**                       the minor type might be the name of the identifier.
**                       Each non-terminal can have a different minor type.
**                       Terminal symbols all have the same minor type, though.
**                       This macros defines the minor type for terminal 
**                       symbols.
**    YYMINORTYPE        is the data type used for all minor types.
**                       This is typically a union of many types, one of
**                       which is CFCParseHeaderTOKENTYPE.  The entry in the union
**                       for terminal symbols is called "yy0".
**    YYSTACKDEPTH       is the maximum depth of the parser's stack.  If
**                       zero the stack is dynamically sized using realloc()
**    CFCParseHeaderARG_SDECL     A static variable declaration for the %extra_argument
**    CFCParseHeaderARG_PDECL     A parameter declaration for the %extra_argument
**    CFCParseHeaderARG_PARAM     Code to pass %extra_argument as a subroutine parameter
**    CFCParseHeaderARG_STORE     Code to store %extra_argument into yypParser
**    CFCParseHeaderARG_FETCH     Code to extract %extra_argument from yypParser
**    CFCParseHeaderCTX_*         As CFCParseHeaderARG_ except for %extra_context
**    YYREALLOC          Name of the realloc() function to use
**    YYFREE             Name of the free() function to use
**    YYDYNSTACK         True if stack space should be extended on heap
**    YYERRORSYMBOL      is the code number of the error symbol.  If not
**                       defined, then do no error processing.
**    YYNSTATE           the combined number of states.
**    YYNRULE            the number of rules in the grammar
**    YYNTOKEN           Number of terminal symbols
**    YY_MAX_SHIFT       Maximum value for shift actions
**    YY_MIN_SHIFTREDUCE Minimum value for shift-reduce actions
**    YY_MAX_SHIFTREDUCE Maximum value for shift-reduce actions
**    YY_ERROR_ACTION    The yy_action[] code for syntax error
**    YY_ACCEPT_ACTION   The yy_action[] code for accept
**    YY_NO_ACTION       The yy_action[] code for no-op
**    YY_MIN_REDUCE      Minimum value for reduce actions
**    YY_MAX_REDUCE      Maximum value for reduce actions
**    YY_MIN_DSTRCTR     Minimum symbol value that has a destructor
**    YY_MAX_DSTRCTR     Maximum symbol value that has a destructor
*/
#ifndef INTERFACE
# define INTERFACE 1
#endif
/************* Begin control #defines *****************************************/
#define YYCODETYPE unsigned char
#define YYNOCODE 73
#define YYACTIONTYPE unsigned short int
#define CFCParseHeaderTOKENTYPE char*
typedef union {
  int yyinit;
  CFCParseHeaderTOKENTYPE yy0;
  CFCClass* yy23;
  CFCVariable* yy25;
  CFCFile* yy51;
  CFCDocuComment* yy69;
  CFCCBlock* yy70;
  CFCParamList* yy100;
  CFCBase* yy120;
  int yy132;
  CFCParcel* yy136;
  CFCType* yy139;
} YYMINORTYPE;
#ifndef YYSTACKDEPTH
#define YYSTACKDEPTH 100
#endif
#define CFCParseHeaderARG_SDECL  CFCParser *state ;
#define CFCParseHeaderARG_PDECL , CFCParser *state 
#define CFCParseHeaderARG_PARAM ,state 
#define CFCParseHeaderARG_FETCH  CFCParser *state =yypParser->state ;
#define CFCParseHeaderARG_STORE yypParser->state =state ;
#undef YYREALLOC
#define YYREALLOC realloc
#undef YYFREE
#define YYFREE free
#undef YYDYNSTACK
#define YYDYNSTACK 0
#undef YYSIZELIMIT
#define CFCParseHeaderCTX(P) 0
#define CFCParseHeaderCTX_SDECL
#define CFCParseHeaderCTX_PDECL
#define CFCParseHeaderCTX_PARAM
#define CFCParseHeaderCTX_FETCH
#define CFCParseHeaderCTX_STORE
#undef YYERRORSYMBOL
#undef YYERRSYMDT
#undef YYFALLBACK
#define YYNSTATE             191
#define YYNRULE              117
#define YYNRULE_WITH_ACTION  117
#define YYNTOKEN             43
#define YY_MAX_SHIFT         190
#define YY_MIN_SHIFTREDUCE   191
#define YY_MAX_SHIFTREDUCE   307
#define YY_ERROR_ACTION      308
#define YY_ACCEPT_ACTION     309
#define YY_NO_ACTION         310
#define YY_MIN_REDUCE        311
#define YY_MAX_REDUCE        427
#define YY_MIN_DSTRCTR       43
#define YY_MAX_DSTRCTR       57
/************* End control #defines *******************************************/
#define YY_NLOOKAHEAD ((int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0])))

/* Define the yytestcase() macro to be a no-op if is not already defined
** otherwise.
**
** Applications can choose to define yytestcase() in the %include section
** to a macro that can assist in verifying code coverage.  For production
** code the yytestcase() macro should be turned off.  But it is useful
** for testing.
*/
#ifndef yytestcase
# define yytestcase(X)
#endif

/* Macro to determine if stack space has the ability to grow using
** heap memory.
*/
#if YYSTACKDEPTH<=0 || YYDYNSTACK
# define YYGROWABLESTACK 1
#else
# define YYGROWABLESTACK 0
#endif

/* Guarantee a minimum number of initial stack slots.
*/
#if YYSTACKDEPTH<=0
# undef YYSTACKDEPTH
# define YYSTACKDEPTH 2  /* Need a minimum stack size */
#endif


/* Next are the tables used to determine what action to take based on the
** current state and lookahead token.  These tables are used to implement
** functions that take a state number and lookahead value and return an
** action integer.  
**
** Suppose the action integer is N.  Then the action is determined as
** follows
**
**   0 <= N <= YY_MAX_SHIFT             Shift N.  That is, push the lookahead
**                                      token onto the stack and goto state N.
**
**   N between YY_MIN_SHIFTREDUCE       Shift to an arbitrary state then
**     and YY_MAX_SHIFTREDUCE           reduce by rule N-YY_MIN_SHIFTREDUCE.
**
**   N == YY_ERROR_ACTION               A syntax error has occurred.
**
**   N == YY_ACCEPT_ACTION              The parser accepts its input.
**
**   N == YY_NO_ACTION                  No such action.  Denotes unused
**                                      slots in the yy_action[] table.
**
**   N between YY_MIN_REDUCE            Reduce by rule N-YY_MIN_REDUCE
**     and YY_MAX_REDUCE
**
** The action table is constructed as a single large table named yy_action[].
** Given state S and lookahead X, the action is computed as either:
**
**    (A)   N = yy_action[ yy_shift_ofst[S] + X ]
**    (B)   N = yy_default[S]
**
** The (A) formula is preferred.  The B formula is used instead if
** yy_lookahead[yy_shift_ofst[S]+X] is not equal to X.
**
** The formulas above are for computing the action when the lookahead is
** a terminal symbol.  If the lookahead is a non-terminal (as occurs after
** a reduce action) then the yy_reduce_ofst[] array is used in place of
** the yy_shift_ofst[] array.
**
** The following are the tables generated in this section:
**
**  yy_action[]        A single table containing all actions.
**  yy_lookahead[]     A table containing the lookahead for each entry in
**                     yy_action.  Used to detect hash collisions.
**  yy_shift_ofst[]    For each state, the offset into yy_action for
**                     shifting terminals.
**  yy_reduce_ofst[]   For each state, the offset into yy_action for
**                     shifting non-terminals after a reduce.
**  yy_default[]       Default action for each state.
**
*********** Begin parsing tables **********************************************/
#define YY_ACTTAB_COUNT (1189)
static const YYACTIONTYPE yy_action[] = {
 /*     0 */   141,   56,   55,  127,   39,   57,  128,  123,  122,  121,
 /*    10 */   120,  119,   95,  115,  114,  113,  112,  101,  100,   99,
 /*    20 */    98,  123,  122,  121,  120,  119,  111,  115,  114,  113,
 /*    30 */   112,    9,  134,   40,   20,  128,   97,   92,  309,    2,
 /*    40 */    42,  171,  167,  155,    1,  169,  168,   54,  186,  187,
 /*    50 */   142,    3,  170,  110,   22,  130,    5,   10,  368,   43,
 /*    60 */   156,   21,  368,  190,   96,  368,  368,  368,  368,  368,
 /*    70 */   368,  368,  368,  368,  368,  368,  368,  368,  368,  123,
 /*    80 */   122,  121,  120,  119,   95,  115,  114,  113,  112,  101,
 /*    90 */   100,   99,   98,   24,   37,  368,  367,   44,  158,  138,
 /*   100 */   367,   96,  102,  367,  367,  367,  367,  367,  367,  367,
 /*   110 */   367,  367,  367,  367,  367,  367,  367,   59,  157,  123,
 /*   120 */   122,  121,  120,  119,  350,  115,  114,  113,  112,  101,
 /*   130 */   100,   99,   98,  367,  364,  184,  417,  417,  364,   33,
 /*   140 */   159,  364,  364,  364,  364,  364,  364,  364,  364,  364,
 /*   150 */   364,  364,  364,  364,  364,   74,   77,  123,  122,  121,
 /*   160 */   120,  119,  346,  115,  114,  113,  112,  101,  100,   99,
 /*   170 */    98,  364,  366,  161,  415,  415,  366,   34,  163,  366,
 /*   180 */   366,  366,  366,  366,  366,  366,  366,  366,  366,  366,
 /*   190 */   366,  366,  366,   58,   77,  123,  122,  121,  120,  119,
 /*   200 */   348,  115,  114,  113,  112,  101,  100,   99,   98,  366,
 /*   210 */   363,  165,  411,  411,  363,  411,  166,  363,  363,  363,
 /*   220 */   363,  363,  363,  363,  363,  363,  363,  363,  363,  363,
 /*   230 */   363,   60,   77,  123,  122,  121,  120,  119,  344,  115,
 /*   240 */   114,  113,  112,  101,  100,   99,   98,  363,  369,   45,
 /*   250 */   160,  174,  369,   46,  162,  369,  369,  369,  369,  369,
 /*   260 */   369,  369,  369,  369,  369,  369,  369,  369,  369,   71,
 /*   270 */    77,  123,  122,  121,  120,  119,  349,  115,  114,  113,
 /*   280 */   112,  101,  100,   99,   98,  369,  370,   50,  173,  177,
 /*   290 */   370,   51,  176,  370,  370,  370,  370,  370,  370,  370,
 /*   300 */   370,  370,  370,  370,  370,  370,  370,   78,   77,  123,
 /*   310 */   122,  121,  120,  119,  345,  115,  114,  113,  112,  101,
 /*   320 */   100,   99,   98,  370,  372,   52,  179,  180,  372,   53,
 /*   330 */   183,  372,  372,  372,  372,  372,  372,  372,  372,  372,
 /*   340 */   372,  372,  372,  372,  372,  384,   77,  384,  384,  384,
 /*   350 */   384,  384,  347,  384,  384,  384,  384,  384,  384,  384,
 /*   360 */   384,  372,  371,  104,  136,  185,  371,  426,  426,  371,
 /*   370 */   371,  371,  371,  371,  371,  371,  371,  371,  371,  371,
 /*   380 */   371,  371,  371,  395,   77,  395,  395,  395,  395,  395,
 /*   390 */   343,  395,  395,  395,  395,  395,  395,  395,  395,  371,
 /*   400 */   365,  427,  427,   41,  365,  105,  137,  365,  365,  365,
 /*   410 */   365,  365,  365,  365,  365,  365,  365,  365,  365,  365,
 /*   420 */   365,  396,   77,  396,  396,  396,  396,  396,  311,  396,
 /*   430 */   396,  396,  396,  396,  396,  396,  396,  365,  362,  116,
 /*   440 */   418,  418,  362,  416,  416,  362,  362,  362,  362,  362,
 /*   450 */   362,  362,  362,  362,  362,  362,  362,  362,  362,  394,
 /*   460 */    55,  394,  394,  394,  394,  394,  423,  394,  394,  394,
 /*   470 */   394,  394,  394,  394,  394,  362,   82,  409,  409,  118,
 /*   480 */   106,  408,  408,  123,  122,  121,  120,  119,   95,  115,
 /*   490 */   114,  113,  112,  101,  100,   99,   98,  393,  423,  393,
 /*   500 */   393,  393,  393,  393,    9,  393,  393,  393,  393,  393,
 /*   510 */   393,  393,  393,   92,  314,  407,  407,  406,  406,   68,
 /*   520 */   103,  123,  122,  121,  120,  119,   95,  115,  114,  113,
 /*   530 */   112,  101,  100,   99,   98,  359,  405,  405,  359,  359,
 /*   540 */   359,  359,  359,  359,  359,  359,  359,  359,  359,  359,
 /*   550 */   359,  359,  392,  135,  392,  392,  392,  392,  392,   25,
 /*   560 */   392,  392,  392,  392,  392,  392,  392,  392,  359,  421,
 /*   570 */   404,  404,  403,  403,  421,   26,  421,  421,  421,  421,
 /*   580 */   421,  421,  421,  421,  421,  421,  421,  421,  421,  421,
 /*   590 */   361,  151,   18,  361,  361,  361,  361,  361,  361,  361,
 /*   600 */   361,  361,  361,  361,  361,  361,  361,  391,   27,  391,
 /*   610 */   391,  391,  391,  391,   28,  391,  391,  391,  391,  391,
 /*   620 */   391,  391,  391,  361,  132,  189,    9,  164,  360,  116,
 /*   630 */    61,  360,  360,  360,  360,  360,  360,  360,  360,  360,
 /*   640 */   360,  360,  360,  360,  360,  123,  122,  121,  120,  119,
 /*   650 */    47,  115,  114,  113,  112,  101,  100,   99,   98,   36,
 /*   660 */    38,  360,   94,   93,   65,  378,   96,   96,    4,   48,
 /*   670 */   110,   22,  411,    8,   17,   90,  378,   84,   21,   49,
 /*   680 */    90,   96,  123,  122,  121,  120,  119,  154,  115,  114,
 /*   690 */   113,  112,  123,  122,  121,  120,  119,  320,  115,  114,
 /*   700 */   113,  112,   57,    9,   64,    9,   63,  153,    9,   95,
 /*   710 */   110,   22,  110,   22,  101,  100,   99,   98,   21,  188,
 /*   720 */    21,   97,  375,   97,  109,  172,  108,  155,    1,  414,
 /*   730 */    29,   66,  414,  375,   92,   19,  107,   42,  325,   91,
 /*   740 */    23,   35,  321,  325,  154,  175,   69,  321,   96,  413,
 /*   750 */   325,   72,  413,   30,  321,  325,  325,  325,  325,  321,
 /*   760 */   321,  321,  321,  389,  389,  389,  389,  389,  178,  389,
 /*   770 */   389,  389,  389,   31,  181,  325,  425,   75,  325,  321,
 /*   780 */   424,  425,  321,  412,  140,  424,  412,   32,  425,   80,
 /*   790 */   126,  342,  424,  425,  425,  425,  425,  424,  424,  424,
 /*   800 */   424,  390,  390,  390,  390,  390,  334,  390,  390,  390,
 /*   810 */   390,  338,  330,  425,  326,  340,  425,  424,  324,  326,
 /*   820 */   424,  332,  336,  324,   81,  328,  326,   83,  319,  318,
 /*   830 */   324,  326,  326,  326,  326,  324,  324,  324,  324,  388,
 /*   840 */   388,  388,  388,  388,  317,  388,  388,  388,  388,  316,
 /*   850 */   315,  326,  323,  341,  326,  324,  322,  323,  324,  333,
 /*   860 */    85,  322,  139,   86,  323,  422,  117,  337,  322,  323,
 /*   870 */   323,  323,  323,  322,  322,  322,  322,  387,  387,  387,
 /*   880 */   387,  387,  329,  387,  387,  387,  387,  410,   87,  323,
 /*   890 */   410,  377,  323,  322,  339,  184,  322,  386,  386,  386,
 /*   900 */   386,  386,  377,  386,  386,  386,  386,  385,  385,  385,
 /*   910 */   385,  385,  133,  385,  385,  385,  385,   67,  410,  410,
 /*   920 */   410,  397,  410,  110,   22,  331,    6,   12,  335,   67,
 /*   930 */   313,   21,  397,  402,   96,  110,   22,   88,    7,   15,
 /*   940 */   312,  327,  397,   21,  402,  150,   96,   89,  147,  149,
 /*   950 */   148,  146,  145,  144,  143,  402,   62,  310,   73,  131,
 /*   960 */   310,  310,  110,   22,  110,   22,   11,  398,   13,  374,
 /*   970 */    21,  310,   21,   96,  310,   96,  310,   73,  398,   62,
 /*   980 */   374,  310,  310,  110,   22,  110,   22,   14,  398,   16,
 /*   990 */   133,   21,  310,   21,   96,  310,   96,   68,  310,   79,
 /*  1000 */   124,   70,  152,  310,   95,  110,   22,  110,   22,  101,
 /*  1010 */   100,   99,   98,   21,  310,   21,   76,  310,   97,  310,
 /*  1020 */   310,  310,  110,   22,  310,   79,  125,  310,   59,  310,
 /*  1030 */    21,  110,   22,   97,   74,  310,  310,  310,   58,   21,
 /*  1040 */   101,  100,   99,   98,   60,  310,  101,  100,   99,   98,
 /*  1050 */   101,  100,   99,   98,   71,  310,  101,  100,   99,   98,
 /*  1060 */    78,  420,  310,  310,  420,  310,  101,  100,   99,   98,
 /*  1070 */   376,  358,  101,  100,   99,   98,  419,  373,  310,  419,
 /*  1080 */   310,  376,  310,  310,  354,  310,  310,  310,  373,  310,
 /*  1090 */   310,  129,  154,  310,  420,  356,  420,  420,  129,  154,
 /*  1100 */   310,  184,  352,   77,  182,  310,  357,  310,  310,  419,
 /*  1110 */   353,  419,  419,  310,  184,  401,   77,  182,  355,  310,
 /*  1120 */   310,  310,  310,  351,  310,  184,  401,   77,  182,  310,
 /*  1130 */   310,  310,  184,  310,   77,  182,  184,  401,   77,  182,
 /*  1140 */   184,  383,   77,  182,  310,  310,  310,  310,  184,  382,
 /*  1150 */    77,  182,  383,  184,  381,   77,  182,  380,  400,  310,
 /*  1160 */   382,  379,  383,  383,  310,  381,  399,  310,  380,  400,
 /*  1170 */   382,  382,  379,  310,  310,  381,  381,  399,  380,  380,
 /*  1180 */   400,  310,  379,  379,  310,  310,  310,  310,  399,
};
static const YYCODETYPE yy_lookahead[] = {
 /*     0 */    71,    1,    2,   67,   68,    5,   70,    7,    8,    9,
 /*    10 */    10,   11,   12,   13,   14,   15,   16,   17,   18,   19,
 /*    20 */    20,    7,    8,    9,   10,   11,   58,   13,   14,   15,
 /*    30 */    16,   31,   67,   68,   66,   70,   69,   37,   43,   44,
 /*    40 */    40,   46,   47,   48,   49,   50,   51,   52,   53,   54,
 /*    50 */    71,   56,   57,   58,   59,   70,   61,   62,    0,   63,
 /*    60 */    64,   66,    4,   54,   69,    7,    8,    9,   10,   11,
 /*    70 */    12,   13,   14,   15,   16,   17,   18,   19,   20,    7,
 /*    80 */     8,    9,   10,   11,   12,   13,   14,   15,   16,   17,
 /*    90 */    18,   19,   20,   61,   62,   37,    0,   63,   64,   72,
 /*   100 */     4,   69,    3,    7,    8,    9,   10,   11,   12,   13,
 /*   110 */    14,   15,   16,   17,   18,   19,   20,    5,   64,    7,
 /*   120 */     8,    9,   10,   11,    6,   13,   14,   15,   16,   17,
 /*   130 */    18,   19,   20,   37,    0,   36,   32,   33,    4,   35,
 /*   140 */    64,    7,    8,    9,   10,   11,   12,   13,   14,   15,
 /*   150 */    16,   17,   18,   19,   20,    5,   38,    7,    8,    9,
 /*   160 */    10,   11,    6,   13,   14,   15,   16,   17,   18,   19,
 /*   170 */    20,   37,    0,   64,   32,   33,    4,   35,   64,    7,
 /*   180 */     8,    9,   10,   11,   12,   13,   14,   15,   16,   17,
 /*   190 */    18,   19,   20,    5,   38,    7,    8,    9,   10,   11,
 /*   200 */     6,   13,   14,   15,   16,   17,   18,   19,   20,   37,
 /*   210 */     0,   54,   32,   33,    4,   35,   54,    7,    8,    9,
 /*   220 */    10,   11,   12,   13,   14,   15,   16,   17,   18,   19,
 /*   230 */    20,    5,   38,    7,    8,    9,   10,   11,    6,   13,
 /*   240 */    14,   15,   16,   17,   18,   19,   20,   37,    0,   63,
 /*   250 */    64,   64,    4,   63,   64,    7,    8,    9,   10,   11,
 /*   260 */    12,   13,   14,   15,   16,   17,   18,   19,   20,    5,
 /*   270 */    38,    7,    8,    9,   10,   11,    6,   13,   14,   15,
 /*   280 */    16,   17,   18,   19,   20,   37,    0,   63,   64,   64,
 /*   290 */     4,   63,   64,    7,    8,    9,   10,   11,   12,   13,
 /*   300 */    14,   15,   16,   17,   18,   19,   20,    5,   38,    7,
 /*   310 */     8,    9,   10,   11,    6,   13,   14,   15,   16,   17,
 /*   320 */    18,   19,   20,   37,    0,   63,   64,   64,    4,   63,
 /*   330 */    64,    7,    8,    9,   10,   11,   12,   13,   14,   15,
 /*   340 */    16,   17,   18,   19,   20,    5,   38,    7,    8,    9,
 /*   350 */    10,   11,    6,   13,   14,   15,   16,   17,   18,   19,
 /*   360 */    20,   37,    0,   41,   42,   64,    4,   41,   42,    7,
 /*   370 */     8,    9,   10,   11,   12,   13,   14,   15,   16,   17,
 /*   380 */    18,   19,   20,    5,   38,    7,    8,    9,   10,   11,
 /*   390 */     6,   13,   14,   15,   16,   17,   18,   19,   20,   37,
 /*   400 */     0,   41,   42,   65,    4,   41,   42,    7,    8,    9,
 /*   410 */    10,   11,   12,   13,   14,   15,   16,   17,   18,   19,
 /*   420 */    20,    5,   38,    7,    8,    9,   10,   11,    0,   13,
 /*   430 */    14,   15,   16,   17,   18,   19,   20,   37,    0,   11,
 /*   440 */    32,   33,    4,   32,   33,    7,    8,    9,   10,   11,
 /*   450 */    12,   13,   14,   15,   16,   17,   18,   19,   20,    5,
 /*   460 */     2,    7,    8,    9,   10,   11,    6,   13,   14,   15,
 /*   470 */    16,   17,   18,   19,   20,   37,    3,   32,   33,   11,
 /*   480 */     4,   32,   33,    7,    8,    9,   10,   11,   12,   13,
 /*   490 */    14,   15,   16,   17,   18,   19,   20,    5,   38,    7,
 /*   500 */     8,    9,   10,   11,   31,   13,   14,   15,   16,   17,
 /*   510 */    18,   19,   20,   37,    0,   32,   33,   32,   33,    5,
 /*   520 */    46,    7,    8,    9,   10,   11,   12,   13,   14,   15,
 /*   530 */    16,   17,   18,   19,   20,    4,   32,   33,    7,    8,
 /*   540 */     9,   10,   11,   12,   13,   14,   15,   16,   17,   18,
 /*   550 */    19,   20,    5,   60,    7,    8,    9,   10,   11,   60,
 /*   560 */    13,   14,   15,   16,   17,   18,   19,   20,   37,    0,
 /*   570 */    32,   33,   32,   33,    5,   60,    7,    8,    9,   10,
 /*   580 */    11,   12,   13,   14,   15,   16,   17,   18,   19,   20,
 /*   590 */     4,   32,   33,    7,    8,    9,   10,   11,   12,   13,
 /*   600 */    14,   15,   16,   17,   18,   19,   20,    5,   60,    7,
 /*   610 */     8,    9,   10,   11,   60,   13,   14,   15,   16,   17,
 /*   620 */    18,   19,   20,   37,   23,   24,   31,   54,    4,   11,
 /*   630 */    65,    7,    8,    9,   10,   11,   12,   13,   14,   15,
 /*   640 */    16,   17,   18,   19,   20,    7,    8,    9,   10,   11,
 /*   650 */    65,   13,   14,   15,   16,   17,   18,   19,   20,   62,
 /*   660 */    62,   37,   50,   51,   52,    0,   69,   69,   56,   65,
 /*   670 */    58,   59,    0,   61,   62,    3,   11,    3,   66,   65,
 /*   680 */     3,   69,    7,    8,    9,   10,   11,   22,   13,   14,
 /*   690 */    15,   16,    7,    8,    9,   10,   11,    0,   13,   14,
 /*   700 */    15,   16,    5,   31,   52,   31,   52,   32,   31,   12,
 /*   710 */    58,   59,   58,   59,   17,   18,   19,   20,   66,   34,
 /*   720 */    66,   69,    0,   69,   45,   54,   47,   48,   49,    0,
 /*   730 */    60,   65,    3,   11,   37,   56,   57,   40,    0,    6,
 /*   740 */    61,   62,    0,    5,   22,   54,   65,    5,   69,    0,
 /*   750 */    12,   65,    3,   60,   12,   17,   18,   19,   20,   17,
 /*   760 */    18,   19,   20,    7,    8,    9,   10,   11,   54,   13,
 /*   770 */    14,   15,   16,   60,   54,   37,    0,   65,   40,   37,
 /*   780 */     0,    5,   40,    0,   60,    5,    3,   60,   12,    3,
 /*   790 */    65,    6,   12,   17,   18,   19,   20,   17,   18,   19,
 /*   800 */    20,    7,    8,    9,   10,   11,    6,   13,   14,   15,
 /*   810 */    16,    6,    6,   37,    0,    6,   40,   37,    0,    5,
 /*   820 */    40,    6,    6,    5,    3,    6,   12,    3,    0,    0,
 /*   830 */    12,   17,   18,   19,   20,   17,   18,   19,   20,    7,
 /*   840 */     8,    9,   10,   11,    0,   13,   14,   15,   16,    0,
 /*   850 */     0,   37,    0,    6,   40,   37,    0,    5,   40,    6,
 /*   860 */     3,    5,   11,    3,   12,    6,   11,    6,   12,   17,
 /*   870 */    18,   19,   20,   17,   18,   19,   20,    7,    8,    9,
 /*   880 */    10,   11,    6,   13,   14,   15,   16,    0,    3,   37,
 /*   890 */     3,    0,   40,   37,    6,   36,   40,    7,    8,    9,
 /*   900 */    10,   11,   11,   13,   14,   15,   16,    7,    8,    9,
 /*   910 */    10,   11,   21,   13,   14,   15,   16,   52,   31,   32,
 /*   920 */    33,    0,   35,   58,   59,    6,   61,   62,    6,   52,
 /*   930 */     0,   66,   11,    0,   69,   58,   59,    3,   61,   62,
 /*   940 */     0,    6,   21,   66,   11,   32,   69,    3,   24,   25,
 /*   950 */    26,   27,   28,   29,   30,   22,   52,   73,   52,   23,
 /*   960 */    73,   73,   58,   59,   58,   59,   62,    0,   62,    0,
 /*   970 */    66,   73,   66,   69,   73,   69,   73,   52,   11,   52,
 /*   980 */    11,   73,   73,   58,   59,   58,   59,   62,   21,   62,
 /*   990 */    21,   66,   73,   66,   69,   73,   69,    5,   73,   52,
 /*  1000 */    53,   52,   55,   73,   12,   58,   59,   58,   59,   17,
 /*  1010 */    18,   19,   20,   66,   73,   66,   52,   73,   69,   73,
 /*  1020 */    73,   73,   58,   59,   73,   52,   53,   73,    5,   73,
 /*  1030 */    66,   58,   59,   69,    5,   73,   73,   73,    5,   66,
 /*  1040 */    17,   18,   19,   20,    5,   73,   17,   18,   19,   20,
 /*  1050 */    17,   18,   19,   20,    5,   73,   17,   18,   19,   20,
 /*  1060 */     5,    3,   73,   73,    6,   73,   17,   18,   19,   20,
 /*  1070 */     0,    6,   17,   18,   19,   20,    3,    0,   73,    6,
 /*  1080 */    73,   11,   73,   73,    6,   73,   73,   73,   11,   73,
 /*  1090 */    73,   21,   22,   73,   36,    6,   38,   39,   21,   22,
 /*  1100 */    73,   36,    6,   38,   39,   73,    6,   73,   73,   36,
 /*  1110 */     6,   38,   39,   73,   36,    0,   38,   39,    6,   73,
 /*  1120 */    73,   73,   73,    6,   73,   36,   11,   38,   39,   73,
 /*  1130 */    73,   73,   36,   73,   38,   39,   36,   22,   38,   39,
 /*  1140 */    36,    0,   38,   39,   73,   73,   73,   73,   36,    0,
 /*  1150 */    38,   39,   11,   36,    0,   38,   39,    0,    0,   73,
 /*  1160 */    11,    0,   21,   22,   73,   11,    0,   73,   11,   11,
 /*  1170 */    21,   22,   11,   73,   73,   21,   22,   11,   21,   22,
 /*  1180 */    22,   73,   21,   22,   73,   73,   73,   73,   22,   73,
 /*  1190 */    73,   73,   73,   73,   73,   73,   73,   73,   73,   73,
 /*  1200 */    73,   73,   73,   73,   73,   73,   73,   73,   73,   73,
 /*  1210 */    43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
 /*  1220 */    43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
 /*  1230 */    43,   43,
};
#define YY_SHIFT_COUNT    (190)
#define YY_SHIFT_MIN      (0)
#define YY_SHIFT_MAX      (1166)
static const unsigned short int yy_shift_ofst[] = {
 /*     0 */     0,  476,  697,  514,   72,  112,  150,  638,  638,  675,
 /*    10 */   188,  226,  264,  302,  638,  638,  638,  638,  685,  992,
 /*    20 */  1070, 1077,   14, 1023, 1029, 1065, 1078, 1089, 1096, 1100,
 /*    30 */  1104, 1112, 1117,  924,  924, 1033, 1039, 1049, 1055,  665,
 /*    40 */   722,  672,  322,  118,  156,  194,  232,  473,  674,  677,
 /*    50 */   270,  308,  346,  384,  428,  468,  458,  468,  468,  468,
 /*    60 */   468,  595,  618,  618,  618,  618,  595,  618,  468,  595,
 /*    70 */   618,  468,  595,  618,  468,  595,  618,  468,  468,  618,
 /*    80 */    58,   96,  134,  172,  210,  248,  286,  324,  362,  400,
 /*    90 */   438,  531,  569,  586,  624,  340,  378,  416,  454,  492,
 /*   100 */   547,  602,  738,  742,  776,  780,  814,  818,  852,  856,
 /*   110 */   756,  794,  832,  870,  890,  900,  887, 1058, 1073, 1141,
 /*   120 */  1149, 1154, 1157, 1161,  104,  142,  180,  891, 1115,  921,
 /*   130 */   933, 1158, 1166,  967,  969,   99,  326,  360,  364,  460,
 /*   140 */   859,  408,  411,  445,  449,  483,  485,  504,  538,  540,
 /*   150 */   729,  749,  559,  783,  601,  733,  785,  800,  805,  806,
 /*   160 */   809,  815,  816,  819,  786,  821,  824,  828,  829,  844,
 /*   170 */   849,  850,  857,  847,  853,  860,  861,  876,  885,  888,
 /*   180 */   919,  934,  851,  922,  855,  935,  930,  940,  913,  936,
 /*   190 */   944,
};
#define YY_REDUCE_COUNT (79)
#define YY_REDUCE_MIN   (-71)
#define YY_REDUCE_MAX   (973)
static const short yy_reduce_ofst[] = {
 /*     0 */    -5,  612,  679,  865,  877,  904,  906,  925,  927,  947,
 /*    10 */   652,  654,  949,  964,  964,  949,  654,  652,  973,   32,
 /*    20 */   -64,  -35,  -32,  597,  598,   -4,   34,  186,  190,  224,
 /*    30 */   228,  262,  266,  -71,  -21,  -33,  -33,  -33,  -33,  -15,
 /*    40 */   -15,    9,   27,   54,   76,  109,  114,  157,  162,    9,
 /*    50 */   187,  225,  263,  301,  338,  493,  474,  499,  515,  548,
 /*    60 */   554,  573,  565,  585,  604,  614,  671,  666,  670,  691,
 /*    70 */   681,  693,  714,  686,  713,  720,  712,  724,  727,  725,
};
static const YYACTIONTYPE yy_default[] = {
 /*     0 */   308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
 /*    10 */   308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
 /*    20 */   308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
 /*    30 */   308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
 /*    40 */   308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
 /*    50 */   308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
 /*    60 */   308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
 /*    70 */   308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
 /*    80 */   308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
 /*    90 */   308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
 /*   100 */   308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
 /*   110 */   308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
 /*   120 */   308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
 /*   130 */   308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
 /*   140 */   308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
 /*   150 */   308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
 /*   160 */   308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
 /*   170 */   308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
 /*   180 */   308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
 /*   190 */   308,
};
/********** End of lemon-generated parsing tables *****************************/

/* The next table maps tokens (terminal symbols) into fallback tokens.  
** If a construct like the following:
** 
**      %fallback ID X Y Z.
**
** appears in the grammar, 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.
**
** This feature can be used, for example, to cause some keywords in a language
** to revert to identifiers if they keyword does not apply in the context where
** it appears.
*/
#ifdef YYFALLBACK
static 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.
**
** After the "shift" half of a SHIFTREDUCE action, the stateno field
** actually contains the reduce action for the second half of the
** SHIFTREDUCE.
*/
struct yyStackEntry {
  YYACTIONTYPE stateno;  /* The state-number, or reduce action in SHIFTREDUCE */
  YYCODETYPE 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 {
  yyStackEntry *yytos;          /* Pointer to top element of the stack */
#ifdef YYTRACKMAXSTACKDEPTH
  int yyhwm;                    /* High-water mark of the stack */
#endif
#ifndef YYNOERRORRECOVERY
  int yyerrcnt;                 /* Shifts left before out of the error */
#endif
  CFCParseHeaderARG_SDECL                /* A place to hold %extra_argument */
  CFCParseHeaderCTX_SDECL                /* A place to hold %extra_context */
  yyStackEntry *yystackEnd;           /* Last entry in the stack */
  yyStackEntry *yystack;              /* The parser stack */
  yyStackEntry yystk0[YYSTACKDEPTH];  /* Initial stack space */
};
typedef struct yyParser yyParser;

#include <assert.h>
#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 CFCParseHeaderTrace(FILE *TraceFILE, char *zTracePrompt){
  yyTraceFILE = TraceFILE;
  yyTracePrompt = zTracePrompt;
  if( yyTraceFILE==0 ) yyTracePrompt = 0;
  else if( yyTracePrompt==0 ) yyTraceFILE = 0;
}
#endif /* NDEBUG */

#if defined(YYCOVERAGE) || !defined(NDEBUG)
/* For tracing shifts, the names of all terminals and nonterminals
** are required.  The following table supplies these names */
static const char *const yyTokenName[] = { 
  /*    0 */ "$",
  /*    1 */ "FILE_START",
  /*    2 */ "PARCEL",
  /*    3 */ "SEMICOLON",
  /*    4 */ "RIGHT_CURLY_BRACE",
  /*    5 */ "CLASS",
  /*    6 */ "LEFT_CURLY_BRACE",
  /*    7 */ "VOID",
  /*    8 */ "VA_LIST",
  /*    9 */ "INTEGER_TYPE_NAME",
  /*   10 */ "FLOAT_TYPE_NAME",
  /*   11 */ "IDENTIFIER",
  /*   12 */ "PUBLIC",
  /*   13 */ "CONST",
  /*   14 */ "NULLABLE",
  /*   15 */ "INCREMENTED",
  /*   16 */ "DECREMENTED",
  /*   17 */ "INERT",
  /*   18 */ "INLINE",
  /*   19 */ "ABSTRACT",
  /*   20 */ "FINAL",
  /*   21 */ "ASTERISK",
  /*   22 */ "LEFT_SQUARE_BRACKET",
  /*   23 */ "RIGHT_SQUARE_BRACKET",
  /*   24 */ "INTEGER_LITERAL",
  /*   25 */ "HEX_LITERAL",
  /*   26 */ "FLOAT_LITERAL",
  /*   27 */ "STRING_LITERAL",
  /*   28 */ "TRUE",
  /*   29 */ "FALSE",
  /*   30 */ "NULL",
  /*   31 */ "LEFT_PAREN",
  /*   32 */ "RIGHT_PAREN",
  /*   33 */ "COMMA",
  /*   34 */ "ELLIPSIS",
  /*   35 */ "EQUALS",
  /*   36 */ "SCOPE_OP",
  /*   37 */ "DOCUCOMMENT",
  /*   38 */ "INHERITS",
  /*   39 */ "NICKNAME",
  /*   40 */ "CBLOCK_START",
  /*   41 */ "CBLOCK_CLOSE",
  /*   42 */ "BLOB",
  /*   43 */ "result",
  /*   44 */ "file",
  /*   45 */ "major_block",
  /*   46 */ "parcel_definition",
  /*   47 */ "class_declaration",
  /*   48 */ "class_head",
  /*   49 */ "class_defs",
  /*   50 */ "var_declaration_statement",
  /*   51 */ "subroutine_declaration_statement",
  /*   52 */ "type",
  /*   53 */ "param_variable",
  /*   54 */ "param_list",
  /*   55 */ "param_list_elems",
  /*   56 */ "docucomment",
  /*   57 */ "cblock",
  /*   58 */ "type_qualifier",
  /*   59 */ "type_qualifier_list",
  /*   60 */ "qualified_id",
  /*   61 */ "exposure_specifier",
  /*   62 */ "declaration_modifier_list",
  /*   63 */ "nickname",
  /*   64 */ "class_inheritance",
  /*   65 */ "declarator",
  /*   66 */ "type_name",
  /*   67 */ "asterisk_postfix",
  /*   68 */ "array_postfix",
  /*   69 */ "declaration_modifier",
  /*   70 */ "array_postfix_elem",
  /*   71 */ "scalar_constant",
  /*   72 */ "blob",
};
#endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */

#ifndef NDEBUG
/* For tracing reduce actions, the names of all rules are required.
*/
static const char *const yyRuleName[] = {
 /*   0 */ "result ::= type",
 /*   1 */ "result ::= param_list",
 /*   2 */ "result ::= param_variable",
 /*   3 */ "result ::= docucomment",
 /*   4 */ "result ::= parcel_definition",
 /*   5 */ "result ::= cblock",
 /*   6 */ "result ::= var_declaration_statement",
 /*   7 */ "result ::= subroutine_declaration_statement",
 /*   8 */ "result ::= class_declaration",
 /*   9 */ "result ::= file",
 /*  10 */ "file ::= FILE_START parcel_definition",
 /*  11 */ "file ::= file major_block",
 /*  12 */ "major_block ::= class_declaration",
 /*  13 */ "major_block ::= cblock",
 /*  14 */ "parcel_definition ::= PARCEL qualified_id SEMICOLON",
 /*  15 */ "class_declaration ::= class_defs RIGHT_CURLY_BRACE",
 /*  16 */ "class_head ::= docucomment exposure_specifier declaration_modifier_list CLASS qualified_id nickname class_inheritance",
 /*  17 */ "class_head ::= exposure_specifier declaration_modifier_list CLASS qualified_id nickname class_inheritance",
 /*  18 */ "class_head ::= docucomment declaration_modifier_list CLASS qualified_id nickname class_inheritance",
 /*  19 */ "class_head ::= declaration_modifier_list CLASS qualified_id nickname class_inheritance",
 /*  20 */ "class_head ::= docucomment exposure_specifier CLASS qualified_id nickname class_inheritance",
 /*  21 */ "class_head ::= exposure_specifier CLASS qualified_id nickname class_inheritance",
 /*  22 */ "class_head ::= docucomment CLASS qualified_id nickname class_inheritance",
 /*  23 */ "class_head ::= CLASS qualified_id nickname class_inheritance",
 /*  24 */ "class_head ::= docucomment exposure_specifier declaration_modifier_list CLASS qualified_id class_inheritance",
 /*  25 */ "class_head ::= exposure_specifier declaration_modifier_list CLASS qualified_id class_inheritance",
 /*  26 */ "class_head ::= docucomment declaration_modifier_list CLASS qualified_id class_inheritance",
 /*  27 */ "class_head ::= declaration_modifier_list CLASS qualified_id class_inheritance",
 /*  28 */ "class_head ::= docucomment exposure_specifier CLASS qualified_id class_inheritance",
 /*  29 */ "class_head ::= exposure_specifier CLASS qualified_id class_inheritance",
 /*  30 */ "class_head ::= docucomment CLASS qualified_id class_inheritance",
 /*  31 */ "class_head ::= CLASS qualified_id class_inheritance",
 /*  32 */ "class_head ::= docucomment exposure_specifier declaration_modifier_list CLASS qualified_id nickname",
 /*  33 */ "class_head ::= exposure_specifier declaration_modifier_list CLASS qualified_id nickname",
 /*  34 */ "class_head ::= docucomment declaration_modifier_list CLASS qualified_id nickname",
 /*  35 */ "class_head ::= declaration_modifier_list CLASS qualified_id nickname",
 /*  36 */ "class_head ::= docucomment exposure_specifier CLASS qualified_id nickname",
 /*  37 */ "class_head ::= exposure_specifier CLASS qualified_id nickname",
 /*  38 */ "class_head ::= docucomment CLASS qualified_id nickname",
 /*  39 */ "class_head ::= CLASS qualified_id nickname",
 /*  40 */ "class_head ::= docucomment exposure_specifier declaration_modifier_list CLASS qualified_id",
 /*  41 */ "class_head ::= exposure_specifier declaration_modifier_list CLASS qualified_id",
 /*  42 */ "class_head ::= docucomment declaration_modifier_list CLASS qualified_id",
 /*  43 */ "class_head ::= declaration_modifier_list CLASS qualified_id",
 /*  44 */ "class_head ::= docucomment exposure_specifier CLASS qualified_id",
 /*  45 */ "class_head ::= exposure_specifier CLASS qualified_id",
 /*  46 */ "class_head ::= docucomment CLASS qualified_id",
 /*  47 */ "class_head ::= CLASS qualified_id",
 /*  48 */ "class_defs ::= class_head LEFT_CURLY_BRACE",
 /*  49 */ "class_defs ::= class_defs var_declaration_statement",
 /*  50 */ "class_defs ::= class_defs subroutine_declaration_statement",
 /*  51 */ "var_declaration_statement ::= type declarator SEMICOLON",
 /*  52 */ "var_declaration_statement ::= declaration_modifier_list type declarator SEMICOLON",
 /*  53 */ "var_declaration_statement ::= exposure_specifier declaration_modifier_list type declarator SEMICOLON",
 /*  54 */ "subroutine_declaration_statement ::= type declarator param_list SEMICOLON",
 /*  55 */ "subroutine_declaration_statement ::= declaration_modifier_list type declarator param_list SEMICOLON",
 /*  56 */ "subroutine_declaration_statement ::= exposure_specifier declaration_modifier_list type declarator param_list SEMICOLON",
 /*  57 */ "subroutine_declaration_statement ::= exposure_specifier type declarator param_list SEMICOLON",
 /*  58 */ "subroutine_declaration_statement ::= docucomment type declarator param_list SEMICOLON",
 /*  59 */ "subroutine_declaration_statement ::= docucomment declaration_modifier_list type declarator param_list SEMICOLON",
 /*  60 */ "subroutine_declaration_statement ::= docucomment exposure_specifier declaration_modifier_list type declarator param_list SEMICOLON",
 /*  61 */ "subroutine_declaration_statement ::= docucomment exposure_specifier type declarator param_list SEMICOLON",
 /*  62 */ "type ::= type_name",
 /*  63 */ "type ::= type_name asterisk_postfix",
 /*  64 */ "type ::= type_name array_postfix",
 /*  65 */ "type ::= type_qualifier_list type_name",
 /*  66 */ "type ::= type_qualifier_list type_name asterisk_postfix",
 /*  67 */ "type ::= type_qualifier_list type_name array_postfix",
 /*  68 */ "type_name ::= VOID",
 /*  69 */ "type_name ::= VA_LIST",
 /*  70 */ "type_name ::= INTEGER_TYPE_NAME",
 /*  71 */ "type_name ::= FLOAT_TYPE_NAME",
 /*  72 */ "type_name ::= IDENTIFIER",
 /*  73 */ "exposure_specifier ::= PUBLIC",
 /*  74 */ "type_qualifier ::= CONST",
 /*  75 */ "type_qualifier ::= NULLABLE",
 /*  76 */ "type_qualifier ::= INCREMENTED",
 /*  77 */ "type_qualifier ::= DECREMENTED",
 /*  78 */ "type_qualifier_list ::= type_qualifier",
 /*  79 */ "type_qualifier_list ::= type_qualifier_list type_qualifier",
 /*  80 */ "declaration_modifier ::= INERT",
 /*  81 */ "declaration_modifier ::= INLINE",
 /*  82 */ "declaration_modifier ::= ABSTRACT",
 /*  83 */ "declaration_modifier ::= FINAL",
 /*  84 */ "declaration_modifier_list ::= declaration_modifier",
 /*  85 */ "declaration_modifier_list ::= declaration_modifier_list declaration_modifier",
 /*  86 */ "asterisk_postfix ::= ASTERISK",
 /*  87 */ "asterisk_postfix ::= asterisk_postfix ASTERISK",
 /*  88 */ "array_postfix_elem ::= LEFT_SQUARE_BRACKET RIGHT_SQUARE_BRACKET",
 /*  89 */ "array_postfix_elem ::= LEFT_SQUARE_BRACKET INTEGER_LITERAL RIGHT_SQUARE_BRACKET",
 /*  90 */ "array_postfix ::= array_postfix_elem",
 /*  91 */ "array_postfix ::= array_postfix array_postfix_elem",
 /*  92 */ "scalar_constant ::= HEX_LITERAL",
 /*  93 */ "scalar_constant ::= FLOAT_LITERAL",
 /*  94 */ "scalar_constant ::= INTEGER_LITERAL",
 /*  95 */ "scalar_constant ::= STRING_LITERAL",
 /*  96 */ "scalar_constant ::= TRUE",
 /*  97 */ "scalar_constant ::= FALSE",
 /*  98 */ "scalar_constant ::= NULL",
 /*  99 */ "declarator ::= IDENTIFIER",
 /* 100 */ "param_variable ::= type declarator",
 /* 101 */ "param_list ::= LEFT_PAREN RIGHT_PAREN",
 /* 102 */ "param_list ::= LEFT_PAREN param_list_elems RIGHT_PAREN",
 /* 103 */ "param_list ::= LEFT_PAREN param_list_elems COMMA ELLIPSIS RIGHT_PAREN",
 /* 104 */ "param_list_elems ::= param_list_elems COMMA param_variable",
 /* 105 */ "param_list_elems ::= param_list_elems COMMA param_variable EQUALS scalar_constant",
 /* 106 */ "param_list_elems ::= param_variable",
 /* 107 */ "param_list_elems ::= param_variable EQUALS scalar_constant",
 /* 108 */ "qualified_id ::= IDENTIFIER",
 /* 109 */ "qualified_id ::= qualified_id SCOPE_OP IDENTIFIER",
 /* 110 */ "docucomment ::= DOCUCOMMENT",
 /* 111 */ "class_inheritance ::= INHERITS qualified_id",
 /* 112 */ "nickname ::= NICKNAME IDENTIFIER",
 /* 113 */ "cblock ::= CBLOCK_START blob CBLOCK_CLOSE",
 /* 114 */ "cblock ::= CBLOCK_START CBLOCK_CLOSE",
 /* 115 */ "blob ::= BLOB",
 /* 116 */ "blob ::= blob BLOB",
};
#endif /* NDEBUG */


#if YYGROWABLESTACK
/*
** Try to increase the size of the parser stack.  Return the number
** of errors.  Return 0 on success.
*/
static int yyGrowStack(yyParser *p){
  int oldSize = 1 + (int)(p->yystackEnd - p->yystack);
  int newSize;
  int idx;
  yyStackEntry *pNew;
#ifdef YYSIZELIMIT
  int nLimit = YYSIZELIMIT(CFCParseHeaderCTX(p));
#endif

  newSize = oldSize*2 + 100;
#ifdef YYSIZELIMIT
  if( newSize>nLimit ){
    newSize = nLimit;
    if( newSize<=oldSize ) return 1;
  }
#endif
  idx = (int)(p->yytos - p->yystack);
  if( p->yystack==p->yystk0 ){
    pNew = YYREALLOC(0, newSize*sizeof(pNew[0]), CFCParseHeaderCTX(p));
    if( pNew==0 ) return 1;
    memcpy(pNew, p->yystack, oldSize*sizeof(pNew[0]));
  }else{
    pNew = YYREALLOC(p->yystack, newSize*sizeof(pNew[0]), CFCParseHeaderCTX(p));
    if( pNew==0 ) return 1;
  }
  p->yystack = pNew;
  p->yytos = &p->yystack[idx];
#ifndef NDEBUG
  if( yyTraceFILE ){
    fprintf(yyTraceFILE,"%sStack grows from %d to %d entries.\n",
            yyTracePrompt, oldSize, newSize);
  }
#endif
  p->yystackEnd = &p->yystack[newSize-1];
  return 0;
}
#endif /* YYGROWABLESTACK */

#if !YYGROWABLESTACK
/* For builds that do no have a growable stack, yyGrowStack always
** returns an error.
*/
# define yyGrowStack(X) 1
#endif

/* Datatype of the argument to the memory allocated passed as the
** second argument to CFCParseHeaderAlloc() below.  This can be changed by
** putting an appropriate #define in the %include section of the input
** grammar.
*/
#ifndef YYMALLOCARGTYPE
# define YYMALLOCARGTYPE size_t
#endif

/* Initialize a new parser that has already been allocated.
*/
void CFCParseHeaderInit(void *yypRawParser CFCParseHeaderCTX_PDECL){
  yyParser *yypParser = (yyParser*)yypRawParser;
  CFCParseHeaderCTX_STORE
#ifdef YYTRACKMAXSTACKDEPTH
  yypParser->yyhwm = 0;
#endif
  yypParser->yystack = yypParser->yystk0;
  yypParser->yystackEnd = &yypParser->yystack[YYSTACKDEPTH-1];
#ifndef YYNOERRORRECOVERY
  yypParser->yyerrcnt = -1;
#endif
  yypParser->yytos = yypParser->yystack;
  yypParser->yystack[0].stateno = 0;
  yypParser->yystack[0].major = 0;
}

#ifndef CFCParseHeader_ENGINEALWAYSONSTACK
/* 
** 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 CFCParseHeader and CFCParseHeaderFree.
*/
void *CFCParseHeaderAlloc(void *(*mallocProc)(YYMALLOCARGTYPE) CFCParseHeaderCTX_PDECL){
  yyParser *yypParser;
  yypParser = (yyParser*)(*mallocProc)( (YYMALLOCARGTYPE)sizeof(yyParser) );
  if( yypParser ){
    CFCParseHeaderCTX_STORE
    CFCParseHeaderInit(yypParser CFCParseHeaderCTX_PARAM);
  }
  return (void*)yypParser;
}
#endif /* CFCParseHeader_ENGINEALWAYSONSTACK */


/* The following function deletes the "minor type" or semantic 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 to be deleted.  The code used to do the 
** deletions is derived from the %destructor and/or %token_destructor
** directives of the input grammar.
*/
static void yy_destructor(
  yyParser *yypParser,    /* The parser */
  YYCODETYPE yymajor,     /* Type code for object to destroy */
  YYMINORTYPE *yypminor   /* The object to be destroyed */
){
  CFCParseHeaderARG_FETCH
  CFCParseHeaderCTX_FETCH
  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.
    */
/********* Begin destructor definitions ***************************************/
    case 43: /* result */
{
#line 237 "../src/CFCParseHeader.y"

    (void)state; /* Suppress unused variable warning. */
    CFCBase_decref((CFCBase*)(yypminor->yy120));

#line 1210 "../src/CFCParseHeader.c"
}
      break;
    case 44: /* file */
{
#line 241 "../src/CFCParseHeader.y"
 CFCBase_decref((CFCBase*)(yypminor->yy51)); 
#line 1217 "../src/CFCParseHeader.c"
}
      break;
    case 45: /* major_block */
    case 51: /* subroutine_declaration_statement */
{
#line 242 "../src/CFCParseHeader.y"
 CFCBase_decref((CFCBase*)(yypminor->yy120)); 
#line 1225 "../src/CFCParseHeader.c"
}
      break;
    case 46: /* parcel_definition */
{
#line 243 "../src/CFCParseHeader.y"
 CFCBase_decref((CFCBase*)(yypminor->yy136)); 
#line 1232 "../src/CFCParseHeader.c"
}
      break;
    case 47: /* class_declaration */
    case 48: /* class_head */
    case 49: /* class_defs */
{
#line 244 "../src/CFCParseHeader.y"
 CFCBase_decref((CFCBase*)(yypminor->yy23)); 
#line 1241 "../src/CFCParseHeader.c"
}
      break;
    case 50: /* var_declaration_statement */
    case 53: /* param_variable */
{
#line 247 "../src/CFCParseHeader.y"
 CFCBase_decref((CFCBase*)(yypminor->yy25)); 
#line 1249 "../src/CFCParseHeader.c"
}
      break;
    case 52: /* type */
{
#line 249 "../src/CFCParseHeader.y"
 CFCBase_decref((CFCBase*)(yypminor->yy139)); 
#line 1256 "../src/CFCParseHeader.c"
}
      break;
    case 54: /* param_list */
    case 55: /* param_list_elems */
{
#line 251 "../src/CFCParseHeader.y"
 CFCBase_decref((CFCBase*)(yypminor->yy100)); 
#line 1264 "../src/CFCParseHeader.c"
}
      break;
    case 56: /* docucomment */
{
#line 253 "../src/CFCParseHeader.y"
 CFCBase_decref((CFCBase*)(yypminor->yy69)); 
#line 1271 "../src/CFCParseHeader.c"
}
      break;
    case 57: /* cblock */
{
#line 254 "../src/CFCParseHeader.y"
 CFCBase_decref((CFCBase*)(yypminor->yy70)); 
#line 1278 "../src/CFCParseHeader.c"
}
      break;
/********* End destructor definitions *****************************************/
    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.
*/
static void yy_pop_parser_stack(yyParser *pParser){
  yyStackEntry *yytos;
  assert( pParser->yytos!=0 );
  assert( pParser->yytos > pParser->yystack );
  yytos = pParser->yytos--;
#ifndef NDEBUG
  if( yyTraceFILE ){
    fprintf(yyTraceFILE,"%sPopping %s\n",
      yyTracePrompt,
      yyTokenName[yytos->major]);
  }
#endif
  yy_destructor(pParser, yytos->major, &yytos->minor);
}

/*
** Clear all secondary memory allocations from the parser
*/
void CFCParseHeaderFinalize(void *p){
  yyParser *pParser = (yyParser*)p;

  /* In-lined version of calling yy_pop_parser_stack() for each
  ** element left in the stack */
  yyStackEntry *yytos = pParser->yytos;
  while( yytos>pParser->yystack ){
#ifndef NDEBUG
    if( yyTraceFILE ){
      fprintf(yyTraceFILE,"%sPopping %s\n",
        yyTracePrompt,
        yyTokenName[yytos->major]);
    }
#endif
    if( yytos->major>=YY_MIN_DSTRCTR ){
      yy_destructor(pParser, yytos->major, &yytos->minor);
    }
    yytos--;
  }

#if YYGROWABLESTACK
  if( pParser->yystack!=pParser->yystk0 ){
    YYFREE(pParser->yystack, CFCParseHeaderCTX(pParser));
  }
#endif
}

#ifndef CFCParseHeader_ENGINEALWAYSONSTACK
/* 
** Deallocate and destroy a parser.  Destructors are called for
** all stack elements before shutting the parser down.
**
** If the YYPARSEFREENEVERNULL macro exists (for example because it
** is defined in a %include section of the input grammar) then it is
** assumed that the input pointer is never NULL.
*/
void CFCParseHeaderFree(
  void *p,                    /* The parser to be deleted */
  void (*freeProc)(void*)     /* Function used to reclaim memory */
){
#ifndef YYPARSEFREENEVERNULL
  if( p==0 ) return;
#endif
  CFCParseHeaderFinalize(p);
  (*freeProc)(p);
}
#endif /* CFCParseHeader_ENGINEALWAYSONSTACK */

/*
** Return the peak depth of the stack for a parser.
*/
#ifdef YYTRACKMAXSTACKDEPTH
int CFCParseHeaderStackPeak(void *p){
  yyParser *pParser = (yyParser*)p;
  return pParser->yyhwm;
}
#endif

/* This array of booleans keeps track of the parser statement
** coverage.  The element yycoverage[X][Y] is set when the parser
** is in state X and has a lookahead token Y.  In a well-tested
** systems, every element of this matrix should end up being set.
*/
#if defined(YYCOVERAGE)
static unsigned char yycoverage[YYNSTATE][YYNTOKEN];
#endif

/*
** Write into out a description of every state/lookahead combination that
**
**   (1)  has not been used by the parser, and
**   (2)  is not a syntax error.
**
** Return the number of missed state/lookahead combinations.
*/
#if defined(YYCOVERAGE)
int CFCParseHeaderCoverage(FILE *out){
  int stateno, iLookAhead, i;
  int nMissed = 0;
  for(stateno=0; stateno<YYNSTATE; stateno++){
    i = yy_shift_ofst[stateno];
    for(iLookAhead=0; iLookAhead<YYNTOKEN; iLookAhead++){
      if( yy_lookahead[i+iLookAhead]!=iLookAhead ) continue;
      if( yycoverage[stateno][iLookAhead]==0 ) nMissed++;
      if( out ){
        fprintf(out,"State %d lookahead %s %s\n", stateno,
                yyTokenName[iLookAhead],
                yycoverage[stateno][iLookAhead] ? "ok" : "missed");
      }
    }
  }
  return nMissed;
}
#endif

/*
** Find the appropriate action for a parser given the terminal
** look-ahead token iLookAhead.
*/
static YYACTIONTYPE yy_find_shift_action(
  YYCODETYPE iLookAhead,    /* The look-ahead token */
  YYACTIONTYPE stateno      /* Current state number */
){
  int i;

  if( stateno>YY_MAX_SHIFT ) return stateno;
  assert( stateno <= YY_SHIFT_COUNT );
#if defined(YYCOVERAGE)
  yycoverage[stateno][iLookAhead] = 1;
#endif
  do{
    i = yy_shift_ofst[stateno];
    assert( i>=0 );
    assert( i<=YY_ACTTAB_COUNT );
    assert( i+YYNTOKEN<=(int)YY_NLOOKAHEAD );
    assert( iLookAhead!=YYNOCODE );
    assert( iLookAhead < YYNTOKEN );
    i += iLookAhead;
    assert( i<(int)YY_NLOOKAHEAD );
    if( yy_lookahead[i]!=iLookAhead ){
#ifdef YYFALLBACK
      YYCODETYPE iFallback;            /* Fallback token */
      assert( iLookAhead<sizeof(yyFallback)/sizeof(yyFallback[0]) );
      iFallback = yyFallback[iLookAhead];
      if( iFallback!=0 ){
#ifndef NDEBUG
        if( yyTraceFILE ){
          fprintf(yyTraceFILE, "%sFALLBACK %s => %s\n",
             yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[iFallback]);
        }
#endif
        assert( yyFallback[iFallback]==0 ); /* Fallback loop must terminate */
        iLookAhead = iFallback;
        continue;
      }
#endif
#ifdef YYWILDCARD
      {
        int j = i - iLookAhead + YYWILDCARD;
        assert( j<(int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0])) );
        if( yy_lookahead[j]==YYWILDCARD && iLookAhead>0 ){
#ifndef NDEBUG
          if( yyTraceFILE ){
            fprintf(yyTraceFILE, "%sWILDCARD %s => %s\n",
               yyTracePrompt, yyTokenName[iLookAhead],
               yyTokenName[YYWILDCARD]);
          }
#endif /* NDEBUG */
          return yy_action[j];
        }
      }
#endif /* YYWILDCARD */
      return yy_default[stateno];
    }else{
      assert( i>=0 && i<(int)(sizeof(yy_action)/sizeof(yy_action[0])) );
      return yy_action[i];
    }
  }while(1);
}

/*
** Find the appropriate action for a parser given the non-terminal
** look-ahead token iLookAhead.
*/
static YYACTIONTYPE yy_find_reduce_action(
  YYACTIONTYPE stateno,     /* Current state number */
  YYCODETYPE iLookAhead     /* The look-ahead token */
){
  int i;
#ifdef YYERRORSYMBOL
  if( stateno>YY_REDUCE_COUNT ){
    return yy_default[stateno];
  }
#else
  assert( stateno<=YY_REDUCE_COUNT );
#endif
  i = yy_reduce_ofst[stateno];
  assert( iLookAhead!=YYNOCODE );
  i += iLookAhead;
#ifdef YYERRORSYMBOL
  if( i<0 || i>=YY_ACTTAB_COUNT || yy_lookahead[i]!=iLookAhead ){
    return yy_default[stateno];
  }
#else
  assert( i>=0 && i<YY_ACTTAB_COUNT );
  assert( yy_lookahead[i]==iLookAhead );
#endif
  return yy_action[i];
}

/*
** The following routine is called if the stack overflows.
*/
static void yyStackOverflow(yyParser *yypParser){
   CFCParseHeaderARG_FETCH
   CFCParseHeaderCTX_FETCH
#ifndef NDEBUG
   if( yyTraceFILE ){
     fprintf(yyTraceFILE,"%sStack Overflow!\n",yyTracePrompt);
   }
#endif
   while( yypParser->yytos>yypParser->yystack ) yy_pop_parser_stack(yypParser);
   /* Here code is inserted which will execute if the parser
   ** stack every overflows */
/******** Begin %stack_overflow code ******************************************/
/******** End %stack_overflow code ********************************************/
   CFCParseHeaderARG_STORE /* Suppress warning about unused %extra_argument var */
   CFCParseHeaderCTX_STORE
}

/*
** Print tracing information for a SHIFT action
*/
#ifndef NDEBUG
static void yyTraceShift(yyParser *yypParser, int yyNewState, const char *zTag){
  if( yyTraceFILE ){
    if( yyNewState<YYNSTATE ){
      fprintf(yyTraceFILE,"%s%s '%s', go to state %d\n",
         yyTracePrompt, zTag, yyTokenName[yypParser->yytos->major],
         yyNewState);
    }else{
      fprintf(yyTraceFILE,"%s%s '%s', pending reduce %d\n",
         yyTracePrompt, zTag, yyTokenName[yypParser->yytos->major],
         yyNewState - YY_MIN_REDUCE);
    }
  }
}
#else
# define yyTraceShift(X,Y,Z)
#endif

/*
** Perform a shift action.
*/
static void yy_shift(
  yyParser *yypParser,          /* The parser to be shifted */
  YYACTIONTYPE yyNewState,      /* The new state to shift in */
  YYCODETYPE yyMajor,           /* The major token to shift in */
  CFCParseHeaderTOKENTYPE yyMinor        /* The minor token to shift in */
){
  yyStackEntry *yytos;
  yypParser->yytos++;
#ifdef YYTRACKMAXSTACKDEPTH
  if( (int)(yypParser->yytos - yypParser->yystack)>yypParser->yyhwm ){
    yypParser->yyhwm++;
    assert( yypParser->yyhwm == (int)(yypParser->yytos - yypParser->yystack) );
  }
#endif
  yytos = yypParser->yytos;
  if( yytos>yypParser->yystackEnd ){
    if( yyGrowStack(yypParser) ){
      yypParser->yytos--;
      yyStackOverflow(yypParser);
      return;
    }
    yytos = yypParser->yytos;
    assert( yytos <= yypParser->yystackEnd );
  }
  if( yyNewState > YY_MAX_SHIFT ){
    yyNewState += YY_MIN_REDUCE - YY_MIN_SHIFTREDUCE;
  }
  yytos->stateno = yyNewState;
  yytos->major = yyMajor;
  yytos->minor.yy0 = yyMinor;
  yyTraceShift(yypParser, yyNewState, "Shift");
}

/* For rule J, yyRuleInfoLhs[J] contains the symbol on the left-hand side
** of that rule */
static const YYCODETYPE yyRuleInfoLhs[] = {
    43,  /* (0) result ::= type */
    43,  /* (1) result ::= param_list */
    43,  /* (2) result ::= param_variable */
    43,  /* (3) result ::= docucomment */
    43,  /* (4) result ::= parcel_definition */
    43,  /* (5) result ::= cblock */
    43,  /* (6) result ::= var_declaration_statement */
    43,  /* (7) result ::= subroutine_declaration_statement */
    43,  /* (8) result ::= class_declaration */
    43,  /* (9) result ::= file */
    44,  /* (10) file ::= FILE_START parcel_definition */
    44,  /* (11) file ::= file major_block */
    45,  /* (12) major_block ::= class_declaration */
    45,  /* (13) major_block ::= cblock */
    46,  /* (14) parcel_definition ::= PARCEL qualified_id SEMICOLON */
    47,  /* (15) class_declaration ::= class_defs RIGHT_CURLY_BRACE */
    48,  /* (16) class_head ::= docucomment exposure_specifier declaration_modifier_list CLASS qualified_id nickname class_inheritance */
    48,  /* (17) class_head ::= exposure_specifier declaration_modifier_list CLASS qualified_id nickname class_inheritance */
    48,  /* (18) class_head ::= docucomment declaration_modifier_list CLASS qualified_id nickname class_inheritance */
    48,  /* (19) class_head ::= declaration_modifier_list CLASS qualified_id nickname class_inheritance */
    48,  /* (20) class_head ::= docucomment exposure_specifier CLASS qualified_id nickname class_inheritance */
    48,  /* (21) class_head ::= exposure_specifier CLASS qualified_id nickname class_inheritance */
    48,  /* (22) class_head ::= docucomment CLASS qualified_id nickname class_inheritance */
    48,  /* (23) class_head ::= CLASS qualified_id nickname class_inheritance */
    48,  /* (24) class_head ::= docucomment exposure_specifier declaration_modifier_list CLASS qualified_id class_inheritance */
    48,  /* (25) class_head ::= exposure_specifier declaration_modifier_list CLASS qualified_id class_inheritance */
    48,  /* (26) class_head ::= docucomment declaration_modifier_list CLASS qualified_id class_inheritance */
    48,  /* (27) class_head ::= declaration_modifier_list CLASS qualified_id class_inheritance */
    48,  /* (28) class_head ::= docucomment exposure_specifier CLASS qualified_id class_inheritance */
    48,  /* (29) class_head ::= exposure_specifier CLASS qualified_id class_inheritance */
    48,  /* (30) class_head ::= docucomment CLASS qualified_id class_inheritance */
    48,  /* (31) class_head ::= CLASS qualified_id class_inheritance */
    48,  /* (32) class_head ::= docucomment exposure_specifier declaration_modifier_list CLASS qualified_id nickname */
    48,  /* (33) class_head ::= exposure_specifier declaration_modifier_list CLASS qualified_id nickname */
    48,  /* (34) class_head ::= docucomment declaration_modifier_list CLASS qualified_id nickname */
    48,  /* (35) class_head ::= declaration_modifier_list CLASS qualified_id nickname */
    48,  /* (36) class_head ::= docucomment exposure_specifier CLASS qualified_id nickname */
    48,  /* (37) class_head ::= exposure_specifier CLASS qualified_id nickname */
    48,  /* (38) class_head ::= docucomment CLASS qualified_id nickname */
    48,  /* (39) class_head ::= CLASS qualified_id nickname */
    48,  /* (40) class_head ::= docucomment exposure_specifier declaration_modifier_list CLASS qualified_id */
    48,  /* (41) class_head ::= exposure_specifier declaration_modifier_list CLASS qualified_id */
    48,  /* (42) class_head ::= docucomment declaration_modifier_list CLASS qualified_id */
    48,  /* (43) class_head ::= declaration_modifier_list CLASS qualified_id */
    48,  /* (44) class_head ::= docucomment exposure_specifier CLASS qualified_id */
    48,  /* (45) class_head ::= exposure_specifier CLASS qualified_id */
    48,  /* (46) class_head ::= docucomment CLASS qualified_id */
    48,  /* (47) class_head ::= CLASS qualified_id */
    49,  /* (48) class_defs ::= class_head LEFT_CURLY_BRACE */
    49,  /* (49) class_defs ::= class_defs var_declaration_statement */
    49,  /* (50) class_defs ::= class_defs subroutine_declaration_statement */
    50,  /* (51) var_declaration_statement ::= type declarator SEMICOLON */
    50,  /* (52) var_declaration_statement ::= declaration_modifier_list type declarator SEMICOLON */
    50,  /* (53) var_declaration_statement ::= exposure_specifier declaration_modifier_list type declarator SEMICOLON */
    51,  /* (54) subroutine_declaration_statement ::= type declarator param_list SEMICOLON */
    51,  /* (55) subroutine_declaration_statement ::= declaration_modifier_list type declarator param_list SEMICOLON */
    51,  /* (56) subroutine_declaration_statement ::= exposure_specifier declaration_modifier_list type declarator param_list SEMICOLON */
    51,  /* (57) subroutine_declaration_statement ::= exposure_specifier type declarator param_list SEMICOLON */
    51,  /* (58) subroutine_declaration_statement ::= docucomment type declarator param_list SEMICOLON */
    51,  /* (59) subroutine_declaration_statement ::= docucomment declaration_modifier_list type declarator param_list SEMICOLON */
    51,  /* (60) subroutine_declaration_statement ::= docucomment exposure_specifier declaration_modifier_list type declarator param_list SEMICOLON */
    51,  /* (61) subroutine_declaration_statement ::= docucomment exposure_specifier type declarator param_list SEMICOLON */
    52,  /* (62) type ::= type_name */
    52,  /* (63) type ::= type_name asterisk_postfix */
    52,  /* (64) type ::= type_name array_postfix */
    52,  /* (65) type ::= type_qualifier_list type_name */
    52,  /* (66) type ::= type_qualifier_list type_name asterisk_postfix */
    52,  /* (67) type ::= type_qualifier_list type_name array_postfix */
    66,  /* (68) type_name ::= VOID */
    66,  /* (69) type_name ::= VA_LIST */
    66,  /* (70) type_name ::= INTEGER_TYPE_NAME */
    66,  /* (71) type_name ::= FLOAT_TYPE_NAME */
    66,  /* (72) type_name ::= IDENTIFIER */
    61,  /* (73) exposure_specifier ::= PUBLIC */
    58,  /* (74) type_qualifier ::= CONST */
    58,  /* (75) type_qualifier ::= NULLABLE */
    58,  /* (76) type_qualifier ::= INCREMENTED */
    58,  /* (77) type_qualifier ::= DECREMENTED */
    59,  /* (78) type_qualifier_list ::= type_qualifier */
    59,  /* (79) type_qualifier_list ::= type_qualifier_list type_qualifier */
    69,  /* (80) declaration_modifier ::= INERT */
    69,  /* (81) declaration_modifier ::= INLINE */
    69,  /* (82) declaration_modifier ::= ABSTRACT */
    69,  /* (83) declaration_modifier ::= FINAL */
    62,  /* (84) declaration_modifier_list ::= declaration_modifier */
    62,  /* (85) declaration_modifier_list ::= declaration_modifier_list declaration_modifier */
    67,  /* (86) asterisk_postfix ::= ASTERISK */
    67,  /* (87) asterisk_postfix ::= asterisk_postfix ASTERISK */
    70,  /* (88) array_postfix_elem ::= LEFT_SQUARE_BRACKET RIGHT_SQUARE_BRACKET */
    70,  /* (89) array_postfix_elem ::= LEFT_SQUARE_BRACKET INTEGER_LITERAL RIGHT_SQUARE_BRACKET */
    68,  /* (90) array_postfix ::= array_postfix_elem */
    68,  /* (91) array_postfix ::= array_postfix array_postfix_elem */
    71,  /* (92) scalar_constant ::= HEX_LITERAL */
    71,  /* (93) scalar_constant ::= FLOAT_LITERAL */
    71,  /* (94) scalar_constant ::= INTEGER_LITERAL */
    71,  /* (95) scalar_constant ::= STRING_LITERAL */
    71,  /* (96) scalar_constant ::= TRUE */
    71,  /* (97) scalar_constant ::= FALSE */
    71,  /* (98) scalar_constant ::= NULL */
    65,  /* (99) declarator ::= IDENTIFIER */
    53,  /* (100) param_variable ::= type declarator */
    54,  /* (101) param_list ::= LEFT_PAREN RIGHT_PAREN */
    54,  /* (102) param_list ::= LEFT_PAREN param_list_elems RIGHT_PAREN */
    54,  /* (103) param_list ::= LEFT_PAREN param_list_elems COMMA ELLIPSIS RIGHT_PAREN */
    55,  /* (104) param_list_elems ::= param_list_elems COMMA param_variable */
    55,  /* (105) param_list_elems ::= param_list_elems COMMA param_variable EQUALS scalar_constant */
    55,  /* (106) param_list_elems ::= param_variable */
    55,  /* (107) param_list_elems ::= param_variable EQUALS scalar_constant */
    60,  /* (108) qualified_id ::= IDENTIFIER */
    60,  /* (109) qualified_id ::= qualified_id SCOPE_OP IDENTIFIER */
    56,  /* (110) docucomment ::= DOCUCOMMENT */
    64,  /* (111) class_inheritance ::= INHERITS qualified_id */
    63,  /* (112) nickname ::= NICKNAME IDENTIFIER */
    57,  /* (113) cblock ::= CBLOCK_START blob CBLOCK_CLOSE */
    57,  /* (114) cblock ::= CBLOCK_START CBLOCK_CLOSE */
    72,  /* (115) blob ::= BLOB */
    72,  /* (116) blob ::= blob BLOB */
};

/* For rule J, yyRuleInfoNRhs[J] contains the negative of the number
** of symbols on the right-hand side of that rule. */
static const signed char yyRuleInfoNRhs[] = {
   -1,  /* (0) result ::= type */
   -1,  /* (1) result ::= param_list */
   -1,  /* (2) result ::= param_variable */
   -1,  /* (3) result ::= docucomment */
   -1,  /* (4) result ::= parcel_definition */
   -1,  /* (5) result ::= cblock */
   -1,  /* (6) result ::= var_declaration_statement */
   -1,  /* (7) result ::= subroutine_declaration_statement */
   -1,  /* (8) result ::= class_declaration */
   -1,  /* (9) result ::= file */
   -2,  /* (10) file ::= FILE_START parcel_definition */
   -2,  /* (11) file ::= file major_block */
   -1,  /* (12) major_block ::= class_declaration */
   -1,  /* (13) major_block ::= cblock */
   -3,  /* (14) parcel_definition ::= PARCEL qualified_id SEMICOLON */
   -2,  /* (15) class_declaration ::= class_defs RIGHT_CURLY_BRACE */
   -7,  /* (16) class_head ::= docucomment exposure_specifier declaration_modifier_list CLASS qualified_id nickname class_inheritance */
   -6,  /* (17) class_head ::= exposure_specifier declaration_modifier_list CLASS qualified_id nickname class_inheritance */
   -6,  /* (18) class_head ::= docucomment declaration_modifier_list CLASS qualified_id nickname class_inheritance */
   -5,  /* (19) class_head ::= declaration_modifier_list CLASS qualified_id nickname class_inheritance */
   -6,  /* (20) class_head ::= docucomment exposure_specifier CLASS qualified_id nickname class_inheritance */
   -5,  /* (21) class_head ::= exposure_specifier CLASS qualified_id nickname class_inheritance */
   -5,  /* (22) class_head ::= docucomment CLASS qualified_id nickname class_inheritance */
   -4,  /* (23) class_head ::= CLASS qualified_id nickname class_inheritance */
   -6,  /* (24) class_head ::= docucomment exposure_specifier declaration_modifier_list CLASS qualified_id class_inheritance */
   -5,  /* (25) class_head ::= exposure_specifier declaration_modifier_list CLASS qualified_id class_inheritance */
   -5,  /* (26) class_head ::= docucomment declaration_modifier_list CLASS qualified_id class_inheritance */
   -4,  /* (27) class_head ::= declaration_modifier_list CLASS qualified_id class_inheritance */
   -5,  /* (28) class_head ::= docucomment exposure_specifier CLASS qualified_id class_inheritance */
   -4,  /* (29) class_head ::= exposure_specifier CLASS qualified_id class_inheritance */
   -4,  /* (30) class_head ::= docucomment CLASS qualified_id class_inheritance */
   -3,  /* (31) class_head ::= CLASS qualified_id class_inheritance */
   -6,  /* (32) class_head ::= docucomment exposure_specifier declaration_modifier_list CLASS qualified_id nickname */
   -5,  /* (33) class_head ::= exposure_specifier declaration_modifier_list CLASS qualified_id nickname */
   -5,  /* (34) class_head ::= docucomment declaration_modifier_list CLASS qualified_id nickname */
   -4,  /* (35) class_head ::= declaration_modifier_list CLASS qualified_id nickname */
   -5,  /* (36) class_head ::= docucomment exposure_specifier CLASS qualified_id nickname */
   -4,  /* (37) class_head ::= exposure_specifier CLASS qualified_id nickname */
   -4,  /* (38) class_head ::= docucomment CLASS qualified_id nickname */
   -3,  /* (39) class_head ::= CLASS qualified_id nickname */
   -5,  /* (40) class_head ::= docucomment exposure_specifier declaration_modifier_list CLASS qualified_id */
   -4,  /* (41) class_head ::= exposure_specifier declaration_modifier_list CLASS qualified_id */
   -4,  /* (42) class_head ::= docucomment declaration_modifier_list CLASS qualified_id */
   -3,  /* (43) class_head ::= declaration_modifier_list CLASS qualified_id */
   -4,  /* (44) class_head ::= docucomment exposure_specifier CLASS qualified_id */
   -3,  /* (45) class_head ::= exposure_specifier CLASS qualified_id */
   -3,  /* (46) class_head ::= docucomment CLASS qualified_id */
   -2,  /* (47) class_head ::= CLASS qualified_id */
   -2,  /* (48) class_defs ::= class_head LEFT_CURLY_BRACE */
   -2,  /* (49) class_defs ::= class_defs var_declaration_statement */
   -2,  /* (50) class_defs ::= class_defs subroutine_declaration_statement */
   -3,  /* (51) var_declaration_statement ::= type declarator SEMICOLON */
   -4,  /* (52) var_declaration_statement ::= declaration_modifier_list type declarator SEMICOLON */
   -5,  /* (53) var_declaration_statement ::= exposure_specifier declaration_modifier_list type declarator SEMICOLON */
   -4,  /* (54) subroutine_declaration_statement ::= type declarator param_list SEMICOLON */
   -5,  /* (55) subroutine_declaration_statement ::= declaration_modifier_list type declarator param_list SEMICOLON */
   -6,  /* (56) subroutine_declaration_statement ::= exposure_specifier declaration_modifier_list type declarator param_list SEMICOLON */
   -5,  /* (57) subroutine_declaration_statement ::= exposure_specifier type declarator param_list SEMICOLON */
   -5,  /* (58) subroutine_declaration_statement ::= docucomment type declarator param_list SEMICOLON */
   -6,  /* (59) subroutine_declaration_statement ::= docucomment declaration_modifier_list type declarator param_list SEMICOLON */
   -7,  /* (60) subroutine_declaration_statement ::= docucomment exposure_specifier declaration_modifier_list type declarator param_list SEMICOLON */
   -6,  /* (61) subroutine_declaration_statement ::= docucomment exposure_specifier type declarator param_list SEMICOLON */
   -1,  /* (62) type ::= type_name */
   -2,  /* (63) type ::= type_name asterisk_postfix */
   -2,  /* (64) type ::= type_name array_postfix */
   -2,  /* (65) type ::= type_qualifier_list type_name */
   -3,  /* (66) type ::= type_qualifier_list type_name asterisk_postfix */
   -3,  /* (67) type ::= type_qualifier_list type_name array_postfix */
   -1,  /* (68) type_name ::= VOID */
   -1,  /* (69) type_name ::= VA_LIST */
   -1,  /* (70) type_name ::= INTEGER_TYPE_NAME */
   -1,  /* (71) type_name ::= FLOAT_TYPE_NAME */
   -1,  /* (72) type_name ::= IDENTIFIER */
   -1,  /* (73) exposure_specifier ::= PUBLIC */
   -1,  /* (74) type_qualifier ::= CONST */
   -1,  /* (75) type_qualifier ::= NULLABLE */
   -1,  /* (76) type_qualifier ::= INCREMENTED */
   -1,  /* (77) type_qualifier ::= DECREMENTED */
   -1,  /* (78) type_qualifier_list ::= type_qualifier */
   -2,  /* (79) type_qualifier_list ::= type_qualifier_list type_qualifier */
   -1,  /* (80) declaration_modifier ::= INERT */
   -1,  /* (81) declaration_modifier ::= INLINE */
   -1,  /* (82) declaration_modifier ::= ABSTRACT */
   -1,  /* (83) declaration_modifier ::= FINAL */
   -1,  /* (84) declaration_modifier_list ::= declaration_modifier */
   -2,  /* (85) declaration_modifier_list ::= declaration_modifier_list declaration_modifier */
   -1,  /* (86) asterisk_postfix ::= ASTERISK */
   -2,  /* (87) asterisk_postfix ::= asterisk_postfix ASTERISK */
   -2,  /* (88) array_postfix_elem ::= LEFT_SQUARE_BRACKET RIGHT_SQUARE_BRACKET */
   -3,  /* (89) array_postfix_elem ::= LEFT_SQUARE_BRACKET INTEGER_LITERAL RIGHT_SQUARE_BRACKET */
   -1,  /* (90) array_postfix ::= array_postfix_elem */
   -2,  /* (91) array_postfix ::= array_postfix array_postfix_elem */
   -1,  /* (92) scalar_constant ::= HEX_LITERAL */
   -1,  /* (93) scalar_constant ::= FLOAT_LITERAL */
   -1,  /* (94) scalar_constant ::= INTEGER_LITERAL */
   -1,  /* (95) scalar_constant ::= STRING_LITERAL */
   -1,  /* (96) scalar_constant ::= TRUE */
   -1,  /* (97) scalar_constant ::= FALSE */
   -1,  /* (98) scalar_constant ::= NULL */
   -1,  /* (99) declarator ::= IDENTIFIER */
   -2,  /* (100) param_variable ::= type declarator */
   -2,  /* (101) param_list ::= LEFT_PAREN RIGHT_PAREN */
   -3,  /* (102) param_list ::= LEFT_PAREN param_list_elems RIGHT_PAREN */
   -5,  /* (103) param_list ::= LEFT_PAREN param_list_elems COMMA ELLIPSIS RIGHT_PAREN */
   -3,  /* (104) param_list_elems ::= param_list_elems COMMA param_variable */
   -5,  /* (105) param_list_elems ::= param_list_elems COMMA param_variable EQUALS scalar_constant */
   -1,  /* (106) param_list_elems ::= param_variable */
   -3,  /* (107) param_list_elems ::= param_variable EQUALS scalar_constant */
   -1,  /* (108) qualified_id ::= IDENTIFIER */
   -3,  /* (109) qualified_id ::= qualified_id SCOPE_OP IDENTIFIER */
   -1,  /* (110) docucomment ::= DOCUCOMMENT */
   -2,  /* (111) class_inheritance ::= INHERITS qualified_id */
   -2,  /* (112) nickname ::= NICKNAME IDENTIFIER */
   -3,  /* (113) cblock ::= CBLOCK_START blob CBLOCK_CLOSE */
   -2,  /* (114) cblock ::= CBLOCK_START CBLOCK_CLOSE */
   -1,  /* (115) blob ::= BLOB */
   -2,  /* (116) blob ::= blob BLOB */
};

static void yy_accept(yyParser*);  /* Forward Declaration */

/*
** Perform a reduce action and the shift that must immediately
** follow the reduce.
**
** The yyLookahead and yyLookaheadToken parameters provide reduce actions
** access to the lookahead token (if any).  The yyLookahead will be YYNOCODE
** if the lookahead token has already been consumed.  As this procedure is
** only called from one place, optimizing compilers will in-line it, which
** means that the extra parameters have no performance impact.
*/
static YYACTIONTYPE yy_reduce(
  yyParser *yypParser,         /* The parser */
  unsigned int yyruleno,       /* Number of the rule by which to reduce */
  int yyLookahead,             /* Lookahead token, or YYNOCODE if none */
  CFCParseHeaderTOKENTYPE yyLookaheadToken  /* Value of the lookahead token */
  CFCParseHeaderCTX_PDECL                   /* %extra_context */
){
  int yygoto;                     /* The next state */
  YYACTIONTYPE yyact;             /* The next action */
  yyStackEntry *yymsp;            /* The top of the parser's stack */
  int yysize;                     /* Amount to pop the stack */
  CFCParseHeaderARG_FETCH
  (void)yyLookahead;
  (void)yyLookaheadToken;
  yymsp = yypParser->yytos;

  switch( yyruleno ){
  /* Beginning here are the reduction cases.  A typical example
  ** follows:
  **   case 0:
  **  #line <lineno> <grammarfile>
  **     { ... }           // User supplied code
  **  #line <lineno> <thisfile>
  **     break;
  */
/********** Begin reduce actions **********************************************/
        YYMINORTYPE yylhsminor;
      case 0: /* result ::= type */
#line 257 "../src/CFCParseHeader.y"
{
    CFCParser_set_result(state, (CFCBase*)yymsp[0].minor.yy139);
    CFCBase_decref((CFCBase*)yymsp[0].minor.yy139);
}
#line 1866 "../src/CFCParseHeader.c"
        break;
      case 1: /* result ::= param_list */
#line 262 "../src/CFCParseHeader.y"
{
    CFCParser_set_result(state, (CFCBase*)yymsp[0].minor.yy100);
    CFCBase_decref((CFCBase*)yymsp[0].minor.yy100);
}
#line 1874 "../src/CFCParseHeader.c"
        break;
      case 2: /* result ::= param_variable */
      case 6: /* result ::= var_declaration_statement */ yytestcase(yyruleno==6);
#line 267 "../src/CFCParseHeader.y"
{
    CFCParser_set_result(state, (CFCBase*)yymsp[0].minor.yy25);
    CFCBase_decref((CFCBase*)yymsp[0].minor.yy25);
}
#line 1883 "../src/CFCParseHeader.c"
        break;
      case 3: /* result ::= docucomment */
#line 272 "../src/CFCParseHeader.y"
{
    CFCParser_set_result(state, (CFCBase*)yymsp[0].minor.yy69);
    CFCBase_decref((CFCBase*)yymsp[0].minor.yy69);
}
#line 1891 "../src/CFCParseHeader.c"
        break;
      case 4: /* result ::= parcel_definition */
#line 277 "../src/CFCParseHeader.y"
{
    CFCParser_set_result(state, (CFCBase*)yymsp[0].minor.yy136);
    CFCBase_decref((CFCBase*)yymsp[0].minor.yy136);
}
#line 1899 "../src/CFCParseHeader.c"
        break;
      case 5: /* result ::= cblock */
#line 282 "../src/CFCParseHeader.y"
{
    CFCParser_set_result(state, (CFCBase*)yymsp[0].minor.yy70);
    CFCBase_decref((CFCBase*)yymsp[0].minor.yy70);
}
#line 1907 "../src/CFCParseHeader.c"
        break;
      case 7: /* result ::= subroutine_declaration_statement */
#line 292 "../src/CFCParseHeader.y"
{
    CFCParser_set_result(state, (CFCBase*)yymsp[0].minor.yy120);
    CFCBase_decref((CFCBase*)yymsp[0].minor.yy120);
}
#line 1915 "../src/CFCParseHeader.c"
        break;
      case 8: /* result ::= class_declaration */
#line 297 "../src/CFCParseHeader.y"
{
    CFCParser_set_result(state, (CFCBase*)yymsp[0].minor.yy23);
    CFCBase_decref((CFCBase*)yymsp[0].minor.yy23);
}
#line 1923 "../src/CFCParseHeader.c"
        break;
      case 9: /* result ::= file */
#line 302 "../src/CFCParseHeader.y"
{
    CFCParser_set_result(state, (CFCBase*)yymsp[0].minor.yy51);
    CFCBase_decref((CFCBase*)yymsp[0].minor.yy51);
}
#line 1931 "../src/CFCParseHeader.c"
        break;
      case 10: /* file ::= FILE_START parcel_definition */
#line 309 "../src/CFCParseHeader.y"
{
    yymsp[-1].minor.yy51 = CFCFile_new(yymsp[0].minor.yy136, CFCParser_get_file_spec(state));
    CFCBase_decref((CFCBase*)yymsp[0].minor.yy136);
}
#line 1939 "../src/CFCParseHeader.c"
        break;
      case 11: /* file ::= file major_block */
#line 314 "../src/CFCParseHeader.y"
{
    yylhsminor.yy51 = yymsp[-1].minor.yy51;
    CFCFile_add_block(yylhsminor.yy51, yymsp[0].minor.yy120);
    CFCBase_decref((CFCBase*)yymsp[0].minor.yy120);
}
#line 1948 "../src/CFCParseHeader.c"
  yymsp[-1].minor.yy51 = yylhsminor.yy51;
        break;
      case 12: /* major_block ::= class_declaration */
#line 320 "../src/CFCParseHeader.y"
{ yylhsminor.yy120 = (CFCBase*)yymsp[0].minor.yy23; }
#line 1954 "../src/CFCParseHeader.c"
  yymsp[0].minor.yy120 = yylhsminor.yy120;
        break;
      case 13: /* major_block ::= cblock */
#line 321 "../src/CFCParseHeader.y"
{ yylhsminor.yy120 = (CFCBase*)yymsp[0].minor.yy70; }
#line 1960 "../src/CFCParseHeader.c"
  yymsp[0].minor.yy120 = yylhsminor.yy120;
        break;
      case 14: /* parcel_definition ::= PARCEL qualified_id SEMICOLON */
#line 324 "../src/CFCParseHeader.y"
{
    yymsp[-2].minor.yy136 = CFCParcel_fetch(yymsp[-1].minor.yy0);
    if (!yymsp[-2].minor.yy136) {
        /* Allow unregistered parcels to simplify tests. */
        yymsp[-2].minor.yy136 = CFCParcel_new(yymsp[-1].minor.yy0, NULL, NULL, NULL, NULL);
        CFCParcel_register(yymsp[-2].minor.yy136);
    }
    else {
        CFCBase_incref((CFCBase*)yymsp[-2].minor.yy136);
    }
    CFCParser_set_parcel(state, yymsp[-2].minor.yy136);
}
#line 1977 "../src/CFCParseHeader.c"
        break;
      case 15: /* class_declaration ::= class_defs RIGHT_CURLY_BRACE */
#line 338 "../src/CFCParseHeader.y"
{
    yylhsminor.yy23 = yymsp[-1].minor.yy23;
    CFCParser_set_class_name(state, NULL);
}
#line 1985 "../src/CFCParseHeader.c"
  yymsp[-1].minor.yy23 = yylhsminor.yy23;
        break;
      case 16: /* class_head ::= docucomment exposure_specifier declaration_modifier_list CLASS qualified_id nickname class_inheritance */
#line 343 "../src/CFCParseHeader.y"
{ yylhsminor.yy23 = S_start_class(state, yymsp[-6].minor.yy69,    yymsp[-5].minor.yy0,    yymsp[-4].minor.yy0,    yymsp[-2].minor.yy0,    yymsp[-1].minor.yy0,    yymsp[0].minor.yy0   ); }
#line 1991 "../src/CFCParseHeader.c"
  yymsp[-6].minor.yy23 = yylhsminor.yy23;
        break;
      case 17: /* class_head ::= exposure_specifier declaration_modifier_list CLASS qualified_id nickname class_inheritance */
#line 344 "../src/CFCParseHeader.y"
{ yylhsminor.yy23 = S_start_class(state, NULL, yymsp[-5].minor.yy0,    yymsp[-4].minor.yy0,    yymsp[-2].minor.yy0,    yymsp[-1].minor.yy0,    yymsp[0].minor.yy0   ); }
#line 1997 "../src/CFCParseHeader.c"
  yymsp[-5].minor.yy23 = yylhsminor.yy23;
        break;
      case 18: /* class_head ::= docucomment declaration_modifier_list CLASS qualified_id nickname class_inheritance */
#line 345 "../src/CFCParseHeader.y"
{ yylhsminor.yy23 = S_start_class(state, yymsp[-5].minor.yy69,    NULL, yymsp[-4].minor.yy0,    yymsp[-2].minor.yy0,    yymsp[-1].minor.yy0,    yymsp[0].minor.yy0   ); }
#line 2003 "../src/CFCParseHeader.c"
  yymsp[-5].minor.yy23 = yylhsminor.yy23;
        break;
      case 19: /* class_head ::= declaration_modifier_list CLASS qualified_id nickname class_inheritance */
#line 346 "../src/CFCParseHeader.y"
{ yylhsminor.yy23 = S_start_class(state, NULL, NULL, yymsp[-4].minor.yy0,    yymsp[-2].minor.yy0,    yymsp[-1].minor.yy0,    yymsp[0].minor.yy0   ); }
#line 2009 "../src/CFCParseHeader.c"
  yymsp[-4].minor.yy23 = yylhsminor.yy23;
        break;
      case 20: /* class_head ::= docucomment exposure_specifier CLASS qualified_id nickname class_inheritance */
#line 347 "../src/CFCParseHeader.y"
{ yylhsminor.yy23 = S_start_class(state, yymsp[-5].minor.yy69,    yymsp[-4].minor.yy0,    NULL, yymsp[-2].minor.yy0,    yymsp[-1].minor.yy0,    yymsp[0].minor.yy0   ); }
#line 2015 "../src/CFCParseHeader.c"
  yymsp[-5].minor.yy23 = yylhsminor.yy23;
        break;
      case 21: /* class_head ::= exposure_specifier CLASS qualified_id nickname class_inheritance */
#line 348 "../src/CFCParseHeader.y"
{ yylhsminor.yy23 = S_start_class(state, NULL, yymsp[-4].minor.yy0,    NULL, yymsp[-2].minor.yy0,    yymsp[-1].minor.yy0,    yymsp[0].minor.yy0   ); }
#line 2021 "../src/CFCParseHeader.c"
  yymsp[-4].minor.yy23 = yylhsminor.yy23;
        break;
      case 22: /* class_head ::= docucomment CLASS qualified_id nickname class_inheritance */
#line 349 "../src/CFCParseHeader.y"
{ yylhsminor.yy23 = S_start_class(state, yymsp[-4].minor.yy69,    NULL, NULL, yymsp[-2].minor.yy0,    yymsp[-1].minor.yy0,    yymsp[0].minor.yy0   ); }
#line 2027 "../src/CFCParseHeader.c"
  yymsp[-4].minor.yy23 = yylhsminor.yy23;
        break;
      case 23: /* class_head ::= CLASS qualified_id nickname class_inheritance */
#line 350 "../src/CFCParseHeader.y"
{ yymsp[-3].minor.yy23 = S_start_class(state, NULL, NULL, NULL, yymsp[-2].minor.yy0,    yymsp[-1].minor.yy0,    yymsp[0].minor.yy0   ); }
#line 2033 "../src/CFCParseHeader.c"
        break;
      case 24: /* class_head ::= docucomment exposure_specifier declaration_modifier_list CLASS qualified_id class_inheritance */
#line 351 "../src/CFCParseHeader.y"
{ yylhsminor.yy23 = S_start_class(state, yymsp[-5].minor.yy69,    yymsp[-4].minor.yy0,    yymsp[-3].minor.yy0,    yymsp[-1].minor.yy0,    NULL, yymsp[0].minor.yy0   ); }
#line 2038 "../src/CFCParseHeader.c"
  yymsp[-5].minor.yy23 = yylhsminor.yy23;
        break;
      case 25: /* class_head ::= exposure_specifier declaration_modifier_list CLASS qualified_id class_inheritance */
#line 352 "../src/CFCParseHeader.y"
{ yylhsminor.yy23 = S_start_class(state, NULL, yymsp[-4].minor.yy0,    yymsp[-3].minor.yy0,    yymsp[-1].minor.yy0,    NULL, yymsp[0].minor.yy0   ); }
#line 2044 "../src/CFCParseHeader.c"
  yymsp[-4].minor.yy23 = yylhsminor.yy23;
        break;
      case 26: /* class_head ::= docucomment declaration_modifier_list CLASS qualified_id class_inheritance */
#line 353 "../src/CFCParseHeader.y"
{ yylhsminor.yy23 = S_start_class(state, yymsp[-4].minor.yy69,    NULL, yymsp[-3].minor.yy0,    yymsp[-1].minor.yy0,    NULL, yymsp[0].minor.yy0   ); }
#line 2050 "../src/CFCParseHeader.c"
  yymsp[-4].minor.yy23 = yylhsminor.yy23;
        break;
      case 27: /* class_head ::= declaration_modifier_list CLASS qualified_id class_inheritance */
#line 354 "../src/CFCParseHeader.y"
{ yylhsminor.yy23 = S_start_class(state, NULL, NULL, yymsp[-3].minor.yy0,    yymsp[-1].minor.yy0,    NULL, yymsp[0].minor.yy0   ); }
#line 2056 "../src/CFCParseHeader.c"
  yymsp[-3].minor.yy23 = yylhsminor.yy23;
        break;
      case 28: /* class_head ::= docucomment exposure_specifier CLASS qualified_id class_inheritance */
#line 355 "../src/CFCParseHeader.y"
{ yylhsminor.yy23 = S_start_class(state, yymsp[-4].minor.yy69,    yymsp[-3].minor.yy0,    NULL, yymsp[-1].minor.yy0,    NULL, yymsp[0].minor.yy0   ); }
#line 2062 "../src/CFCParseHeader.c"
  yymsp[-4].minor.yy23 = yylhsminor.yy23;
        break;
      case 29: /* class_head ::= exposure_specifier CLASS qualified_id class_inheritance */
#line 356 "../src/CFCParseHeader.y"
{ yylhsminor.yy23 = S_start_class(state, NULL, yymsp[-3].minor.yy0,    NULL, yymsp[-1].minor.yy0,    NULL, yymsp[0].minor.yy0   ); }
#line 2068 "../src/CFCParseHeader.c"
  yymsp[-3].minor.yy23 = yylhsminor.yy23;
        break;
      case 30: /* class_head ::= docucomment CLASS qualified_id class_inheritance */
#line 357 "../src/CFCParseHeader.y"
{ yylhsminor.yy23 = S_start_class(state, yymsp[-3].minor.yy69,    NULL, NULL, yymsp[-1].minor.yy0,    NULL, yymsp[0].minor.yy0   ); }
#line 2074 "../src/CFCParseHeader.c"
  yymsp[-3].minor.yy23 = yylhsminor.yy23;
        break;
      case 31: /* class_head ::= CLASS qualified_id class_inheritance */
#line 358 "../src/CFCParseHeader.y"
{ yymsp[-2].minor.yy23 = S_start_class(state, NULL, NULL, NULL, yymsp[-1].minor.yy0,    NULL, yymsp[0].minor.yy0   ); }
#line 2080 "../src/CFCParseHeader.c"
        break;
      case 32: /* class_head ::= docucomment exposure_specifier declaration_modifier_list CLASS qualified_id nickname */
#line 359 "../src/CFCParseHeader.y"
{ yylhsminor.yy23 = S_start_class(state, yymsp[-5].minor.yy69,    yymsp[-4].minor.yy0,    yymsp[-3].minor.yy0,    yymsp[-1].minor.yy0,    yymsp[0].minor.yy0,    NULL ); }
#line 2085 "../src/CFCParseHeader.c"
  yymsp[-5].minor.yy23 = yylhsminor.yy23;
        break;
      case 33: /* class_head ::= exposure_specifier declaration_modifier_list CLASS qualified_id nickname */
#line 360 "../src/CFCParseHeader.y"
{ yylhsminor.yy23 = S_start_class(state, NULL, yymsp[-4].minor.yy0,    yymsp[-3].minor.yy0,    yymsp[-1].minor.yy0,    yymsp[0].minor.yy0,    NULL ); }
#line 2091 "../src/CFCParseHeader.c"
  yymsp[-4].minor.yy23 = yylhsminor.yy23;
        break;
      case 34: /* class_head ::= docucomment declaration_modifier_list CLASS qualified_id nickname */
#line 361 "../src/CFCParseHeader.y"
{ yylhsminor.yy23 = S_start_class(state, yymsp[-4].minor.yy69,    NULL, yymsp[-3].minor.yy0,    yymsp[-1].minor.yy0,    yymsp[0].minor.yy0,    NULL ); }
#line 2097 "../src/CFCParseHeader.c"
  yymsp[-4].minor.yy23 = yylhsminor.yy23;
        break;
      case 35: /* class_head ::= declaration_modifier_list CLASS qualified_id nickname */
#line 362 "../src/CFCParseHeader.y"
{ yylhsminor.yy23 = S_start_class(state, NULL, NULL, yymsp[-3].minor.yy0,    yymsp[-1].minor.yy0,    yymsp[0].minor.yy0,    NULL ); }
#line 2103 "../src/CFCParseHeader.c"
  yymsp[-3].minor.yy23 = yylhsminor.yy23;
        break;
      case 36: /* class_head ::= docucomment exposure_specifier CLASS qualified_id nickname */
#line 363 "../src/CFCParseHeader.y"
{ yylhsminor.yy23 = S_start_class(state, yymsp[-4].minor.yy69,    yymsp[-3].minor.yy0,    NULL, yymsp[-1].minor.yy0,    yymsp[0].minor.yy0,    NULL ); }
#line 2109 "../src/CFCParseHeader.c"
  yymsp[-4].minor.yy23 = yylhsminor.yy23;
        break;
      case 37: /* class_head ::= exposure_specifier CLASS qualified_id nickname */
#line 364 "../src/CFCParseHeader.y"
{ yylhsminor.yy23 = S_start_class(state, NULL, yymsp[-3].minor.yy0,    NULL, yymsp[-1].minor.yy0,    yymsp[0].minor.yy0,    NULL ); }
#line 2115 "../src/CFCParseHeader.c"
  yymsp[-3].minor.yy23 = yylhsminor.yy23;
        break;
      case 38: /* class_head ::= docucomment CLASS qualified_id nickname */
#line 365 "../src/CFCParseHeader.y"
{ yylhsminor.yy23 = S_start_class(state, yymsp[-3].minor.yy69,    NULL, NULL, yymsp[-1].minor.yy0,    yymsp[0].minor.yy0,    NULL ); }
#line 2121 "../src/CFCParseHeader.c"
  yymsp[-3].minor.yy23 = yylhsminor.yy23;
        break;
      case 39: /* class_head ::= CLASS qualified_id nickname */
#line 366 "../src/CFCParseHeader.y"
{ yymsp[-2].minor.yy23 = S_start_class(state, NULL, NULL, NULL, yymsp[-1].minor.yy0,    yymsp[0].minor.yy0,    NULL ); }
#line 2127 "../src/CFCParseHeader.c"
        break;
      case 40: /* class_head ::= docucomment exposure_specifier declaration_modifier_list CLASS qualified_id */
#line 367 "../src/CFCParseHeader.y"
{ yylhsminor.yy23 = S_start_class(state, yymsp[-4].minor.yy69,    yymsp[-3].minor.yy0,    yymsp[-2].minor.yy0,    yymsp[0].minor.yy0,    NULL, NULL ); }
#line 2132 "../src/CFCParseHeader.c"
  yymsp[-4].minor.yy23 = yylhsminor.yy23;
        break;
      case 41: /* class_head ::= exposure_specifier declaration_modifier_list CLASS qualified_id */
#line 368 "../src/CFCParseHeader.y"
{ yylhsminor.yy23 = S_start_class(state, NULL, yymsp[-3].minor.yy0,    yymsp[-2].minor.yy0,    yymsp[0].minor.yy0,    NULL, NULL ); }
#line 2138 "../src/CFCParseHeader.c"
  yymsp[-3].minor.yy23 = yylhsminor.yy23;
        break;
      case 42: /* class_head ::= docucomment declaration_modifier_list CLASS qualified_id */
#line 369 "../src/CFCParseHeader.y"
{ yylhsminor.yy23 = S_start_class(state, yymsp[-3].minor.yy69,    NULL, yymsp[-2].minor.yy0,    yymsp[0].minor.yy0,    NULL, NULL ); }
#line 2144 "../src/CFCParseHeader.c"
  yymsp[-3].minor.yy23 = yylhsminor.yy23;
        break;
      case 43: /* class_head ::= declaration_modifier_list CLASS qualified_id */
#line 370 "../src/CFCParseHeader.y"
{ yylhsminor.yy23 = S_start_class(state, NULL, NULL, yymsp[-2].minor.yy0,    yymsp[0].minor.yy0,    NULL, NULL ); }
#line 2150 "../src/CFCParseHeader.c"
  yymsp[-2].minor.yy23 = yylhsminor.yy23;
        break;
      case 44: /* class_head ::= docucomment exposure_specifier CLASS qualified_id */
#line 371 "../src/CFCParseHeader.y"
{ yylhsminor.yy23 = S_start_class(state, yymsp[-3].minor.yy69,    yymsp[-2].minor.yy0,    NULL, yymsp[0].minor.yy0,    NULL, NULL ); }
#line 2156 "../src/CFCParseHeader.c"
  yymsp[-3].minor.yy23 = yylhsminor.yy23;
        break;
      case 45: /* class_head ::= exposure_specifier CLASS qualified_id */
#line 372 "../src/CFCParseHeader.y"
{ yylhsminor.yy23 = S_start_class(state, NULL, yymsp[-2].minor.yy0,    NULL, yymsp[0].minor.yy0,    NULL, NULL ); }
#line 2162 "../src/CFCParseHeader.c"
  yymsp[-2].minor.yy23 = yylhsminor.yy23;
        break;
      case 46: /* class_head ::= docucomment CLASS qualified_id */
#line 373 "../src/CFCParseHeader.y"
{ yylhsminor.yy23 = S_start_class(state, yymsp[-2].minor.yy69,    NULL, NULL, yymsp[0].minor.yy0,    NULL, NULL ); }
#line 2168 "../src/CFCParseHeader.c"
  yymsp[-2].minor.yy23 = yylhsminor.yy23;
        break;
      case 47: /* class_head ::= CLASS qualified_id */
#line 374 "../src/CFCParseHeader.y"
{ yymsp[-1].minor.yy23 = S_start_class(state, NULL, NULL, NULL, yymsp[0].minor.yy0,    NULL, NULL ); }
#line 2174 "../src/CFCParseHeader.c"
        break;
      case 48: /* class_defs ::= class_head LEFT_CURLY_BRACE */
#line 377 "../src/CFCParseHeader.y"
{
    yylhsminor.yy23 = yymsp[-1].minor.yy23;
}
#line 2181 "../src/CFCParseHeader.c"
  yymsp[-1].minor.yy23 = yylhsminor.yy23;
        break;
      case 49: /* class_defs ::= class_defs var_declaration_statement */
#line 381 "../src/CFCParseHeader.y"
{
    yylhsminor.yy23 = yymsp[-1].minor.yy23;
    if (CFCVariable_inert(yymsp[0].minor.yy25)) {
        CFCClass_add_inert_var(yylhsminor.yy23, yymsp[0].minor.yy25);
    }
    else {
        CFCClass_add_member_var(yylhsminor.yy23, yymsp[0].minor.yy25);
    }
    CFCBase_decref((CFCBase*)yymsp[0].minor.yy25);
}
#line 2196 "../src/CFCParseHeader.c"
  yymsp[-1].minor.yy23 = yylhsminor.yy23;
        break;
      case 50: /* class_defs ::= class_defs subroutine_declaration_statement */
#line 392 "../src/CFCParseHeader.y"
{
    yylhsminor.yy23 = yymsp[-1].minor.yy23;
    if (strcmp(CFCBase_get_cfc_class(yymsp[0].minor.yy120), "Clownfish::CFC::Model::Function") == 0) {
        CFCClass_add_function(yylhsminor.yy23, (CFCFunction*)yymsp[0].minor.yy120);
    }
    else {
        CFCClass_add_method(yylhsminor.yy23, (CFCMethod*)yymsp[0].minor.yy120);
    }
    CFCBase_decref((CFCBase*)yymsp[0].minor.yy120);
}
#line 2211 "../src/CFCParseHeader.c"
  yymsp[-1].minor.yy23 = yylhsminor.yy23;
        break;
      case 51: /* var_declaration_statement ::= type declarator SEMICOLON */
#line 405 "../src/CFCParseHeader.y"
{
    yylhsminor.yy25 = S_new_var(CFCParser_dupe(state, "private"), NULL, yymsp[-2].minor.yy139, yymsp[-1].minor.yy0);
}
#line 2219 "../src/CFCParseHeader.c"
  yymsp[-2].minor.yy25 = yylhsminor.yy25;
        break;
      case 52: /* var_declaration_statement ::= declaration_modifier_list type declarator SEMICOLON */
#line 411 "../src/CFCParseHeader.y"
{
    yylhsminor.yy25 = S_new_var(CFCParser_dupe(state, "parcel"), yymsp[-3].minor.yy0, yymsp[-2].minor.yy139, yymsp[-1].minor.yy0);
}
#line 2227 "../src/CFCParseHeader.c"
  yymsp[-3].minor.yy25 = yylhsminor.yy25;
        break;
      case 53: /* var_declaration_statement ::= exposure_specifier declaration_modifier_list type declarator SEMICOLON */
#line 418 "../src/CFCParseHeader.y"
{
    yylhsminor.yy25 = S_new_var(yymsp[-4].minor.yy0, yymsp[-3].minor.yy0, yymsp[-2].minor.yy139, yymsp[-1].minor.yy0);
}
#line 2235 "../src/CFCParseHeader.c"
  yymsp[-4].minor.yy25 = yylhsminor.yy25;
        break;
      case 54: /* subroutine_declaration_statement ::= type declarator param_list SEMICOLON */
#line 424 "../src/CFCParseHeader.y"
{
    yylhsminor.yy120 = S_new_sub(state, NULL, NULL, NULL, yymsp[-3].minor.yy139, yymsp[-2].minor.yy0, yymsp[-1].minor.yy100);
}
#line 2243 "../src/CFCParseHeader.c"
  yymsp[-3].minor.yy120 = yylhsminor.yy120;
        break;
      case 55: /* subroutine_declaration_statement ::= declaration_modifier_list type declarator param_list SEMICOLON */
#line 430 "../src/CFCParseHeader.y"
{
    yylhsminor.yy120 = S_new_sub(state, NULL, NULL, yymsp[-4].minor.yy0, yymsp[-3].minor.yy139, yymsp[-2].minor.yy0, yymsp[-1].minor.yy100);
}
#line 2251 "../src/CFCParseHeader.c"
  yymsp[-4].minor.yy120 = yylhsminor.yy120;
        break;
      case 56: /* subroutine_declaration_statement ::= exposure_specifier declaration_modifier_list type declarator param_list SEMICOLON */
#line 437 "../src/CFCParseHeader.y"
{
    yylhsminor.yy120 = S_new_sub(state, NULL, yymsp[-5].minor.yy0, yymsp[-4].minor.yy0, yymsp[-3].minor.yy139, yymsp[-2].minor.yy0, yymsp[-1].minor.yy100);
}
#line 2259 "../src/CFCParseHeader.c"
  yymsp[-5].minor.yy120 = yylhsminor.yy120;
        break;
      case 57: /* subroutine_declaration_statement ::= exposure_specifier type declarator param_list SEMICOLON */
#line 443 "../src/CFCParseHeader.y"
{
    yylhsminor.yy120 = S_new_sub(state, NULL, yymsp[-4].minor.yy0, NULL, yymsp[-3].minor.yy139, yymsp[-2].minor.yy0, yymsp[-1].minor.yy100);
}
#line 2267 "../src/CFCParseHeader.c"
  yymsp[-4].minor.yy120 = yylhsminor.yy120;
        break;
      case 58: /* subroutine_declaration_statement ::= docucomment type declarator param_list SEMICOLON */
#line 449 "../src/CFCParseHeader.y"
{
    yylhsminor.yy120 = S_new_sub(state, yymsp[-4].minor.yy69, NULL, NULL, yymsp[-3].minor.yy139, yymsp[-2].minor.yy0, yymsp[-1].minor.yy100);
}
#line 2275 "../src/CFCParseHeader.c"
  yymsp[-4].minor.yy120 = yylhsminor.yy120;
        break;
      case 59: /* subroutine_declaration_statement ::= docucomment declaration_modifier_list type declarator param_list SEMICOLON */
#line 456 "../src/CFCParseHeader.y"
{
    yylhsminor.yy120 = S_new_sub(state, yymsp[-5].minor.yy69, NULL, yymsp[-4].minor.yy0, yymsp[-3].minor.yy139, yymsp[-2].minor.yy0, yymsp[-1].minor.yy100);
}
#line 2283 "../src/CFCParseHeader.c"
  yymsp[-5].minor.yy120 = yylhsminor.yy120;
        break;
      case 60: /* subroutine_declaration_statement ::= docucomment exposure_specifier declaration_modifier_list type declarator param_list SEMICOLON */
#line 464 "../src/CFCParseHeader.y"
{
    yylhsminor.yy120 = S_new_sub(state, yymsp[-6].minor.yy69, yymsp[-5].minor.yy0, yymsp[-4].minor.yy0, yymsp[-3].minor.yy139, yymsp[-2].minor.yy0, yymsp[-1].minor.yy100);
}
#line 2291 "../src/CFCParseHeader.c"
  yymsp[-6].minor.yy120 = yylhsminor.yy120;
        break;
      case 61: /* subroutine_declaration_statement ::= docucomment exposure_specifier type declarator param_list SEMICOLON */
#line 471 "../src/CFCParseHeader.y"
{
    yylhsminor.yy120 = S_new_sub(state, yymsp[-5].minor.yy69, yymsp[-4].minor.yy0, NULL, yymsp[-3].minor.yy139, yymsp[-2].minor.yy0, yymsp[-1].minor.yy100);
}
#line 2299 "../src/CFCParseHeader.c"
  yymsp[-5].minor.yy120 = yylhsminor.yy120;
        break;
      case 62: /* type ::= type_name */
#line 476 "../src/CFCParseHeader.y"
{
    yylhsminor.yy139 = S_new_type(state, 0, yymsp[0].minor.yy0, NULL, NULL);
}
#line 2307 "../src/CFCParseHeader.c"
  yymsp[0].minor.yy139 = yylhsminor.yy139;
        break;
      case 63: /* type ::= type_name asterisk_postfix */
#line 480 "../src/CFCParseHeader.y"
{
    yylhsminor.yy139 = S_new_type(state, 0, yymsp[-1].minor.yy0, yymsp[0].minor.yy0, NULL);
}
#line 2315 "../src/CFCParseHeader.c"
  yymsp[-1].minor.yy139 = yylhsminor.yy139;
        break;
      case 64: /* type ::= type_name array_postfix */
#line 484 "../src/CFCParseHeader.y"
{
    yylhsminor.yy139 = S_new_type(state, 0, yymsp[-1].minor.yy0, NULL, yymsp[0].minor.yy0);
}
#line 2323 "../src/CFCParseHeader.c"
  yymsp[-1].minor.yy139 = yylhsminor.yy139;
        break;
      case 65: /* type ::= type_qualifier_list type_name */
#line 488 "../src/CFCParseHeader.y"
{
    yylhsminor.yy139 = S_new_type(state, yymsp[-1].minor.yy132, yymsp[0].minor.yy0, NULL, NULL);
}
#line 2331 "../src/CFCParseHeader.c"
  yymsp[-1].minor.yy139 = yylhsminor.yy139;
        break;
      case 66: /* type ::= type_qualifier_list type_name asterisk_postfix */
#line 492 "../src/CFCParseHeader.y"
{
    yylhsminor.yy139 = S_new_type(state, yymsp[-2].minor.yy132, yymsp[-1].minor.yy0, yymsp[0].minor.yy0, NULL);
}
#line 2339 "../src/CFCParseHeader.c"
  yymsp[-2].minor.yy139 = yylhsminor.yy139;
        break;
      case 67: /* type ::= type_qualifier_list type_name array_postfix */
#line 496 "../src/CFCParseHeader.y"
{
    yylhsminor.yy139 = S_new_type(state, yymsp[-2].minor.yy132, yymsp[-1].minor.yy0, NULL, yymsp[0].minor.yy0);
}
#line 2347 "../src/CFCParseHeader.c"
  yymsp[-2].minor.yy139 = yylhsminor.yy139;
        break;
      case 68: /* type_name ::= VOID */
      case 69: /* type_name ::= VA_LIST */ yytestcase(yyruleno==69);
      case 70: /* type_name ::= INTEGER_TYPE_NAME */ yytestcase(yyruleno==70);
      case 71: /* type_name ::= FLOAT_TYPE_NAME */ yytestcase(yyruleno==71);
      case 72: /* type_name ::= IDENTIFIER */ yytestcase(yyruleno==72);
      case 73: /* exposure_specifier ::= PUBLIC */ yytestcase(yyruleno==73);
      case 80: /* declaration_modifier ::= INERT */ yytestcase(yyruleno==80);
      case 81: /* declaration_modifier ::= INLINE */ yytestcase(yyruleno==81);
      case 82: /* declaration_modifier ::= ABSTRACT */ yytestcase(yyruleno==82);
      case 83: /* declaration_modifier ::= FINAL */ yytestcase(yyruleno==83);
      case 84: /* declaration_modifier_list ::= declaration_modifier */ yytestcase(yyruleno==84);
      case 86: /* asterisk_postfix ::= ASTERISK */ yytestcase(yyruleno==86);
      case 90: /* array_postfix ::= array_postfix_elem */ yytestcase(yyruleno==90);
      case 92: /* scalar_constant ::= HEX_LITERAL */ yytestcase(yyruleno==92);
      case 93: /* scalar_constant ::= FLOAT_LITERAL */ yytestcase(yyruleno==93);
      case 94: /* scalar_constant ::= INTEGER_LITERAL */ yytestcase(yyruleno==94);
      case 95: /* scalar_constant ::= STRING_LITERAL */ yytestcase(yyruleno==95);
      case 96: /* scalar_constant ::= TRUE */ yytestcase(yyruleno==96);
      case 97: /* scalar_constant ::= FALSE */ yytestcase(yyruleno==97);
      case 98: /* scalar_constant ::= NULL */ yytestcase(yyruleno==98);
      case 108: /* qualified_id ::= IDENTIFIER */ yytestcase(yyruleno==108);
      case 115: /* blob ::= BLOB */ yytestcase(yyruleno==115);
#line 500 "../src/CFCParseHeader.y"
{ yylhsminor.yy0 = yymsp[0].minor.yy0; }
#line 2374 "../src/CFCParseHeader.c"
  yymsp[0].minor.yy0 = yylhsminor.yy0;
        break;
      case 74: /* type_qualifier ::= CONST */
#line 508 "../src/CFCParseHeader.y"
{ yymsp[0].minor.yy132 = CFCTYPE_CONST; }
#line 2380 "../src/CFCParseHeader.c"
        break;
      case 75: /* type_qualifier ::= NULLABLE */
#line 509 "../src/CFCParseHeader.y"
{ yymsp[0].minor.yy132 = CFCTYPE_NULLABLE; }
#line 2385 "../src/CFCParseHeader.c"
        break;
      case 76: /* type_qualifier ::= INCREMENTED */
#line 510 "../src/CFCParseHeader.y"
{ yymsp[0].minor.yy132 = CFCTYPE_INCREMENTED; }
#line 2390 "../src/CFCParseHeader.c"
        break;
      case 77: /* type_qualifier ::= DECREMENTED */
#line 511 "../src/CFCParseHeader.y"
{ yymsp[0].minor.yy132 = CFCTYPE_DECREMENTED; }
#line 2395 "../src/CFCParseHeader.c"
        break;
      case 78: /* type_qualifier_list ::= type_qualifier */
#line 514 "../src/CFCParseHeader.y"
{
    yylhsminor.yy132 = yymsp[0].minor.yy132;
}
#line 2402 "../src/CFCParseHeader.c"
  yymsp[0].minor.yy132 = yylhsminor.yy132;
        break;
      case 79: /* type_qualifier_list ::= type_qualifier_list type_qualifier */
#line 518 "../src/CFCParseHeader.y"
{
    yylhsminor.yy132 = yymsp[-1].minor.yy132;
    yylhsminor.yy132 |= yymsp[0].minor.yy132;
}
#line 2411 "../src/CFCParseHeader.c"
  yymsp[-1].minor.yy132 = yylhsminor.yy132;
        break;
      case 85: /* declaration_modifier_list ::= declaration_modifier_list declaration_modifier */
#line 530 "../src/CFCParseHeader.y"
{
    size_t size = strlen(yymsp[-1].minor.yy0) + strlen(yymsp[0].minor.yy0) + 2;
    yylhsminor.yy0 = (char*)CFCParser_allocate(state, size);
    sprintf(yylhsminor.yy0, "%s %s", yymsp[-1].minor.yy0, yymsp[0].minor.yy0);
}
#line 2421 "../src/CFCParseHeader.c"
  yymsp[-1].minor.yy0 = yylhsminor.yy0;
        break;
      case 87: /* asterisk_postfix ::= asterisk_postfix ASTERISK */
#line 538 "../src/CFCParseHeader.y"
{
    size_t size = strlen(yymsp[-1].minor.yy0) + 2;
    yylhsminor.yy0 = (char*)CFCParser_allocate(state, size);
    sprintf(yylhsminor.yy0, "%s*", yymsp[-1].minor.yy0);
}
#line 2431 "../src/CFCParseHeader.c"
  yymsp[-1].minor.yy0 = yylhsminor.yy0;
        break;
      case 88: /* array_postfix_elem ::= LEFT_SQUARE_BRACKET RIGHT_SQUARE_BRACKET */
#line 545 "../src/CFCParseHeader.y"
{
    yymsp[-1].minor.yy0 = CFCParser_dupe(state, "[]");
}
#line 2439 "../src/CFCParseHeader.c"
        break;
      case 89: /* array_postfix_elem ::= LEFT_SQUARE_BRACKET INTEGER_LITERAL RIGHT_SQUARE_BRACKET */
#line 549 "../src/CFCParseHeader.y"
{
    size_t size = strlen(yymsp[-1].minor.yy0) + 3;
    yymsp[-2].minor.yy0 = (char*)CFCParser_allocate(state, size);
    sprintf(yymsp[-2].minor.yy0, "[%s]", yymsp[-1].minor.yy0);
}
#line 2448 "../src/CFCParseHeader.c"
        break;
      case 91: /* array_postfix ::= array_postfix array_postfix_elem */
      case 116: /* blob ::= blob BLOB */ yytestcase(yyruleno==116);
#line 557 "../src/CFCParseHeader.y"
{
    size_t size = strlen(yymsp[-1].minor.yy0) + strlen(yymsp[0].minor.yy0) + 1;
    yylhsminor.yy0 = (char*)CFCParser_allocate(state, size);
    sprintf(yylhsminor.yy0, "%s%s", yymsp[-1].minor.yy0, yymsp[0].minor.yy0);
}
#line 2458 "../src/CFCParseHeader.c"
  yymsp[-1].minor.yy0 = yylhsminor.yy0;
        break;
      case 99: /* declarator ::= IDENTIFIER */
#line 572 "../src/CFCParseHeader.y"
{
    yylhsminor.yy0 = yymsp[0].minor.yy0;
}
#line 2466 "../src/CFCParseHeader.c"
  yymsp[0].minor.yy0 = yylhsminor.yy0;
        break;
      case 100: /* param_variable ::= type declarator */
#line 577 "../src/CFCParseHeader.y"
{
    yylhsminor.yy25 = S_new_var(NULL, NULL, yymsp[-1].minor.yy139, yymsp[0].minor.yy0);
}
#line 2474 "../src/CFCParseHeader.c"
  yymsp[-1].minor.yy25 = yylhsminor.yy25;
        break;
      case 101: /* param_list ::= LEFT_PAREN RIGHT_PAREN */
#line 582 "../src/CFCParseHeader.y"
{
    yymsp[-1].minor.yy100 = CFCParamList_new(false);
}
#line 2482 "../src/CFCParseHeader.c"
        break;
      case 102: /* param_list ::= LEFT_PAREN param_list_elems RIGHT_PAREN */
#line 586 "../src/CFCParseHeader.y"
{
    yymsp[-2].minor.yy100 = yymsp[-1].minor.yy100;
}
#line 2489 "../src/CFCParseHeader.c"
        break;
      case 103: /* param_list ::= LEFT_PAREN param_list_elems COMMA ELLIPSIS RIGHT_PAREN */
#line 590 "../src/CFCParseHeader.y"
{
    yymsp[-4].minor.yy100 = yymsp[-3].minor.yy100;
    CFCParamList_set_variadic(yymsp[-4].minor.yy100, true);
}
#line 2497 "../src/CFCParseHeader.c"
        break;
      case 104: /* param_list_elems ::= param_list_elems COMMA param_variable */
#line 595 "../src/CFCParseHeader.y"
{
    yylhsminor.yy100 = yymsp[-2].minor.yy100;
    CFCParamList_add_param(yylhsminor.yy100, yymsp[0].minor.yy25, NULL);
    CFCBase_decref((CFCBase*)yymsp[0].minor.yy25);
}
#line 2506 "../src/CFCParseHeader.c"
  yymsp[-2].minor.yy100 = yylhsminor.yy100;
        break;
      case 105: /* param_list_elems ::= param_list_elems COMMA param_variable EQUALS scalar_constant */
#line 601 "../src/CFCParseHeader.y"
{
    yylhsminor.yy100 = yymsp[-4].minor.yy100;
    CFCParamList_add_param(yylhsminor.yy100, yymsp[-2].minor.yy25, yymsp[0].minor.yy0);
    CFCBase_decref((CFCBase*)yymsp[-2].minor.yy25);
}
#line 2516 "../src/CFCParseHeader.c"
  yymsp[-4].minor.yy100 = yylhsminor.yy100;
        break;
      case 106: /* param_list_elems ::= param_variable */
#line 607 "../src/CFCParseHeader.y"
{
    yylhsminor.yy100 = CFCParamList_new(false);
    CFCParamList_add_param(yylhsminor.yy100, yymsp[0].minor.yy25, NULL);
    CFCBase_decref((CFCBase*)yymsp[0].minor.yy25);
}
#line 2526 "../src/CFCParseHeader.c"
  yymsp[0].minor.yy100 = yylhsminor.yy100;
        break;
      case 107: /* param_list_elems ::= param_variable EQUALS scalar_constant */
#line 613 "../src/CFCParseHeader.y"
{
    yylhsminor.yy100 = CFCParamList_new(false);
    CFCParamList_add_param(yylhsminor.yy100, yymsp[-2].minor.yy25, yymsp[0].minor.yy0);
    CFCBase_decref((CFCBase*)yymsp[-2].minor.yy25);
}
#line 2536 "../src/CFCParseHeader.c"
  yymsp[-2].minor.yy100 = yylhsminor.yy100;
        break;
      case 109: /* qualified_id ::= qualified_id SCOPE_OP IDENTIFIER */
#line 621 "../src/CFCParseHeader.y"
{
    size_t size = strlen(yymsp[-2].minor.yy0) + strlen(yymsp[0].minor.yy0) + 3;
    yylhsminor.yy0 = (char*)CFCParser_allocate(state, size);
    sprintf(yylhsminor.yy0, "%s::%s", yymsp[-2].minor.yy0, yymsp[0].minor.yy0);
}
#line 2546 "../src/CFCParseHeader.c"
  yymsp[-2].minor.yy0 = yylhsminor.yy0;
        break;
      case 110: /* docucomment ::= DOCUCOMMENT */
#line 627 "../src/CFCParseHeader.y"
{ yylhsminor.yy69 = CFCDocuComment_parse(yymsp[0].minor.yy0); }
#line 2552 "../src/CFCParseHeader.c"
  yymsp[0].minor.yy69 = yylhsminor.yy69;
        break;
      case 111: /* class_inheritance ::= INHERITS qualified_id */
      case 112: /* nickname ::= NICKNAME IDENTIFIER */ yytestcase(yyruleno==112);
#line 628 "../src/CFCParseHeader.y"
{ yymsp[-1].minor.yy0 = yymsp[0].minor.yy0; }
#line 2559 "../src/CFCParseHeader.c"
        break;
      case 113: /* cblock ::= CBLOCK_START blob CBLOCK_CLOSE */
#line 630 "../src/CFCParseHeader.y"
{ yymsp[-2].minor.yy70 = CFCCBlock_new(yymsp[-1].minor.yy0); }
#line 2564 "../src/CFCParseHeader.c"
        break;
      case 114: /* cblock ::= CBLOCK_START CBLOCK_CLOSE */
#line 631 "../src/CFCParseHeader.y"
{ yymsp[-1].minor.yy70 = CFCCBlock_new(""); }
#line 2569 "../src/CFCParseHeader.c"
        break;
      default:
        break;
/********** End reduce actions ************************************************/
  };
  assert( yyruleno<sizeof(yyRuleInfoLhs)/sizeof(yyRuleInfoLhs[0]) );
  yygoto = yyRuleInfoLhs[yyruleno];
  yysize = yyRuleInfoNRhs[yyruleno];
  yyact = yy_find_reduce_action(yymsp[yysize].stateno,(YYCODETYPE)yygoto);

  /* There are no SHIFTREDUCE actions on nonterminals because the table
  ** generator has simplified them to pure REDUCE actions. */
  assert( !(yyact>YY_MAX_SHIFT && yyact<=YY_MAX_SHIFTREDUCE) );

  /* It is not possible for a REDUCE to be followed by an error */
  assert( yyact!=YY_ERROR_ACTION );

  yymsp += yysize+1;
  yypParser->yytos = yymsp;
  yymsp->stateno = (YYACTIONTYPE)yyact;
  yymsp->major = (YYCODETYPE)yygoto;
  yyTraceShift(yypParser, yyact, "... then shift");
  return yyact;
}

/*
** The following code executes when the parse fails
*/
#ifndef YYNOERRORRECOVERY
static void yy_parse_failed(
  yyParser *yypParser           /* The parser */
){
  CFCParseHeaderARG_FETCH
  CFCParseHeaderCTX_FETCH
#ifndef NDEBUG
  if( yyTraceFILE ){
    fprintf(yyTraceFILE,"%sFail!\n",yyTracePrompt);
  }
#endif
  while( yypParser->yytos>yypParser->yystack ) yy_pop_parser_stack(yypParser);
  /* Here code is inserted which will be executed whenever the
  ** parser fails */
/************ Begin %parse_failure code ***************************************/
/************ End %parse_failure code *****************************************/
  CFCParseHeaderARG_STORE /* Suppress warning about unused %extra_argument variable */
  CFCParseHeaderCTX_STORE
}
#endif /* YYNOERRORRECOVERY */

/*
** The following code executes when a syntax error first occurs.
*/
static void yy_syntax_error(
  yyParser *yypParser,           /* The parser */
  int yymajor,                   /* The major type of the error token */
  CFCParseHeaderTOKENTYPE yyminor         /* The minor type of the error token */
){
  CFCParseHeaderARG_FETCH
  CFCParseHeaderCTX_FETCH
#define TOKEN yyminor
/************ Begin %syntax_error code ****************************************/
#line 212 "../src/CFCParseHeader.y"

    (void)yymajor;
    (void)yyminor;
    CFCParser_set_errors(state, true);
    CFCParser_set_lineno(state, yyget_lineno());
#line 2637 "../src/CFCParseHeader.c"
/************ End %syntax_error code ******************************************/
  CFCParseHeaderARG_STORE /* Suppress warning about unused %extra_argument variable */
  CFCParseHeaderCTX_STORE
}

/*
** The following is executed when the parser accepts
*/
static void yy_accept(
  yyParser *yypParser           /* The parser */
){
  CFCParseHeaderARG_FETCH
  CFCParseHeaderCTX_FETCH
#ifndef NDEBUG
  if( yyTraceFILE ){
    fprintf(yyTraceFILE,"%sAccept!\n",yyTracePrompt);
  }
#endif
#ifndef YYNOERRORRECOVERY
  yypParser->yyerrcnt = -1;
#endif
  assert( yypParser->yytos==yypParser->yystack );
  /* Here code is inserted which will be executed whenever the
  ** parser accepts */
/*********** Begin %parse_accept code *****************************************/
/*********** End %parse_accept code *******************************************/
  CFCParseHeaderARG_STORE /* Suppress warning about unused %extra_argument variable */
  CFCParseHeaderCTX_STORE
}

/* The main parser program.
** The first argument is a pointer to a structure obtained from
** "CFCParseHeaderAlloc" which describes the current state of the parser.
** The second argument is the major token number.  The third is
** the minor token.  The fourth optional argument is whatever the
** user wants (and specified in the grammar) and is available for
** use by the action routines.
**
** Inputs:
** <ul>
** <li> A pointer to the parser (an opaque structure.)
** <li> The major token number.
** <li> The minor token number.
** <li> An option argument of a grammar-specified type.
** </ul>
**
** Outputs:
** None.
*/
void CFCParseHeader(
  void *yyp,                   /* The parser */
  int yymajor,                 /* The major token code number */
  CFCParseHeaderTOKENTYPE yyminor       /* The value for the token */
  CFCParseHeaderARG_PDECL               /* Optional %extra_argument parameter */
){
  YYMINORTYPE yyminorunion;
  YYACTIONTYPE yyact;   /* The parser action. */
#if !defined(YYERRORSYMBOL) && !defined(YYNOERRORRECOVERY)
  int yyendofinput;     /* True if we are at the end of input */
#endif
#ifdef YYERRORSYMBOL
  int yyerrorhit = 0;   /* True if yymajor has invoked an error */
#endif
  yyParser *yypParser = (yyParser*)yyp;  /* The parser */
  CFCParseHeaderCTX_FETCH
  CFCParseHeaderARG_STORE

  assert( yypParser->yytos!=0 );
#if !defined(YYERRORSYMBOL) && !defined(YYNOERRORRECOVERY)
  yyendofinput = (yymajor==0);
#endif

  yyact = yypParser->yytos->stateno;
#ifndef NDEBUG
  if( yyTraceFILE ){
    if( yyact < YY_MIN_REDUCE ){
      fprintf(yyTraceFILE,"%sInput '%s' in state %d\n",
              yyTracePrompt,yyTokenName[yymajor],yyact);
    }else{
      fprintf(yyTraceFILE,"%sInput '%s' with pending reduce %d\n",
              yyTracePrompt,yyTokenName[yymajor],yyact-YY_MIN_REDUCE);
    }
  }
#endif

  while(1){ /* Exit by "break" */
    assert( yypParser->yytos>=yypParser->yystack );
    assert( yyact==yypParser->yytos->stateno );
    yyact = yy_find_shift_action((YYCODETYPE)yymajor,yyact);
    if( yyact >= YY_MIN_REDUCE ){
      unsigned int yyruleno = yyact - YY_MIN_REDUCE; /* Reduce by this rule */
#ifndef NDEBUG
      assert( yyruleno<(int)(sizeof(yyRuleName)/sizeof(yyRuleName[0])) );
      if( yyTraceFILE ){
        int yysize = yyRuleInfoNRhs[yyruleno];
        if( yysize ){
          fprintf(yyTraceFILE, "%sReduce %d [%s]%s, pop back to state %d.\n",
            yyTracePrompt,
            yyruleno, yyRuleName[yyruleno],
            yyruleno<YYNRULE_WITH_ACTION ? "" : " without external action",
            yypParser->yytos[yysize].stateno);
        }else{
          fprintf(yyTraceFILE, "%sReduce %d [%s]%s.\n",
            yyTracePrompt, yyruleno, yyRuleName[yyruleno],
            yyruleno<YYNRULE_WITH_ACTION ? "" : " without external action");
        }
      }
#endif /* NDEBUG */

      /* Check that the stack is large enough to grow by a single entry
      ** if the RHS of the rule is empty.  This ensures that there is room
      ** enough on the stack to push the LHS value */
      if( yyRuleInfoNRhs[yyruleno]==0 ){
#ifdef YYTRACKMAXSTACKDEPTH
        if( (int)(yypParser->yytos - yypParser->yystack)>yypParser->yyhwm ){
          yypParser->yyhwm++;
          assert( yypParser->yyhwm ==
                  (int)(yypParser->yytos - yypParser->yystack));
        }
#endif
        if( yypParser->yytos>=yypParser->yystackEnd ){
          if( yyGrowStack(yypParser) ){
            yyStackOverflow(yypParser);
            break;
          }
        }
      }
      yyact = yy_reduce(yypParser,yyruleno,yymajor,yyminor CFCParseHeaderCTX_PARAM);
    }else if( yyact <= YY_MAX_SHIFTREDUCE ){
      yy_shift(yypParser,yyact,(YYCODETYPE)yymajor,yyminor);
#ifndef YYNOERRORRECOVERY
      yypParser->yyerrcnt--;
#endif
      break;
    }else if( yyact==YY_ACCEPT_ACTION ){
      yypParser->yytos--;
      yy_accept(yypParser);
      return;
    }else{
      assert( yyact == YY_ERROR_ACTION );
      yyminorunion.yy0 = yyminor;
#ifdef YYERRORSYMBOL
      int yymx;
#endif
#ifndef NDEBUG
      if( yyTraceFILE ){
        fprintf(yyTraceFILE,"%sSyntax Error!\n",yyTracePrompt);
      }
#endif
#ifdef YYERRORSYMBOL
      /* A syntax error has occurred.
      ** The response to an error depends upon whether or not the
      ** grammar defines an error token "ERROR".  
      **
      ** This is what we do if the grammar does define ERROR:
      **
      **  * Call the %syntax_error function.
      **
      **  * Begin popping the stack until we enter a state where
      **    it is legal to shift the error symbol, then shift
      **    the error symbol.
      **
      **  * Set the error count to three.
      **
      **  * Begin accepting and shifting new tokens.  No new error
      **    processing will occur until three tokens have been
      **    shifted successfully.
      **
      */
      if( yypParser->yyerrcnt<0 ){
        yy_syntax_error(yypParser,yymajor,yyminor);
      }
      yymx = yypParser->yytos->major;
      if( yymx==YYERRORSYMBOL || yyerrorhit ){
#ifndef NDEBUG
        if( yyTraceFILE ){
          fprintf(yyTraceFILE,"%sDiscard input token %s\n",
             yyTracePrompt,yyTokenName[yymajor]);
        }
#endif
        yy_destructor(yypParser, (YYCODETYPE)yymajor, &yyminorunion);
        yymajor = YYNOCODE;
      }else{
        while( yypParser->yytos > yypParser->yystack ){
          yyact = yy_find_reduce_action(yypParser->yytos->stateno,
                                        YYERRORSYMBOL);
          if( yyact<=YY_MAX_SHIFTREDUCE ) break;
          yy_pop_parser_stack(yypParser);
        }
        if( yypParser->yytos <= yypParser->yystack || yymajor==0 ){
          yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion);
          yy_parse_failed(yypParser);
#ifndef YYNOERRORRECOVERY
          yypParser->yyerrcnt = -1;
#endif
          yymajor = YYNOCODE;
        }else if( yymx!=YYERRORSYMBOL ){
          yy_shift(yypParser,yyact,YYERRORSYMBOL,yyminor);
        }
      }
      yypParser->yyerrcnt = 3;
      yyerrorhit = 1;
      if( yymajor==YYNOCODE ) break;
      yyact = yypParser->yytos->stateno;
#elif defined(YYNOERRORRECOVERY)
      /* If the YYNOERRORRECOVERY macro is defined, then do not attempt to
      ** do any kind of error recovery.  Instead, simply invoke the syntax
      ** error routine and continue going as if nothing had happened.
      **
      ** Applications can set this macro (for example inside %include) if
      ** they intend to abandon the parse upon the first syntax error seen.
      */
      yy_syntax_error(yypParser,yymajor, yyminor);
      yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion);
      break;
#else  /* YYERRORSYMBOL is not defined */
      /* This is what we do if the grammar does not define ERROR:
      **
      **  * Report an error message, and throw away the input token.
      **
      **  * If the input token is $, then fail the parse.
      **
      ** As before, subsequent error messages are suppressed until
      ** three input tokens have been successfully shifted.
      */
      if( yypParser->yyerrcnt<=0 ){
        yy_syntax_error(yypParser,yymajor, yyminor);
      }
      yypParser->yyerrcnt = 3;
      yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion);
      if( yyendofinput ){
        yy_parse_failed(yypParser);
#ifndef YYNOERRORRECOVERY
        yypParser->yyerrcnt = -1;
#endif
      }
      break;
#endif
    }
  }
#ifndef NDEBUG
  if( yyTraceFILE ){
    yyStackEntry *i;
    char cDiv = '[';
    fprintf(yyTraceFILE,"%sReturn. Stack=",yyTracePrompt);
    for(i=&yypParser->yystack[1]; i<=yypParser->yytos; i++){
      fprintf(yyTraceFILE,"%c%s", cDiv, yyTokenName[i->major]);
      cDiv = ' ';
    }
    fprintf(yyTraceFILE,"]\n");
  }
#endif
  return;
}

/*
** Return the fallback token corresponding to canonical token iToken, or
** 0 if iToken has no fallback.
*/
int CFCParseHeaderFallback(int iToken){
#ifdef YYFALLBACK
  assert( iToken<(int)(sizeof(yyFallback)/sizeof(yyFallback[0])) );
  return yyFallback[iToken];
#else
  (void)iToken;
  return 0;
#endif
}
