#ifndef _GRAMMAR_H_
#define _GRAMMAR_H_ 1

#include <wchar.h>

#ifndef TRUE
#define TRUE (0==0)
#endif

#ifndef FALSE
#define FALSE (0!=0)
#endif

typedef int (*parsefn)(void);

#define LARGEST_ALT 8 // Max number of phrases in any Alt: 0 (Reserved), 1:7

#define NEGATED_PHRASE     (1U<<24U)
#define GUARD_PHRASE       (1U<<25U)
#define WHITESPACE_ALLOWED (1U<<26U)
#define GRAMMAR_TYPE_SHIFT 27U
#define GRAMMAR_TYPE_MASK  31U
#define BIP_TYPE         (1U <<27U)
#define PHRASE_TYPE      (2U <<27U)
#define SEMANTIC_TYPE    (3U <<27U)
#define KEYWORD_TYPE     (4U <<27U)
#define CHAR_TYPE        (5U <<27U)
#define UTF32CHAR_TYPE   (6U <<27U)
#define STRING_TYPE      (7U <<27U)
#define UTF32STRING_TYPE (8U <<27U)
#define REGEXP_TYPE      (9U <<27U)
#define OPTION_TYPE      (10U <<27U)
#define COUNT_OF_ALTS    (11U <<27U)
#define COUNT_OF_PHRASES (12U <<27U)
#define ALT_NUMBER       (13U <<27U)
#define INDEX_MASK       0x7FFFFFU
// (We have room for types 1..31U)
#define PhraseType(idx)  ((((idx)>>27U)&31U))


#define BIP_BASE 0
#define PHRASE_BASE 1
#define SEMANTIC_BASE 34
#define AST_BASE 34

#define NUM_BIPS 1
#define NUM_SIMPLE_PHRASES 33
#define NUM_SEMANTIC_PHRASES 0
#define NUM_PHRASES (NUM_BIPS+NUM_SIMPLE_PHRASES+NUM_SEMANTIC_PHRASES)

#define NUM_KEYWORDS 13
#define NUM_REGEXPS 6
#define NUM_GRAMMAR 156

#define B_EOF 0
#define P_begin_arguments 1
#define P_end_arguments 2
#define P_begin_array 3
#define P_end_array 4
#define P_begin_scope 5
#define P_end_scope 6
#define P_value_separator 7
#define P_object_separator 8
#define P_name_separator 9
#define P_array 10
#define P_opt_sign 11
#define P_number 12
#define P_value 13
#define P_rest_of_value_list 14
#define P_value_list 15
#define P_quote 16
#define P_escaped_char 17
#define P_char 18
#define P_chars 19
#define P_string 20
#define P_name 21
#define P_opt_exponent 22
#define P_opt_integer 23
#define P_decimal_part 24
#define P_float 25
#define P_integer 26
#define P_instruction_list 27
#define P_opt_block 28
#define P_argument 29
#define P_rest_of_argument_list 30
#define P_opt_argument_list 31
#define P_instruction 32
#define P_SS 33

extern const int bip_map[NUM_BIPS];
extern const int sequential_phrase_no_to_grammar_index[NUM_SIMPLE_PHRASES];
extern const wchar_t *phrasename[NUM_BIPS+NUM_SIMPLE_PHRASES+NUM_SEMANTIC_PHRASES];

extern const wchar_t *semantic_phrasename[NUM_SEMANTIC_PHRASES];
extern const wchar_t *semantic_code[NUM_SEMANTIC_PHRASES];
extern const wchar_t *ast_code[NUM_SIMPLE_PHRASES];
extern const wchar_t *xcomment[NUM_PHRASES];
extern const wchar_t *keyword[NUM_KEYWORDS];
extern const wchar_t *regexps[NUM_REGEXPS];

extern const int gram[NUM_GRAMMAR];
#define G_begin_arguments 0
#define G_end_arguments 3
#define G_begin_array 6
#define G_end_array 9
#define G_begin_scope 12
#define G_end_scope 15
#define G_value_separator 18
#define G_object_separator 21
#define G_name_separator 24
#define G_array 27
#define G_opt_sign 32
#define G_number 36
#define G_value 43
#define G_rest_of_value_list 60
#define G_value_list 66
#define G_quote 70
#define G_escaped_char 73
#define G_char 76
#define G_chars 80
#define G_string 85
#define G_name 90
#define G_opt_exponent 93
#define G_opt_integer 99
#define G_decimal_part 103
#define G_float 106
#define G_integer 112
#define G_instruction_list 115
#define G_opt_block 120
#define G_argument 127
#define G_rest_of_argument_list 134
#define G_opt_argument_list 140
#define G_instruction 145
#define G_SS 152

extern parsefn parsetime[NUM_SEMANTIC_PHRASES];

#ifndef SUPPRESS_DATA
const wchar_t *phrasename[NUM_BIPS+NUM_SIMPLE_PHRASES+NUM_SEMANTIC_PHRASES] = {
  /*0+0*/   L"EOF" /*0*/,
  /*1+0*/   L"begin-arguments",
  /*1+1*/   L"end-arguments",
  /*1+2*/   L"begin-array",
  /*1+3*/   L"end-array",
  /*1+4*/   L"begin-scope",
  /*1+5*/   L"end-scope",
  /*1+6*/   L"value-separator",
  /*1+7*/   L"object-separator",
  /*1+8*/   L"name-separator",
  /*1+9*/   L"array",
  /*1+10*/   L"opt-sign",
  /*1+11*/   L"number",
  /*1+12*/   L"value",
  /*1+13*/   L"rest-of-value-list",
  /*1+14*/   L"value-list",
  /*1+15*/   L"quote",
  /*1+16*/   L"escaped-char",
  /*1+17*/   L"char",
  /*1+18*/   L"chars",
  /*1+19*/   L"string",
  /*1+20*/   L"name",
  /*1+21*/   L"opt-exponent",
  /*1+22*/   L"opt-integer",
  /*1+23*/   L"decimal-part",
  /*1+24*/   L"float",
  /*1+25*/   L"integer",
  /*1+26*/   L"instruction-list",
  /*1+27*/   L"opt-block",
  /*1+28*/   L"argument",
  /*1+29*/   L"rest-of-argument-list",
  /*1+30*/   L"opt-argument-list",
  /*1+31*/   L"instruction",
  /*1+32*/   L"SS",
};
const wchar_t *phrasename_c[NUM_BIPS+NUM_SIMPLE_PHRASES+NUM_SEMANTIC_PHRASES] = {
  /*0+0*/   L"EOF" /*0*/,
  /*1+0*/   L"begin_arguments",
  /*1+1*/   L"end_arguments",
  /*1+2*/   L"begin_array",
  /*1+3*/   L"end_array",
  /*1+4*/   L"begin_scope",
  /*1+5*/   L"end_scope",
  /*1+6*/   L"value_separator",
  /*1+7*/   L"object_separator",
  /*1+8*/   L"name_separator",
  /*1+9*/   L"array",
  /*1+10*/   L"opt_sign",
  /*1+11*/   L"number",
  /*1+12*/   L"value",
  /*1+13*/   L"rest_of_value_list",
  /*1+14*/   L"value_list",
  /*1+15*/   L"quote",
  /*1+16*/   L"escaped_char",
  /*1+17*/   L"char",
  /*1+18*/   L"chars",
  /*1+19*/   L"string",
  /*1+20*/   L"name",
  /*1+21*/   L"opt_exponent",
  /*1+22*/   L"opt_integer",
  /*1+23*/   L"decimal_part",
  /*1+24*/   L"float",
  /*1+25*/   L"integer",
  /*1+26*/   L"instruction_list",
  /*1+27*/   L"opt_block",
  /*1+28*/   L"argument",
  /*1+29*/   L"rest_of_argument_list",
  /*1+30*/   L"opt_argument_list",
  /*1+31*/   L"instruction",
  /*1+32*/   L"SS",
};
const int bip_map[NUM_BIPS] = {
  /*0*/   0,
};
const int sequential_phrase_no_to_grammar_index[NUM_SIMPLE_PHRASES] = {
  G_begin_arguments,  /*0*/
  G_end_arguments,  /*3*/
  G_begin_array,  /*6*/
  G_end_array,  /*9*/
  G_begin_scope,  /*12*/
  G_end_scope,  /*15*/
  G_value_separator,  /*18*/
  G_object_separator,  /*21*/
  G_name_separator,  /*24*/
  G_array,  /*27*/
  G_opt_sign,  /*32*/
  G_number,  /*36*/
  G_value,  /*43*/
  G_rest_of_value_list,  /*60*/
  G_value_list,  /*66*/
  G_quote,  /*70*/
  G_escaped_char,  /*73*/
  G_char,  /*76*/
  G_chars,  /*80*/
  G_string,  /*85*/
  G_name,  /*90*/
  G_opt_exponent,  /*93*/
  G_opt_integer,  /*99*/
  G_decimal_part,  /*103*/
  G_float,  /*106*/
  G_integer,  /*112*/
  G_instruction_list,  /*115*/
  G_opt_block,  /*120*/
  G_argument,  /*127*/
  G_rest_of_argument_list,  /*134*/
  G_opt_argument_list,  /*140*/
  G_instruction,  /*145*/
  G_SS,  /*152*/
};

const wchar_t *semantic_phrasename[NUM_SEMANTIC_PHRASES] = {
};

const wchar_t *semantic_code[NUM_SEMANTIC_PHRASES] = {
};

parsefn parsetime[NUM_SEMANTIC_PHRASES] = {
};

// Comments are stored so that they can be re-inserted, should
// we need to regenerate a grammar.g file from this header file.
const wchar_t *xcomment[NUM_PHRASES] = {
  /*  0*/   NULL,
  /*  1*/   NULL,
  /*  2*/   NULL,
  /*  3*/   NULL,
  /*  4*/   NULL,
  /*  5*/   NULL,
  /*  6*/   NULL,
  /*  7*/   NULL,
  /*  8*/   NULL,
  /*  9*/   NULL,
  /* 10*/   NULL,
  /* 11*/   NULL,
  /* 12*/   NULL,
  /* 13*/   NULL,
  /* 14*/   NULL,
  /* 15*/   NULL,
  /* 16*/   NULL,
  /* 17*/   NULL,
  /* 18*/   NULL,
  /* 19*/   NULL,
  /* 20*/   NULL,
  /* 21*/   NULL,
  /* 22*/   NULL,
  /* 23*/   NULL,
  /* 24*/   NULL,
  /* 25*/   NULL,
  /* 26*/   NULL,
  /* 27*/   NULL,
  /* 28*/   NULL,
  /* 29*/   NULL,
  /* 30*/   NULL,
  /* 31*/   NULL,
  /* 32*/   NULL,
  /* 33*/   NULL,
};
const wchar_t *ast_code[NUM_SIMPLE_PHRASES] = {
  /*begin_arguments*/   L"\n"
             "  // left bracket\n",
  /*end_arguments*/   L"\n"
             "  // right bracket\n",
  /*begin_array*/   L"\n"
             "  // left square bracket\n",
  /*end_array*/   L"\n"
             "  // right square bracket\n",
  /*begin_scope*/   L"\n"
             "  // left curly bracket\n",
  /*end_scope*/   L"\n"
             "  // right curly bracket\n",
  /*value_separator*/   L"\n"
             "  // comma\n",
  /*object_separator*/   L"\n"
             "  // semicolon\n",
  /*name_separator*/   L"\n"
             "  // equals sign\n",
  /*array*/   L"\n"
             "  // Vector, e.g. [ 1.0, 2, 0 ]\n"
             "  // Matrix: array of vectors, e.g. [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [15.0, 20.0, 5.0, 1]]\n",
  /*opt_sign*/   L"\n",
  /*number*/   L"\n",
  /*value*/   L"\n",
  /*rest_of_value_list*/   L"\n",
  /*value_list*/   L"\n",
  /*quote*/   L"\n",
  /*escaped_char*/   L"\n",
  /*char*/   L"\n",
  /*chars*/   L"\n",
  /*string*/   L"\n",
  /*name*/   L"\n"
             "/*\n"
             "  int i;\n"
             "  int Literal = P(1);\n"
             "  fwprintf(stderr, L\"*** NAME = \");\n"
             "  for (i = atom(Literal).start; i < atom(Literal).end; i++) fwprintf(stderr, L\"%lc\", source(i).ch);\n"
             "  fwprintf(stderr, L\"\\n\");\n"
             "  fwprintf(stdout, L\"*** NAME = \");\n"
             "  for (i = atom(Literal).start; i < atom(Literal).end; i++) fwprintf(stdout, L\"%lc\", source(i).ch);\n"
             "  fwprintf(stdout, L\"\\n\");\n"
             "  */\n",
  /*opt_exponent*/   L"\n",
  /*opt_integer*/   L"\n",
  /*decimal_part*/   L"\n",
  /*float*/   L"\n",
  /*integer*/   L"\n",
  /*instruction_list*/   L"\n",
  /*opt_block*/   L"\n",
  /*argument*/   L"\n",
  /*rest_of_argument_list*/   L"\n",
  /*opt_argument_list*/   L"\n",
  /*instruction*/   L"\n",
  /*SS*/   L"\n",
};

const wchar_t *keyword[NUM_KEYWORDS] = {
  /*  0*/   L"(",
  /*  1*/   L")",
  /*  2*/   L"[",
  /*  3*/   L"]",
  /*  4*/   L"{",
  /*  5*/   L"}",
  /*  6*/   L",",
  /*  7*/   L";",
  /*  8*/   L"=",
  /*  9*/   L"-",
  /* 10*/   L"true",
  /* 11*/   L"false",
  /* 12*/   L"undef",
};
const wchar_t *regexps[NUM_REGEXPS] = {
  /*0*/   L"^\"",
  /*1*/   L"^\\.",
  /*2*/   L"^.",
  /*3*/   L"^[A-Za-z\\$][A-Za-z0-9_]*",
  /*4*/   L"^[Ee]",
  /*5*/   L"^[0-9][0-9]*",
};
const int gram[NUM_GRAMMAR /* 156 */] = {

// P<begin-arguments> = ...;
  /*  0*/ COUNT_OF_ALTS    | 0x000001,
  /*  1*/ COUNT_OF_PHRASES | 0x000001,
  /*  2*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /* ( */

// P<end-arguments> = ...;
  /*  3*/ COUNT_OF_ALTS    | 0x000001,
  /*  4*/ COUNT_OF_PHRASES | 0x000001,
  /*  5*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000001,  /* ) */

// P<begin-array> = ...;
  /*  6*/ COUNT_OF_ALTS    | 0x000001,
  /*  7*/ COUNT_OF_PHRASES | 0x000001,
  /*  8*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000002,  /* [ */

// P<end-array> = ...;
  /*  9*/ COUNT_OF_ALTS    | 0x000001,
  /* 10*/ COUNT_OF_PHRASES | 0x000001,
  /* 11*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000003,  /* ] */

// P<begin-scope> = ...;
  /* 12*/ COUNT_OF_ALTS    | 0x000001,
  /* 13*/ COUNT_OF_PHRASES | 0x000001,
  /* 14*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000004,  /* { */

// P<end-scope> = ...;
  /* 15*/ COUNT_OF_ALTS    | 0x000001,
  /* 16*/ COUNT_OF_PHRASES | 0x000001,
  /* 17*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000005,  /* } */

// P<value-separator> = ...;
  /* 18*/ COUNT_OF_ALTS    | 0x000001,
  /* 19*/ COUNT_OF_PHRASES | 0x000001,
  /* 20*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000006,  /* , */

// P<object-separator> = ...;
  /* 21*/ COUNT_OF_ALTS    | 0x000001,
  /* 22*/ COUNT_OF_PHRASES | 0x000001,
  /* 23*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000007,  /* ; */

// P<name-separator> = ...;
  /* 24*/ COUNT_OF_ALTS    | 0x000001,
  /* 25*/ COUNT_OF_PHRASES | 0x000001,
  /* 26*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000008,  /* = */

// P<array> = ...;
  /* 27*/ COUNT_OF_ALTS    | 0x000001,
  /* 28*/ COUNT_OF_PHRASES | 0x000003,
  /* 29*/ PHRASE_TYPE      | G_begin_array,
  /* 30*/ PHRASE_TYPE      | G_value_list,
  /* 31*/ PHRASE_TYPE      | G_end_array,

// P<opt-sign> = ...;
  /* 32*/ COUNT_OF_ALTS    | 0x000002,
  /* 33*/ COUNT_OF_PHRASES | 0x000001,
  /* 34*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000009,  /* - */
  /* 35*/ COUNT_OF_PHRASES | 0x000000,

// P<number> = ...;
  /* 36*/ COUNT_OF_ALTS    | 0x000002,
  /* 37*/ COUNT_OF_PHRASES | 0x000002,
  /* 38*/ PHRASE_TYPE      | G_opt_sign,
  /* 39*/ PHRASE_TYPE      | G_float,
  /* 40*/ COUNT_OF_PHRASES | 0x000002,
  /* 41*/ PHRASE_TYPE      | G_opt_sign,
  /* 42*/ PHRASE_TYPE      | G_integer,

// P<value> = ...;
  /* 43*/ COUNT_OF_ALTS    | 0x000008,
  /* 44*/ COUNT_OF_PHRASES | 0x000001,
  /* 45*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00000a,  /* true */
  /* 46*/ COUNT_OF_PHRASES | 0x000001,
  /* 47*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00000b,  /* false */
  /* 48*/ COUNT_OF_PHRASES | 0x000001,
  /* 49*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00000c,  /* undef */
  /* 50*/ COUNT_OF_PHRASES | 0x000001,
  /* 51*/ PHRASE_TYPE      | G_array,
  /* 52*/ COUNT_OF_PHRASES | 0x000001,
  /* 53*/ PHRASE_TYPE      | G_number,
  /* 54*/ COUNT_OF_PHRASES | 0x000001,
  /* 55*/ PHRASE_TYPE      | G_instruction,
  /* 56*/ COUNT_OF_PHRASES | 0x000001,
  /* 57*/ PHRASE_TYPE      | G_name,
  /* 58*/ COUNT_OF_PHRASES | 0x000001,
  /* 59*/ PHRASE_TYPE      | G_string,

// P<rest-of-value-list> = ...;
  /* 60*/ COUNT_OF_ALTS    | 0x000002,
  /* 61*/ COUNT_OF_PHRASES | 0x000003,
  /* 62*/ PHRASE_TYPE      | G_value_separator,
  /* 63*/ PHRASE_TYPE      | G_value,
  /* 64*/ PHRASE_TYPE      | G_rest_of_value_list,
  /* 65*/ COUNT_OF_PHRASES | 0x000000,

// P<value-list> = ...;
  /* 66*/ COUNT_OF_ALTS    | 0x000001,
  /* 67*/ COUNT_OF_PHRASES | 0x000002,
  /* 68*/ PHRASE_TYPE      | G_value,
  /* 69*/ PHRASE_TYPE      | G_rest_of_value_list,

// P<quote> = ...;
  /* 70*/ COUNT_OF_ALTS    | 0x000001,
  /* 71*/ COUNT_OF_PHRASES | 0x000001,
  /* 72*/ REGEXP_TYPE      | WHITESPACE_ALLOWED | 0x000000,  /* ^\" */

// P<escaped-char> = ...;
  /* 73*/ COUNT_OF_ALTS    | 0x000001,
  /* 74*/ COUNT_OF_PHRASES | 0x000001,
  /* 75*/ REGEXP_TYPE      | WHITESPACE_ALLOWED | 0x000001,  /* ^\\. */

// P<char> = ...;
  /* 76*/ COUNT_OF_ALTS    | 0x000001,
  /* 77*/ COUNT_OF_PHRASES | 0x000002,
  /* 78*/ PHRASE_TYPE      | NEGATED_PHRASE     | G_quote,
  /* 79*/ REGEXP_TYPE      | WHITESPACE_ALLOWED | 0x000002,  /* ^. */

// P<chars> = ...;
  /* 80*/ COUNT_OF_ALTS    | 0x000002,
  /* 81*/ COUNT_OF_PHRASES | 0x000002,
  /* 82*/ PHRASE_TYPE      | G_char,
  /* 83*/ PHRASE_TYPE      | G_chars,
  /* 84*/ COUNT_OF_PHRASES | 0x000000,

// P<string> = ...;
  /* 85*/ COUNT_OF_ALTS    | 0x000001,
  /* 86*/ COUNT_OF_PHRASES | 0x000003,
  /* 87*/ PHRASE_TYPE      | G_quote,
  /* 88*/ PHRASE_TYPE      | G_chars,
  /* 89*/ PHRASE_TYPE      | G_quote,

// P<name> = ...;
  /* 90*/ COUNT_OF_ALTS    | 0x000001,
  /* 91*/ COUNT_OF_PHRASES | 0x000001,
  /* 92*/ REGEXP_TYPE      | WHITESPACE_ALLOWED | 0x000003,  /* ^[A-Za-z\\$][A-Za-z0-9_]* */

// P<opt-exponent> = ...;
  /* 93*/ COUNT_OF_ALTS    | 0x000002,
  /* 94*/ COUNT_OF_PHRASES | 0x000003,
  /* 95*/ REGEXP_TYPE      | WHITESPACE_ALLOWED | 0x000004,  /* ^[Ee] */
  /* 96*/ PHRASE_TYPE      | G_opt_sign,
  /* 97*/ PHRASE_TYPE      | G_integer,
  /* 98*/ COUNT_OF_PHRASES | 0x000000,

// P<opt-integer> = ...;
  /* 99*/ COUNT_OF_ALTS    | 0x000002,
  /*100*/ COUNT_OF_PHRASES | 0x000001,
  /*101*/ PHRASE_TYPE      | G_integer,
  /*102*/ COUNT_OF_PHRASES | 0x000000,

// P<decimal-part> = ...;
  /*103*/ COUNT_OF_ALTS    | 0x000001,
  /*104*/ COUNT_OF_PHRASES | 0x000001,
  /*105*/ REGEXP_TYPE      | WHITESPACE_ALLOWED | 0x000005,  /* ^[0-9][0-9]* */

// P<float> = ...;
  /*106*/ COUNT_OF_ALTS    | 0x000001,
  /*107*/ COUNT_OF_PHRASES | 0x000004,
  /*108*/ PHRASE_TYPE      | G_opt_integer,
  /*109*/ REGEXP_TYPE      | WHITESPACE_ALLOWED | 0x000001,  /* ^\\. */
  /*110*/ PHRASE_TYPE      | G_decimal_part,
  /*111*/ PHRASE_TYPE      | G_opt_exponent,

// P<integer> = ...;
  /*112*/ COUNT_OF_ALTS    | 0x000001,
  /*113*/ COUNT_OF_PHRASES | 0x000001,
  /*114*/ REGEXP_TYPE      | WHITESPACE_ALLOWED | 0x000005,  /* ^[0-9][0-9]* */

// P<instruction-list> = ...;
  /*115*/ COUNT_OF_ALTS    | 0x000002,
  /*116*/ COUNT_OF_PHRASES | 0x000002,
  /*117*/ PHRASE_TYPE      | G_instruction,
  /*118*/ PHRASE_TYPE      | G_instruction_list,
  /*119*/ COUNT_OF_PHRASES | 0x000000,

// P<opt-block> = ...;
  /*120*/ COUNT_OF_ALTS    | 0x000002,
  /*121*/ COUNT_OF_PHRASES | 0x000003,
  /*122*/ PHRASE_TYPE      | G_begin_scope,
  /*123*/ PHRASE_TYPE      | G_instruction_list,
  /*124*/ PHRASE_TYPE      | G_end_scope,
  /*125*/ COUNT_OF_PHRASES | 0x000001,
  /*126*/ PHRASE_TYPE      | G_object_separator,

// P<argument> = ...;
  /*127*/ COUNT_OF_ALTS    | 0x000002,
  /*128*/ COUNT_OF_PHRASES | 0x000003,
  /*129*/ PHRASE_TYPE      | G_name,
  /*130*/ PHRASE_TYPE      | G_name_separator,
  /*131*/ PHRASE_TYPE      | G_value,
  /*132*/ COUNT_OF_PHRASES | 0x000001,
  /*133*/ PHRASE_TYPE      | G_value,

// P<rest-of-argument-list> = ...;
  /*134*/ COUNT_OF_ALTS    | 0x000002,
  /*135*/ COUNT_OF_PHRASES | 0x000003,
  /*136*/ PHRASE_TYPE      | G_value_separator,
  /*137*/ PHRASE_TYPE      | G_argument,
  /*138*/ PHRASE_TYPE      | G_rest_of_argument_list,
  /*139*/ COUNT_OF_PHRASES | 0x000000,

// P<opt-argument-list> = ...;
  /*140*/ COUNT_OF_ALTS    | 0x000002,
  /*141*/ COUNT_OF_PHRASES | 0x000002,
  /*142*/ PHRASE_TYPE      | G_argument,
  /*143*/ PHRASE_TYPE      | G_rest_of_argument_list,
  /*144*/ COUNT_OF_PHRASES | 0x000000,

// P<instruction> = ...;
  /*145*/ COUNT_OF_ALTS    | 0x000001,
  /*146*/ COUNT_OF_PHRASES | 0x000005,
  /*147*/ PHRASE_TYPE      | G_name,
  /*148*/ PHRASE_TYPE      | G_begin_arguments,
  /*149*/ PHRASE_TYPE      | G_opt_argument_list,
  /*150*/ PHRASE_TYPE      | G_end_arguments,
  /*151*/ PHRASE_TYPE      | G_opt_block,

// P<SS> = ...;
  /*152*/ COUNT_OF_ALTS    | 0x000001,
  /*153*/ COUNT_OF_PHRASES | 0x000002,
  /*154*/ PHRASE_TYPE      | G_instruction_list,
  /*155*/ BIP_TYPE         | WHITESPACE_ALLOWED | B_EOF,
};

#ifdef INITCODE

#endif //INITCODE

// B<EOF> = 0;

// E
#endif  // SUPPRESS_DATA
#endif  // _GRAMMAR_H_
