#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 19 // Max number of phrases in any Alt: 0 (Reserved), 1:18

#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..31)
#define PhraseType(idx)  ((((idx)>>27U)&31U))


#define BIP_BASE 0
#define PHRASE_BASE 2
#define SEMANTIC_BASE 217
#define AST_BASE 222

#define NUM_BIPS 2
#define NUM_SIMPLE_PHRASES 215
#define NUM_SEMANTIC_PHRASES 5
#define NUM_PHRASES (NUM_BIPS+NUM_SIMPLE_PHRASES+NUM_SEMANTIC_PHRASES)

#define NUM_KEYWORDS 75
#define NUM_REGEXPS 9
#define NUM_GRAMMAR 1819

#define B_EOF 0
#define B_NL 2
#define P_SS 2
#define P_IDENT 3
#define P_DeepBase 4
#define P_Based_Const 5
#define P_BigCharConst 6
#define P_CharConst 7
#define P_OptExponent 8
#define P_OptDecimal 9
#define P_Base_or_Float 10
#define P_Num 11
#define P_CONST 12
#define P_stringchars 13
#define P_ALIASTEXT 14
#define P_V 15
#define P_N 16
#define P_FM 17
#define P_A 18
#define P_AN 19
#define P_NA 20
#define P_NAN 21
#define P_any 22
#define P_NL_opt 23
#define P_more_Ts 24
#define P_T 25
#define P_simple_type 26
#define P_routine_or_predicate 27
#define P_fn_or_map 28
#define P_OWN_opt 29
#define P_EXTERNAL 30
#define P_EXTERNAL_opt 31
#define P_COMP 32
#define P_ACOMP 33
#define P_exit_or_continue 34
#define P_on_event 35
#define P_BACK 36
#define P_INDEF 37
#define P_IDENT_and_INITDEC 38
#define P_rest_of_IDENT_and_INITDEC 39
#define P_rest_of_ADEFN 40
#define P_OIDENT_ALIAS_opt 41
#define P_more_IDENT_ALIAS_opts 42
#define P_IDENT_ALIAS_opt 43
#define P_ALIAS_opt 44
#define P_rest_of_INITVAR 45
#define P_Rt_Pred_FPP 46
#define P_bracketed_INDEF_or_IEXP 47
#define P_optional_initialiser_repeat_count 48
#define P_initialiser_item 49
#define P_more_initialiser_items 50
#define P_initialiser_list 51
#define P_optional_initialisation_T 52
#define P_EXTA_item 53
#define P_EXTA_list_opt 54
#define P_EXTA_list 55
#define P_INDEF_or_IEXP 56
#define P_STATEMENTS 57
#define P_L 58
#define P_SWID 59
#define P_rest_of_SWIDS 60
#define P_SWIDS 61
#define P_rest_of_SWDEFS 62
#define P_SWDEFS 63
#define P_SWDEF 64
#define P_Star_or_IEXP 65
#define P_FM_or_Star 66
#define P_result_types 67
#define P_Rt_Fn_Map_Pred_DECL 68
#define P_NAME_opt 69
#define P_SPEC_opt 70
#define P_ARRAY_stuff 71
#define P_Declaration_T 72
#define P_optional_parameters 73
#define P_Rt_CALL 74
#define P_Fn_CALL 75
#define P_Map_CALL 76
#define P_Pred_CALL 77
#define P_PROC_or_PROCSPEC 78
#define P_ESCARRAY 79
#define P_ESCREC 80
#define P_ESCREC_opt 81
#define P_ESC_ARRAY_or_REC 82
#define P_simple_label 83
#define P_switch_label 84
#define P_S 85
#define P_jump_destination 86
#define P_SIGNAL 87
#define P_COMMENT_TEXT 88
#define P_COMMENT 89
#define P_COMMENT_T 90
#define P_LHS 91
#define P_IMP 92
#define P_EIMP 93
#define P_XIMP 94
#define P_FELSE_opt 95
#define P_if_or_unless 96
#define P_if_unless_XIMP 97
#define P_if_XIMP_opt 98
#define P_THEN_opt 99
#define P_else_start_IMP_opt 100
#define P_else_if_unless_XIMP_opt 101
#define P_else_if_XIMP_opt 102
#define P_else_final_IMP_opt 103
#define P_start_IMP 104
#define P_final_IMP 105
#define P_more_IMPS 106
#define P_INCL_LIST_opt 107
#define P_STATEMENT 108
#define P_wh_for 109
#define P_cycle_IMP 110
#define P_event_list_def 111
#define P_iu_while_until_for_T 112
#define P_AddressOffsetOp 113
#define P_ADDOP_SEXP_opt 114
#define P_A_or_AN_or_NA_or_NAN 115
#define P_A_or_AN 116
#define P_NA_or_NAN 117
#define P_A_or_AN_opt 118
#define P_NA_or_NAN_opt 119
#define P_VAR_ASSIGN 120
#define P_INIT_DEC_ASSIGNMENTS 121
#define P_rest_of_IDENTS 122
#define P_IDENTS 123
#define P_V_or_N 124
#define P_extra 125
#define P_subevent_and_extra 126
#define P_IMP_ASSIGN 127
#define P_N_ASS 128
#define P_rest_of_AND_COND 129
#define P_AND_COND 130
#define P_rest_of_OR_COND 131
#define P_OR_COND 132
#define P_rest_of_COND 133
#define P_COND 134
#define P_OP1 135
#define P_OP2 136
#define P_OP3 137
#define P_OP1_EXP 138
#define P_OP2_EXP 139
#define P_OP3_EXP 140
#define P_OP1_EXPS 141
#define P_OP2_EXPS 142
#define P_OP3_EXPS 143
#define P_COMP2_opt 144
#define P_COMP2 145
#define P_COMP1 146
#define P_COMP12_opt 147
#define P_DOT_V_Ns 148
#define P_DOT_V_N 149
#define P_COMPARISON 150
#define P_COMP1OS2 151
#define P_SCOND 152
#define P_SIGN_opt 153
#define P_UOP 154
#define P_UOP_opt 155
#define P_dot_Vs_opt 156
#define P_dot_Vs 157
#define P_EXP 158
#define P_EXP2 159
#define P_EXP1 160
#define P_SEXP 161
#define P_COP1 162
#define P_COP2 163
#define P_COP3 164
#define P_CSIGN 165
#define P_rest_of_IEXP2_EXPR 166
#define P_IEXP2_EXPR 167
#define P_COP3_IEXP2_optseq 168
#define P_COP2_IEXP1_optseq 169
#define P_COP1_IEXP0_optseq 170
#define P_CUOP_opt 171
#define P_CUOP 172
#define P_IEXP2 173
#define P_IEXP1 174
#define P_IEXP0 175
#define P_IEXP 176
#define P_PCONST 177
#define P_dq 178
#define P_ACONST 179
#define P_OCONST 180
#define P_SEQ 181
#define P_record_field_decl 182
#define P_OR_record_field_declarations 183
#define P_more_record_field_decls 184
#define P_record_field_declarations 185
#define P_CONST_BOUNDS 186
#define P_RCONST_BOUNDS 187
#define P_BOUNDS_PAIR 188
#define P_rest_of_BPL_LIST 189
#define P_BPL_LIST 190
#define P_BPL 191
#define P_parameter_type 192
#define P_parameter_type_decl 193
#define P_VDEC_or_PROC 194
#define P_More_FPPs 195
#define P_FPP 196
#define P_FPP0 197
#define P_another_FPP0 198
#define P_ADEFN 199
#define P_APP 200
#define P_BASEAPP 201
#define P_APP2 202
#define P_APP3 203
#define P_APP4 204
#define P_APP5 205
#define P_APP6 206
#define P_rest_of_IEXP 207
#define P_const_event_list 208
#define P_N_or_AN_or_NAN 209
#define P_ADDOP_IEXP_opt 210
#define P_rest_of_EQs_init 211
#define P_EQs 212
#define P_INITVAR 213
#define P_RESLEFT_opt 214
#define P_RESRIGHT_opt 215
#define P_RESEXP 216
#define S_whitespace 0
#define S_Imp77_stropping 1
#define S_PROC 2
#define S_PROCSPEC 3
#define S_ZERO 4

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_SS 0
#define G_IDENT 5
#define G_DeepBase 9
#define G_Based_Const 15
#define G_BigCharConst 20
#define G_CharConst 23
#define G_OptExponent 30
#define G_OptDecimal 35
#define G_Base_or_Float 40
#define G_Num 46
#define G_CONST 49
#define G_stringchars 60
#define G_ALIASTEXT 70
#define G_V 75
#define G_N 79
#define G_FM 83
#define G_A 87
#define G_AN 91
#define G_NA 95
#define G_NAN 99
#define G_any 103
#define G_NL_opt 106
#define G_more_Ts 111
#define G_T 116
#define G_simple_type 123
#define G_routine_or_predicate 142
#define G_fn_or_map 147
#define G_OWN_opt 158
#define G_EXTERNAL 166
#define G_EXTERNAL_opt 177
#define G_COMP 181
#define G_ACOMP 205
#define G_exit_or_continue 212
#define G_on_event 217
#define G_BACK 222
#define G_INDEF 229
#define G_IDENT_and_INITDEC 232
#define G_rest_of_IDENT_and_INITDEC 236
#define G_rest_of_ADEFN 243
#define G_OIDENT_ALIAS_opt 249
#define G_more_IDENT_ALIAS_opts 253
#define G_IDENT_ALIAS_opt 260
#define G_ALIAS_opt 264
#define G_rest_of_INITVAR 269
#define G_Rt_Pred_FPP 276
#define G_bracketed_INDEF_or_IEXP 282
#define G_optional_initialiser_repeat_count 287
#define G_initialiser_item 297
#define G_more_initialiser_items 301
#define G_initialiser_list 307
#define G_optional_initialisation_T 311
#define G_EXTA_item 319
#define G_EXTA_list_opt 323
#define G_EXTA_list 331
#define G_INDEF_or_IEXP 335
#define G_STATEMENTS 340
#define G_L 347
#define G_SWID 350
#define G_rest_of_SWIDS 353
#define G_SWIDS 360
#define G_rest_of_SWDEFS 364
#define G_SWDEFS 371
#define G_SWDEF 375
#define G_Star_or_IEXP 379
#define G_FM_or_Star 384
#define G_result_types 389
#define G_Rt_Fn_Map_Pred_DECL 409
#define G_NAME_opt 415
#define G_SPEC_opt 419
#define G_ARRAY_stuff 423
#define G_Declaration_T 433
#define G_optional_parameters 526
#define G_Rt_CALL 532
#define G_Fn_CALL 536
#define G_Map_CALL 540
#define G_Pred_CALL 544
#define G_PROC_or_PROCSPEC 548
#define G_ESCARRAY 553
#define G_ESCREC 559
#define G_ESCREC_opt 564
#define G_ESC_ARRAY_or_REC 569
#define G_simple_label 575
#define G_switch_label 579
#define G_S 584
#define G_jump_destination 587
#define G_SIGNAL 595
#define G_COMMENT_TEXT 600
#define G_COMMENT 606
#define G_COMMENT_T 611
#define G_LHS 616
#define G_IMP 626
#define G_EIMP 680
#define G_XIMP 693
#define G_FELSE_opt 702
#define G_if_or_unless 707
#define G_if_unless_XIMP 712
#define G_if_XIMP_opt 717
#define G_THEN_opt 722
#define G_else_start_IMP_opt 726
#define G_else_if_unless_XIMP_opt 731
#define G_else_if_XIMP_opt 736
#define G_else_final_IMP_opt 741
#define G_start_IMP 746
#define G_final_IMP 754
#define G_more_IMPS 762
#define G_INCL_LIST_opt 768
#define G_STATEMENT 774
#define G_wh_for 923
#define G_cycle_IMP 930
#define G_event_list_def 936
#define G_iu_while_until_for_T 941
#define G_AddressOffsetOp 960
#define G_ADDOP_SEXP_opt 967
#define G_A_or_AN_or_NA_or_NAN 972
#define G_A_or_AN 981
#define G_NA_or_NAN 986
#define G_A_or_AN_opt 991
#define G_NA_or_NAN_opt 996
#define G_VAR_ASSIGN 1001
#define G_INIT_DEC_ASSIGNMENTS 1012
#define G_rest_of_IDENTS 1035
#define G_IDENTS 1042
#define G_V_or_N 1046
#define G_extra 1060
#define G_subevent_and_extra 1066
#define G_IMP_ASSIGN 1073
#define G_N_ASS 1089
#define G_rest_of_AND_COND 1099
#define G_AND_COND 1104
#define G_rest_of_OR_COND 1110
#define G_OR_COND 1115
#define G_rest_of_COND 1121
#define G_COND 1127
#define G_OP1 1131
#define G_OP2 1148
#define G_OP3 1158
#define G_OP1_EXP 1168
#define G_OP2_EXP 1172
#define G_OP3_EXP 1176
#define G_OP1_EXPS 1180
#define G_OP2_EXPS 1185
#define G_OP3_EXPS 1190
#define G_COMP2_opt 1195
#define G_COMP2 1199
#define G_COMP1 1203
#define G_COMP12_opt 1207
#define G_DOT_V_Ns 1211
#define G_DOT_V_N 1216
#define G_COMPARISON 1220
#define G_COMP1OS2 1243
#define G_SCOND 1248
#define G_SIGN_opt 1281
#define G_UOP 1287
#define G_UOP_opt 1294
#define G_dot_Vs_opt 1298
#define G_dot_Vs 1303
#define G_EXP 1308
#define G_EXP2 1327
#define G_EXP1 1332
#define G_SEXP 1336
#define G_COP1 1349
#define G_COP2 1352
#define G_COP3 1355
#define G_CSIGN 1358
#define G_rest_of_IEXP2_EXPR 1361
#define G_IEXP2_EXPR 1367
#define G_COP3_IEXP2_optseq 1371
#define G_COP2_IEXP1_optseq 1377
#define G_COP1_IEXP0_optseq 1383
#define G_CUOP_opt 1389
#define G_CUOP 1393
#define G_IEXP2 1396
#define G_IEXP1 1401
#define G_IEXP0 1405
#define G_IEXP 1416
#define G_PCONST 1426
#define G_dq 1431
#define G_ACONST 1434
#define G_OCONST 1438
#define G_SEQ 1442
#define G_record_field_decl 1452
#define G_OR_record_field_declarations 1567
#define G_more_record_field_decls 1573
#define G_record_field_declarations 1580
#define G_CONST_BOUNDS 1585
#define G_RCONST_BOUNDS 1592
#define G_BOUNDS_PAIR 1599
#define G_rest_of_BPL_LIST 1604
#define G_BPL_LIST 1610
#define G_BPL 1614
#define G_parameter_type 1619
#define G_parameter_type_decl 1632
#define G_VDEC_or_PROC 1647
#define G_More_FPPs 1656
#define G_FPP 1662
#define G_FPP0 1666
#define G_another_FPP0 1669
#define G_ADEFN 1675
#define G_APP 1679
#define G_BASEAPP 1692
#define G_APP2 1695
#define G_APP3 1701
#define G_APP4 1710
#define G_APP5 1722
#define G_APP6 1737
#define G_rest_of_IEXP 1755
#define G_const_event_list 1760
#define G_N_or_AN_or_NAN 1764
#define G_ADDOP_IEXP_opt 1774
#define G_rest_of_EQs_init 1779
#define G_EQs 1785
#define G_INITVAR 1797
#define G_RESLEFT_opt 1802
#define G_RESRIGHT_opt 1807
#define G_RESEXP 1812

extern parsefn parsetime[NUM_SEMANTIC_PHRASES];
extern int parse_whitespace(void);
extern int parse_Imp77_stropping(void);
extern int parse_PROC(void);
extern int parse_PROCSPEC(void);
extern int parse_ZERO(void);

#ifndef SUPPRESS_DATA
const wchar_t *phrasename[NUM_BIPS+NUM_SIMPLE_PHRASES+NUM_SEMANTIC_PHRASES] = {
  /*0+0*/   L"EOF" /*0*/,
  /*0+1*/   L"NL" /*2*/,
  /*2+0*/   L"SS",
  /*2+1*/   L"IDENT",
  /*2+2*/   L"DeepBase",
  /*2+3*/   L"Based_Const",
  /*2+4*/   L"BigCharConst",
  /*2+5*/   L"CharConst",
  /*2+6*/   L"OptExponent",
  /*2+7*/   L"OptDecimal",
  /*2+8*/   L"Base_or_Float",
  /*2+9*/   L"Num",
  /*2+10*/   L"CONST",
  /*2+11*/   L"stringchars",
  /*2+12*/   L"ALIASTEXT",
  /*2+13*/   L"V",
  /*2+14*/   L"N",
  /*2+15*/   L"FM",
  /*2+16*/   L"A",
  /*2+17*/   L"AN",
  /*2+18*/   L"NA",
  /*2+19*/   L"NAN",
  /*2+20*/   L"any",
  /*2+21*/   L"NL_opt",
  /*2+22*/   L"more_Ts",
  /*2+23*/   L"T",
  /*2+24*/   L"simple_type",
  /*2+25*/   L"routine_or_predicate",
  /*2+26*/   L"fn_or_map",
  /*2+27*/   L"OWN_opt",
  /*2+28*/   L"EXTERNAL",
  /*2+29*/   L"EXTERNAL_opt",
  /*2+30*/   L"COMP",
  /*2+31*/   L"ACOMP",
  /*2+32*/   L"exit_or_continue",
  /*2+33*/   L"on_event",
  /*2+34*/   L"BACK",
  /*2+35*/   L"INDEF",
  /*2+36*/   L"IDENT_and_INITDEC",
  /*2+37*/   L"rest_of_IDENT_and_INITDEC",
  /*2+38*/   L"rest_of_ADEFN",
  /*2+39*/   L"OIDENT_ALIAS_opt",
  /*2+40*/   L"more_IDENT_ALIAS_opts",
  /*2+41*/   L"IDENT_ALIAS_opt",
  /*2+42*/   L"ALIAS_opt",
  /*2+43*/   L"rest_of_INITVAR",
  /*2+44*/   L"Rt_Pred_FPP",
  /*2+45*/   L"bracketed_INDEF_or_IEXP",
  /*2+46*/   L"optional_initialiser_repeat_count",
  /*2+47*/   L"initialiser_item",
  /*2+48*/   L"more_initialiser_items",
  /*2+49*/   L"initialiser_list",
  /*2+50*/   L"optional_initialisation_T",
  /*2+51*/   L"EXTA_item",
  /*2+52*/   L"EXTA_list_opt",
  /*2+53*/   L"EXTA_list",
  /*2+54*/   L"INDEF_or_IEXP",
  /*2+55*/   L"STATEMENTS",
  /*2+56*/   L"L",
  /*2+57*/   L"SWID",
  /*2+58*/   L"rest_of_SWIDS",
  /*2+59*/   L"SWIDS",
  /*2+60*/   L"rest_of_SWDEFS",
  /*2+61*/   L"SWDEFS",
  /*2+62*/   L"SWDEF",
  /*2+63*/   L"Star_or_IEXP",
  /*2+64*/   L"FM_or_Star",
  /*2+65*/   L"result_types",
  /*2+66*/   L"Rt_Fn_Map_Pred_DECL",
  /*2+67*/   L"NAME_opt",
  /*2+68*/   L"SPEC_opt",
  /*2+69*/   L"ARRAY_stuff",
  /*2+70*/   L"Declaration_T",
  /*2+71*/   L"optional_parameters",
  /*2+72*/   L"Rt_CALL",
  /*2+73*/   L"Fn_CALL",
  /*2+74*/   L"Map_CALL",
  /*2+75*/   L"Pred_CALL",
  /*2+76*/   L"PROC_or_PROCSPEC",
  /*2+77*/   L"ESCARRAY",
  /*2+78*/   L"ESCREC",
  /*2+79*/   L"ESCREC_opt",
  /*2+80*/   L"ESC_ARRAY_or_REC",
  /*2+81*/   L"simple_label",
  /*2+82*/   L"switch_label",
  /*2+83*/   L"S",
  /*2+84*/   L"jump_destination",
  /*2+85*/   L"SIGNAL",
  /*2+86*/   L"COMMENT_TEXT",
  /*2+87*/   L"COMMENT",
  /*2+88*/   L"COMMENT_T",
  /*2+89*/   L"LHS",
  /*2+90*/   L"IMP",
  /*2+91*/   L"EIMP",
  /*2+92*/   L"XIMP",
  /*2+93*/   L"FELSE_opt",
  /*2+94*/   L"if_or_unless",
  /*2+95*/   L"if_unless_XIMP",
  /*2+96*/   L"if_XIMP_opt",
  /*2+97*/   L"THEN_opt",
  /*2+98*/   L"else_start_IMP_opt",
  /*2+99*/   L"else_if_unless_XIMP_opt",
  /*2+100*/   L"else_if_XIMP_opt",
  /*2+101*/   L"else_final_IMP_opt",
  /*2+102*/   L"start_IMP",
  /*2+103*/   L"final_IMP",
  /*2+104*/   L"more_IMPS",
  /*2+105*/   L"INCL_LIST_opt",
  /*2+106*/   L"STATEMENT",
  /*2+107*/   L"wh_for",
  /*2+108*/   L"cycle_IMP",
  /*2+109*/   L"event_list_def",
  /*2+110*/   L"iu_while_until_for_T",
  /*2+111*/   L"AddressOffsetOp",
  /*2+112*/   L"ADDOP_SEXP_opt",
  /*2+113*/   L"A_or_AN_or_NA_or_NAN",
  /*2+114*/   L"A_or_AN",
  /*2+115*/   L"NA_or_NAN",
  /*2+116*/   L"A_or_AN_opt",
  /*2+117*/   L"NA_or_NAN_opt",
  /*2+118*/   L"VAR_ASSIGN",
  /*2+119*/   L"INIT_DEC_ASSIGNMENTS",
  /*2+120*/   L"rest_of_IDENTS",
  /*2+121*/   L"IDENTS",
  /*2+122*/   L"V_or_N",
  /*2+123*/   L"extra",
  /*2+124*/   L"subevent_and_extra",
  /*2+125*/   L"IMP_ASSIGN",
  /*2+126*/   L"N_ASS",
  /*2+127*/   L"rest_of_AND_COND",
  /*2+128*/   L"AND_COND",
  /*2+129*/   L"rest_of_OR_COND",
  /*2+130*/   L"OR_COND",
  /*2+131*/   L"rest_of_COND",
  /*2+132*/   L"COND",
  /*2+133*/   L"OP1",
  /*2+134*/   L"OP2",
  /*2+135*/   L"OP3",
  /*2+136*/   L"OP1_EXP",
  /*2+137*/   L"OP2_EXP",
  /*2+138*/   L"OP3_EXP",
  /*2+139*/   L"OP1_EXPS",
  /*2+140*/   L"OP2_EXPS",
  /*2+141*/   L"OP3_EXPS",
  /*2+142*/   L"COMP2_opt",
  /*2+143*/   L"COMP2",
  /*2+144*/   L"COMP1",
  /*2+145*/   L"COMP12_opt",
  /*2+146*/   L"DOT_V_Ns",
  /*2+147*/   L"DOT_V_N",
  /*2+148*/   L"COMPARISON",
  /*2+149*/   L"COMP1OS2",
  /*2+150*/   L"SCOND",
  /*2+151*/   L"SIGN_opt",
  /*2+152*/   L"UOP",
  /*2+153*/   L"UOP_opt",
  /*2+154*/   L"dot_Vs_opt",
  /*2+155*/   L"dot_Vs",
  /*2+156*/   L"EXP",
  /*2+157*/   L"EXP2",
  /*2+158*/   L"EXP1",
  /*2+159*/   L"SEXP",
  /*2+160*/   L"COP1",
  /*2+161*/   L"COP2",
  /*2+162*/   L"COP3",
  /*2+163*/   L"CSIGN",
  /*2+164*/   L"rest_of_IEXP2_EXPR",
  /*2+165*/   L"IEXP2_EXPR",
  /*2+166*/   L"COP3_IEXP2_optseq",
  /*2+167*/   L"COP2_IEXP1_optseq",
  /*2+168*/   L"COP1_IEXP0_optseq",
  /*2+169*/   L"CUOP_opt",
  /*2+170*/   L"CUOP",
  /*2+171*/   L"IEXP2",
  /*2+172*/   L"IEXP1",
  /*2+173*/   L"IEXP0",
  /*2+174*/   L"IEXP",
  /*2+175*/   L"PCONST",
  /*2+176*/   L"dq",
  /*2+177*/   L"ACONST",
  /*2+178*/   L"OCONST",
  /*2+179*/   L"SEQ",
  /*2+180*/   L"record_field_decl",
  /*2+181*/   L"OR_record_field_declarations",
  /*2+182*/   L"more_record_field_decls",
  /*2+183*/   L"record_field_declarations",
  /*2+184*/   L"CONST_BOUNDS",
  /*2+185*/   L"RCONST_BOUNDS",
  /*2+186*/   L"BOUNDS_PAIR",
  /*2+187*/   L"rest_of_BPL_LIST",
  /*2+188*/   L"BPL_LIST",
  /*2+189*/   L"BPL",
  /*2+190*/   L"parameter_type",
  /*2+191*/   L"parameter_type_decl",
  /*2+192*/   L"VDEC_or_PROC",
  /*2+193*/   L"More_FPPs",
  /*2+194*/   L"FPP",
  /*2+195*/   L"FPP0",
  /*2+196*/   L"another_FPP0",
  /*2+197*/   L"ADEFN",
  /*2+198*/   L"APP",
  /*2+199*/   L"BASEAPP",
  /*2+200*/   L"APP2",
  /*2+201*/   L"APP3",
  /*2+202*/   L"APP4",
  /*2+203*/   L"APP5",
  /*2+204*/   L"APP6",
  /*2+205*/   L"rest_of_IEXP",
  /*2+206*/   L"const_event_list",
  /*2+207*/   L"N_or_AN_or_NAN",
  /*2+208*/   L"ADDOP_IEXP_opt",
  /*2+209*/   L"rest_of_EQs_init",
  /*2+210*/   L"EQs",
  /*2+211*/   L"INITVAR",
  /*2+212*/   L"RESLEFT_opt",
  /*2+213*/   L"RESRIGHT_opt",
  /*2+214*/   L"RESEXP",
  /*217+0*/   L"whitespace",
  /*217+1*/   L"Imp77_stropping",
  /*217+2*/   L"PROC",
  /*217+3*/   L"PROCSPEC",
  /*217+4*/   L"ZERO",
};
const wchar_t *phrasename_c[NUM_BIPS+NUM_SIMPLE_PHRASES+NUM_SEMANTIC_PHRASES] = {
  /*0+0*/   L"EOF" /*0*/,
  /*0+1*/   L"NL" /*2*/,
  /*2+0*/   L"SS",
  /*2+1*/   L"IDENT",
  /*2+2*/   L"DeepBase",
  /*2+3*/   L"Based_Const",
  /*2+4*/   L"BigCharConst",
  /*2+5*/   L"CharConst",
  /*2+6*/   L"OptExponent",
  /*2+7*/   L"OptDecimal",
  /*2+8*/   L"Base_or_Float",
  /*2+9*/   L"Num",
  /*2+10*/   L"CONST",
  /*2+11*/   L"stringchars",
  /*2+12*/   L"ALIASTEXT",
  /*2+13*/   L"V",
  /*2+14*/   L"N",
  /*2+15*/   L"FM",
  /*2+16*/   L"A",
  /*2+17*/   L"AN",
  /*2+18*/   L"NA",
  /*2+19*/   L"NAN",
  /*2+20*/   L"any",
  /*2+21*/   L"NL_opt",
  /*2+22*/   L"more_Ts",
  /*2+23*/   L"T",
  /*2+24*/   L"simple_type",
  /*2+25*/   L"routine_or_predicate",
  /*2+26*/   L"fn_or_map",
  /*2+27*/   L"OWN_opt",
  /*2+28*/   L"EXTERNAL",
  /*2+29*/   L"EXTERNAL_opt",
  /*2+30*/   L"COMP",
  /*2+31*/   L"ACOMP",
  /*2+32*/   L"exit_or_continue",
  /*2+33*/   L"on_event",
  /*2+34*/   L"BACK",
  /*2+35*/   L"INDEF",
  /*2+36*/   L"IDENT_and_INITDEC",
  /*2+37*/   L"rest_of_IDENT_and_INITDEC",
  /*2+38*/   L"rest_of_ADEFN",
  /*2+39*/   L"OIDENT_ALIAS_opt",
  /*2+40*/   L"more_IDENT_ALIAS_opts",
  /*2+41*/   L"IDENT_ALIAS_opt",
  /*2+42*/   L"ALIAS_opt",
  /*2+43*/   L"rest_of_INITVAR",
  /*2+44*/   L"Rt_Pred_FPP",
  /*2+45*/   L"bracketed_INDEF_or_IEXP",
  /*2+46*/   L"optional_initialiser_repeat_count",
  /*2+47*/   L"initialiser_item",
  /*2+48*/   L"more_initialiser_items",
  /*2+49*/   L"initialiser_list",
  /*2+50*/   L"optional_initialisation_T",
  /*2+51*/   L"EXTA_item",
  /*2+52*/   L"EXTA_list_opt",
  /*2+53*/   L"EXTA_list",
  /*2+54*/   L"INDEF_or_IEXP",
  /*2+55*/   L"STATEMENTS",
  /*2+56*/   L"L",
  /*2+57*/   L"SWID",
  /*2+58*/   L"rest_of_SWIDS",
  /*2+59*/   L"SWIDS",
  /*2+60*/   L"rest_of_SWDEFS",
  /*2+61*/   L"SWDEFS",
  /*2+62*/   L"SWDEF",
  /*2+63*/   L"Star_or_IEXP",
  /*2+64*/   L"FM_or_Star",
  /*2+65*/   L"result_types",
  /*2+66*/   L"Rt_Fn_Map_Pred_DECL",
  /*2+67*/   L"NAME_opt",
  /*2+68*/   L"SPEC_opt",
  /*2+69*/   L"ARRAY_stuff",
  /*2+70*/   L"Declaration_T",
  /*2+71*/   L"optional_parameters",
  /*2+72*/   L"Rt_CALL",
  /*2+73*/   L"Fn_CALL",
  /*2+74*/   L"Map_CALL",
  /*2+75*/   L"Pred_CALL",
  /*2+76*/   L"PROC_or_PROCSPEC",
  /*2+77*/   L"ESCARRAY",
  /*2+78*/   L"ESCREC",
  /*2+79*/   L"ESCREC_opt",
  /*2+80*/   L"ESC_ARRAY_or_REC",
  /*2+81*/   L"simple_label",
  /*2+82*/   L"switch_label",
  /*2+83*/   L"S",
  /*2+84*/   L"jump_destination",
  /*2+85*/   L"SIGNAL",
  /*2+86*/   L"COMMENT_TEXT",
  /*2+87*/   L"COMMENT",
  /*2+88*/   L"COMMENT_T",
  /*2+89*/   L"LHS",
  /*2+90*/   L"IMP",
  /*2+91*/   L"EIMP",
  /*2+92*/   L"XIMP",
  /*2+93*/   L"FELSE_opt",
  /*2+94*/   L"if_or_unless",
  /*2+95*/   L"if_unless_XIMP",
  /*2+96*/   L"if_XIMP_opt",
  /*2+97*/   L"THEN_opt",
  /*2+98*/   L"else_start_IMP_opt",
  /*2+99*/   L"else_if_unless_XIMP_opt",
  /*2+100*/   L"else_if_XIMP_opt",
  /*2+101*/   L"else_final_IMP_opt",
  /*2+102*/   L"start_IMP",
  /*2+103*/   L"final_IMP",
  /*2+104*/   L"more_IMPS",
  /*2+105*/   L"INCL_LIST_opt",
  /*2+106*/   L"STATEMENT",
  /*2+107*/   L"wh_for",
  /*2+108*/   L"cycle_IMP",
  /*2+109*/   L"event_list_def",
  /*2+110*/   L"iu_while_until_for_T",
  /*2+111*/   L"AddressOffsetOp",
  /*2+112*/   L"ADDOP_SEXP_opt",
  /*2+113*/   L"A_or_AN_or_NA_or_NAN",
  /*2+114*/   L"A_or_AN",
  /*2+115*/   L"NA_or_NAN",
  /*2+116*/   L"A_or_AN_opt",
  /*2+117*/   L"NA_or_NAN_opt",
  /*2+118*/   L"VAR_ASSIGN",
  /*2+119*/   L"INIT_DEC_ASSIGNMENTS",
  /*2+120*/   L"rest_of_IDENTS",
  /*2+121*/   L"IDENTS",
  /*2+122*/   L"V_or_N",
  /*2+123*/   L"extra",
  /*2+124*/   L"subevent_and_extra",
  /*2+125*/   L"IMP_ASSIGN",
  /*2+126*/   L"N_ASS",
  /*2+127*/   L"rest_of_AND_COND",
  /*2+128*/   L"AND_COND",
  /*2+129*/   L"rest_of_OR_COND",
  /*2+130*/   L"OR_COND",
  /*2+131*/   L"rest_of_COND",
  /*2+132*/   L"COND",
  /*2+133*/   L"OP1",
  /*2+134*/   L"OP2",
  /*2+135*/   L"OP3",
  /*2+136*/   L"OP1_EXP",
  /*2+137*/   L"OP2_EXP",
  /*2+138*/   L"OP3_EXP",
  /*2+139*/   L"OP1_EXPS",
  /*2+140*/   L"OP2_EXPS",
  /*2+141*/   L"OP3_EXPS",
  /*2+142*/   L"COMP2_opt",
  /*2+143*/   L"COMP2",
  /*2+144*/   L"COMP1",
  /*2+145*/   L"COMP12_opt",
  /*2+146*/   L"DOT_V_Ns",
  /*2+147*/   L"DOT_V_N",
  /*2+148*/   L"COMPARISON",
  /*2+149*/   L"COMP1OS2",
  /*2+150*/   L"SCOND",
  /*2+151*/   L"SIGN_opt",
  /*2+152*/   L"UOP",
  /*2+153*/   L"UOP_opt",
  /*2+154*/   L"dot_Vs_opt",
  /*2+155*/   L"dot_Vs",
  /*2+156*/   L"EXP",
  /*2+157*/   L"EXP2",
  /*2+158*/   L"EXP1",
  /*2+159*/   L"SEXP",
  /*2+160*/   L"COP1",
  /*2+161*/   L"COP2",
  /*2+162*/   L"COP3",
  /*2+163*/   L"CSIGN",
  /*2+164*/   L"rest_of_IEXP2_EXPR",
  /*2+165*/   L"IEXP2_EXPR",
  /*2+166*/   L"COP3_IEXP2_optseq",
  /*2+167*/   L"COP2_IEXP1_optseq",
  /*2+168*/   L"COP1_IEXP0_optseq",
  /*2+169*/   L"CUOP_opt",
  /*2+170*/   L"CUOP",
  /*2+171*/   L"IEXP2",
  /*2+172*/   L"IEXP1",
  /*2+173*/   L"IEXP0",
  /*2+174*/   L"IEXP",
  /*2+175*/   L"PCONST",
  /*2+176*/   L"dq",
  /*2+177*/   L"ACONST",
  /*2+178*/   L"OCONST",
  /*2+179*/   L"SEQ",
  /*2+180*/   L"record_field_decl",
  /*2+181*/   L"OR_record_field_declarations",
  /*2+182*/   L"more_record_field_decls",
  /*2+183*/   L"record_field_declarations",
  /*2+184*/   L"CONST_BOUNDS",
  /*2+185*/   L"RCONST_BOUNDS",
  /*2+186*/   L"BOUNDS_PAIR",
  /*2+187*/   L"rest_of_BPL_LIST",
  /*2+188*/   L"BPL_LIST",
  /*2+189*/   L"BPL",
  /*2+190*/   L"parameter_type",
  /*2+191*/   L"parameter_type_decl",
  /*2+192*/   L"VDEC_or_PROC",
  /*2+193*/   L"More_FPPs",
  /*2+194*/   L"FPP",
  /*2+195*/   L"FPP0",
  /*2+196*/   L"another_FPP0",
  /*2+197*/   L"ADEFN",
  /*2+198*/   L"APP",
  /*2+199*/   L"BASEAPP",
  /*2+200*/   L"APP2",
  /*2+201*/   L"APP3",
  /*2+202*/   L"APP4",
  /*2+203*/   L"APP5",
  /*2+204*/   L"APP6",
  /*2+205*/   L"rest_of_IEXP",
  /*2+206*/   L"const_event_list",
  /*2+207*/   L"N_or_AN_or_NAN",
  /*2+208*/   L"ADDOP_IEXP_opt",
  /*2+209*/   L"rest_of_EQs_init",
  /*2+210*/   L"EQs",
  /*2+211*/   L"INITVAR",
  /*2+212*/   L"RESLEFT_opt",
  /*2+213*/   L"RESRIGHT_opt",
  /*2+214*/   L"RESEXP",
  /*217+0*/   L"whitespace",
  /*217+1*/   L"Imp77_stropping",
  /*217+2*/   L"PROC",
  /*217+3*/   L"PROCSPEC",
  /*217+4*/   L"ZERO",
};
const int bip_map[NUM_BIPS] = {
  /*0*/   0,
  /*1*/   2,
};
const int sequential_phrase_no_to_grammar_index[NUM_SIMPLE_PHRASES] = {
  G_SS,  /*0*/
  G_IDENT,  /*5*/
  G_DeepBase,  /*9*/
  G_Based_Const,  /*15*/
  G_BigCharConst,  /*20*/
  G_CharConst,  /*23*/
  G_OptExponent,  /*30*/
  G_OptDecimal,  /*35*/
  G_Base_or_Float,  /*40*/
  G_Num,  /*46*/
  G_CONST,  /*49*/
  G_stringchars,  /*60*/
  G_ALIASTEXT,  /*70*/
  G_V,  /*75*/
  G_N,  /*79*/
  G_FM,  /*83*/
  G_A,  /*87*/
  G_AN,  /*91*/
  G_NA,  /*95*/
  G_NAN,  /*99*/
  G_any,  /*103*/
  G_NL_opt,  /*106*/
  G_more_Ts,  /*111*/
  G_T,  /*116*/
  G_simple_type,  /*123*/
  G_routine_or_predicate,  /*142*/
  G_fn_or_map,  /*147*/
  G_OWN_opt,  /*158*/
  G_EXTERNAL,  /*166*/
  G_EXTERNAL_opt,  /*177*/
  G_COMP,  /*181*/
  G_ACOMP,  /*205*/
  G_exit_or_continue,  /*212*/
  G_on_event,  /*217*/
  G_BACK,  /*222*/
  G_INDEF,  /*229*/
  G_IDENT_and_INITDEC,  /*232*/
  G_rest_of_IDENT_and_INITDEC,  /*236*/
  G_rest_of_ADEFN,  /*243*/
  G_OIDENT_ALIAS_opt,  /*249*/
  G_more_IDENT_ALIAS_opts,  /*253*/
  G_IDENT_ALIAS_opt,  /*260*/
  G_ALIAS_opt,  /*264*/
  G_rest_of_INITVAR,  /*269*/
  G_Rt_Pred_FPP,  /*276*/
  G_bracketed_INDEF_or_IEXP,  /*282*/
  G_optional_initialiser_repeat_count,  /*287*/
  G_initialiser_item,  /*297*/
  G_more_initialiser_items,  /*301*/
  G_initialiser_list,  /*307*/
  G_optional_initialisation_T,  /*311*/
  G_EXTA_item,  /*319*/
  G_EXTA_list_opt,  /*323*/
  G_EXTA_list,  /*331*/
  G_INDEF_or_IEXP,  /*335*/
  G_STATEMENTS,  /*340*/
  G_L,  /*347*/
  G_SWID,  /*350*/
  G_rest_of_SWIDS,  /*353*/
  G_SWIDS,  /*360*/
  G_rest_of_SWDEFS,  /*364*/
  G_SWDEFS,  /*371*/
  G_SWDEF,  /*375*/
  G_Star_or_IEXP,  /*379*/
  G_FM_or_Star,  /*384*/
  G_result_types,  /*389*/
  G_Rt_Fn_Map_Pred_DECL,  /*409*/
  G_NAME_opt,  /*415*/
  G_SPEC_opt,  /*419*/
  G_ARRAY_stuff,  /*423*/
  G_Declaration_T,  /*433*/
  G_optional_parameters,  /*526*/
  G_Rt_CALL,  /*532*/
  G_Fn_CALL,  /*536*/
  G_Map_CALL,  /*540*/
  G_Pred_CALL,  /*544*/
  G_PROC_or_PROCSPEC,  /*548*/
  G_ESCARRAY,  /*553*/
  G_ESCREC,  /*559*/
  G_ESCREC_opt,  /*564*/
  G_ESC_ARRAY_or_REC,  /*569*/
  G_simple_label,  /*575*/
  G_switch_label,  /*579*/
  G_S,  /*584*/
  G_jump_destination,  /*587*/
  G_SIGNAL,  /*595*/
  G_COMMENT_TEXT,  /*600*/
  G_COMMENT,  /*606*/
  G_COMMENT_T,  /*611*/
  G_LHS,  /*616*/
  G_IMP,  /*626*/
  G_EIMP,  /*680*/
  G_XIMP,  /*693*/
  G_FELSE_opt,  /*702*/
  G_if_or_unless,  /*707*/
  G_if_unless_XIMP,  /*712*/
  G_if_XIMP_opt,  /*717*/
  G_THEN_opt,  /*722*/
  G_else_start_IMP_opt,  /*726*/
  G_else_if_unless_XIMP_opt,  /*731*/
  G_else_if_XIMP_opt,  /*736*/
  G_else_final_IMP_opt,  /*741*/
  G_start_IMP,  /*746*/
  G_final_IMP,  /*754*/
  G_more_IMPS,  /*762*/
  G_INCL_LIST_opt,  /*768*/
  G_STATEMENT,  /*774*/
  G_wh_for,  /*923*/
  G_cycle_IMP,  /*930*/
  G_event_list_def,  /*936*/
  G_iu_while_until_for_T,  /*941*/
  G_AddressOffsetOp,  /*960*/
  G_ADDOP_SEXP_opt,  /*967*/
  G_A_or_AN_or_NA_or_NAN,  /*972*/
  G_A_or_AN,  /*981*/
  G_NA_or_NAN,  /*986*/
  G_A_or_AN_opt,  /*991*/
  G_NA_or_NAN_opt,  /*996*/
  G_VAR_ASSIGN,  /*1001*/
  G_INIT_DEC_ASSIGNMENTS,  /*1012*/
  G_rest_of_IDENTS,  /*1035*/
  G_IDENTS,  /*1042*/
  G_V_or_N,  /*1046*/
  G_extra,  /*1060*/
  G_subevent_and_extra,  /*1066*/
  G_IMP_ASSIGN,  /*1073*/
  G_N_ASS,  /*1089*/
  G_rest_of_AND_COND,  /*1099*/
  G_AND_COND,  /*1104*/
  G_rest_of_OR_COND,  /*1110*/
  G_OR_COND,  /*1115*/
  G_rest_of_COND,  /*1121*/
  G_COND,  /*1127*/
  G_OP1,  /*1131*/
  G_OP2,  /*1148*/
  G_OP3,  /*1158*/
  G_OP1_EXP,  /*1168*/
  G_OP2_EXP,  /*1172*/
  G_OP3_EXP,  /*1176*/
  G_OP1_EXPS,  /*1180*/
  G_OP2_EXPS,  /*1185*/
  G_OP3_EXPS,  /*1190*/
  G_COMP2_opt,  /*1195*/
  G_COMP2,  /*1199*/
  G_COMP1,  /*1203*/
  G_COMP12_opt,  /*1207*/
  G_DOT_V_Ns,  /*1211*/
  G_DOT_V_N,  /*1216*/
  G_COMPARISON,  /*1220*/
  G_COMP1OS2,  /*1243*/
  G_SCOND,  /*1248*/
  G_SIGN_opt,  /*1281*/
  G_UOP,  /*1287*/
  G_UOP_opt,  /*1294*/
  G_dot_Vs_opt,  /*1298*/
  G_dot_Vs,  /*1303*/
  G_EXP,  /*1308*/
  G_EXP2,  /*1327*/
  G_EXP1,  /*1332*/
  G_SEXP,  /*1336*/
  G_COP1,  /*1349*/
  G_COP2,  /*1352*/
  G_COP3,  /*1355*/
  G_CSIGN,  /*1358*/
  G_rest_of_IEXP2_EXPR,  /*1361*/
  G_IEXP2_EXPR,  /*1367*/
  G_COP3_IEXP2_optseq,  /*1371*/
  G_COP2_IEXP1_optseq,  /*1377*/
  G_COP1_IEXP0_optseq,  /*1383*/
  G_CUOP_opt,  /*1389*/
  G_CUOP,  /*1393*/
  G_IEXP2,  /*1396*/
  G_IEXP1,  /*1401*/
  G_IEXP0,  /*1405*/
  G_IEXP,  /*1416*/
  G_PCONST,  /*1426*/
  G_dq,  /*1431*/
  G_ACONST,  /*1434*/
  G_OCONST,  /*1438*/
  G_SEQ,  /*1442*/
  G_record_field_decl,  /*1452*/
  G_OR_record_field_declarations,  /*1567*/
  G_more_record_field_decls,  /*1573*/
  G_record_field_declarations,  /*1580*/
  G_CONST_BOUNDS,  /*1585*/
  G_RCONST_BOUNDS,  /*1592*/
  G_BOUNDS_PAIR,  /*1599*/
  G_rest_of_BPL_LIST,  /*1604*/
  G_BPL_LIST,  /*1610*/
  G_BPL,  /*1614*/
  G_parameter_type,  /*1619*/
  G_parameter_type_decl,  /*1632*/
  G_VDEC_or_PROC,  /*1647*/
  G_More_FPPs,  /*1656*/
  G_FPP,  /*1662*/
  G_FPP0,  /*1666*/
  G_another_FPP0,  /*1669*/
  G_ADEFN,  /*1675*/
  G_APP,  /*1679*/
  G_BASEAPP,  /*1692*/
  G_APP2,  /*1695*/
  G_APP3,  /*1701*/
  G_APP4,  /*1710*/
  G_APP5,  /*1722*/
  G_APP6,  /*1737*/
  G_rest_of_IEXP,  /*1755*/
  G_const_event_list,  /*1760*/
  G_N_or_AN_or_NAN,  /*1764*/
  G_ADDOP_IEXP_opt,  /*1774*/
  G_rest_of_EQs_init,  /*1779*/
  G_EQs,  /*1785*/
  G_INITVAR,  /*1797*/
  G_RESLEFT_opt,  /*1802*/
  G_RESRIGHT_opt,  /*1807*/
  G_RESEXP,  /*1812*/
};

const wchar_t *semantic_phrasename[NUM_SEMANTIC_PHRASES] = {
  /*0*/   L"whitespace",
  /*1*/   L"Imp77_stropping",
  /*2*/   L"PROC",
  /*3*/   L"PROCSPEC",
  /*4*/   L"ZERO",
};

const wchar_t *semantic_code[NUM_SEMANTIC_PHRASES] = {
  /*0*/   L"\n"
             "#ifdef IN_PARSER\n"
             "  while (source(TP).ch==' ' || source(TP).ch=='\\t' || source(TP).ch=='\\f') {\n"
             "    TP += 1;\n"
             "  }\n"
             "#endif\n"
             "  return TRUE;\n",
  /*1*/   L"\n"
             "#ifdef IN_PARSER\n"
             "  int debug_stropping = 0;\n"
             "\n"
             "  // The source file has already been read trivially into source().\n"
             "  \n"
             "  // We will copy from source() into temp(), then perform line reconstruction\n"
             "  // on temp(), writing back to source().  The parser will then parse source()\n"
             "  // into atoms according to the grammar.  Initially it will only store the\n"
             "  // reconstructed characters into the atoms, but once it is working, I will\n"
             "  // modify it to also store the unreconsructed source for use in source-to-source\n"
             "  // translations, where whitespace, embedded comments, and indentation is\n"
             "  // desired in the translation, in order to mirror the original file.\n"
             "\n"
             "  // Because unfortunately underlining in Unicode is done by a *following*\n"
             "  // underline joiner character (818) rather than being a single unicode\n"
             "  // code point, it is difficult to use a single-character encoding of a\n"
             "  // stropped keyword letter - what the old Imp compilers would represent\n"
             "  // by adding 128 to the character.  However there *is* an alternive\n"
             "  // source of upper case and lower case letters in the mathematics area!\n"
             "\n"
             "  // A:Z could be encoded as 1D400:1D419 and a:z as 1D41A:1D433 :-)\n"
             "  // but for now I'm encoding keywords in lower case and variables in\n"
             "  // upper case.\n"
             "  \n"
             "  // The 1D400+ encoding looks more or less like ordinary text if it happens\n"
             "  // to be displayed (e.g. during debugging) although there should never be\n"
             "  // any need to display internally-coded keywords to users of the\n"
             "  // compilers built with this parser.\n"
             "\n"
             "  // All arrays are flex and the upper bound is a limit, not a minimum.\n"
             "  DECLARE(SYM, reconstructed, 128000000/*600000*/);\n"
             "#define _SYM(x) WRITE(x,SYM,reconstructed)\n"
             "#define  SYM(x)  READ(x,SYM,reconstructed)\n"
             "\n"
             "  int LASTP, P = 0;\n"
             "  while (source(P).ch != 0 /* WEOF */) {\n"
             "    _SYM(P).ch = source(P).ch;\n"
             "    _SYM(P).start = P; _SYM(P).end = P+1;\n"
             "    P += 1;\n"
             "  }\n"
             "  _SYM(P).ch = 0 /* WEOF */;\n"
             "  _SYM(P).start = P; _SYM(P).end = P; // no chars for EOF\n"
             "  LASTP = P;\n"
             "  \n"
             "  if (debug_stropping) {\n"
             "    int I;\n"
             "    fprintf(stderr, \"source() moved to SYM(0:%d) = \\\"\", LASTP);\n"
             "    for (I = 0; I < LASTP; I++) {\n"
             "      fprintf(stderr, \"%lc\", SYM(I).ch);\n"
             "    }\n"
             "    if (SYM(LASTP).ch != 0) fprintf(stderr, \"[%d]\", SYM(LASTP).ch);\n"
             "    fprintf(stderr, \"\\\";\\n\");\n"
             "  };\n"
             "\n"
             "  int FP = 0, PP = 0; // Fetch Pointer, Put Pointer.\n"
             "\n"
             "#define DONE() \\\n"
             "        do {                                                                        \\\n"
             "            FP -= 1; /* the terminating 0*/                                         \\\n"
             "            _source(PP).ch = 0;                                                     \\\n"
             "            _source(PP).end = SYM(FP).end;                                          \\\n"
             "            if (debug_stropping) {                                                  \\\n"
             "              int I;                                                                \\\n"
             "              fprintf(stderr, \"SYM(0:%d) moved back to source(0:%d) = \\\"\", FP, PP); \\\n"
             "              for (I = 0; I < PP; I++) {                                            \\\n"
             "                fprintf(stderr, \"%lc\", source(I).ch);                               \\\n"
             "              }                                                                     \\\n"
             "              if (source(PP).ch != 0) fprintf(stderr, \"[%d]\", source(PP).ch);       \\\n"
             "              fprintf(stderr, \"\\\";\\n\");                                             \\\n"
             "            }                                                                       \\\n"
             "            return TRUE;                                                            \\\n"
             "        } while (0)\n"
             "\n"
             "  wint_t WC;\n"
             "\n"
             "  // NOTE THAT WITH THIS IMP77 GRAMMAR, '\\n' IS NOT WHITESPACE.  LINE ENDINGS ARE EXPLICITLY\n"
             "  // ENTERED IN THE GRAMMAR.  (See the phrases <T>, and <NL_opt>.\n"
             "  \n"
             "  // uparse.c has been modified so that its implicit whitespace skipping no longer skips '\\n'.\n"
             "  // (The algol60 parser in contrast treats all \\n's the same as spaces)\n"
             "  \n"
             "  // HOW TO HANDLE ' IN A PARSED COMMENT?\n"
             "  //\n"
             "  // %COMMENT A ' MESSES UP!\n"
             "  //\n"
             "  // because it keeps scanning until a closing quote.  However if you don't scan between quotes,\n"
             "  // line reconstruction will lose spaces within strings!\n"
             "  //\n"
             "  // You can't just end a quoted string at a newline because embedded newlines are allowed.\n"
             "  // And I checked Imp77 - it allows a single quote ch in a comment.\n"
             "\n"
             "  // If line reconstruction were being done on the fly then it could be modified if we knew we were\n"
             "  // in a comment, but since we're doing it all in advance, the only option to handle this appears\n"
             "  // to be that whenever we're in a comment, we throw away all the following line reconstruction and\n"
             "  // re-do it, with that comment handled differently.\n"
             "\n"
             "  // Or bite the bullet and work out how to do line reconstruction on the fly (which my previous\n"
             "  // imptoc did eventually manage using the 'demandload' call. So *every* fetch via TP would have\n"
             "  // to be recoded as a procedure call, with on-the-fly line reconstruction, and either a way to\n"
             "  // undo it if backtracking or simply never doing it any farther past TP and undoing it on backtracking.\n"
             "\n"
             "  // What a can of worms just to handle badly designed comments.  TO DO.\n"
             "\n"
             "#define CHECK_EOF(x) do if ((x) == 0) DONE(); else { _source(PP).end = SYM(FP-1).end; } while (0)\n"
             "\n"
             "  // PP is the 'current' slot we are writing into.\n"
             "  _source(PP).start = SYM(FP).start;\n"
             "\n"
             "  for (;;) {\n"
             "\n"
             "    _source(PP).end = SYM(FP).end; // Keep updated.\n"
             "    WC = SYM(FP++).ch; CHECK_EOF(WC);\n"
             "\n"
             "    if (WC == '%') { // We found a keyword.  It will always be read up to the last character of the keyword.\n"
             "\n"
             "      for (;;) {\n"
             "        WC = SYM(FP++).ch; CHECK_EOF(WC);\n"
             "        if (WC == '%') {\n"
             "\n"
             "        } else if (!isalpha(WC)) {\n"
             "          // It's possible to have a bunch of '%' signs and *no* keyword characters.\n"
             "          --FP; // point FP back to the non-keyword character, not as currently, the one past that.\n"
             "          break;\n"
             "        } else { // isalpha(WC)\n"
             "          if (isupper(WC)) WC = tolower(WC);\n"
             "          _source(PP).end = SYM(FP-1).end; // | 128\n"
             "          _source(PP++).ch = WC; // | 128\n"
             "          _source(PP).start = SYM(FP).start; // | 128\n"
             "        }\n"
             "      }\n"
             "      continue;\n"
             "    }\n"
             "\n"
             "    else if (WC == '{') {\n"
             "\n"
             "      for (;;) {\n"
             "        WC = SYM(FP++).ch; CHECK_EOF(WC);\n"
             "\n"
             "        if (WC == '\\n') {\n"
             "          --FP; /* re-read the \\n as a significant character */                                                                 // _source(PP).end = SYM(FP-1).end; // point FP back to the newline\n"
             "          break;\n"
             "        }\n"
             "        if (WC == '}') {  // Not sure if \\n should be gobbled for {this style\n"
             "          break; // but still looking.\n"
             "        }\n"
             "      }\n"
             "      continue;\n"
             "    }\n"
             "\n"
             "    else if (WC == '\\'') {\n"
             "      _source(PP++).ch = WC;\n"
             "      for (;;) {\n"
             "        WC = SYM(FP++).ch; CHECK_EOF(WC);\n"
             "        if (WC == '\\'') {\n"
             "          // peek ahead:\n"
             "          int Peek = SYM(FP).ch; CHECK_EOF(Peek);\n"
             "          if (Peek == '\\'') { // doubled 's\n"
             "            _source(PP++).ch = WC;\n"
             "            _source(PP++).ch = Peek;\n"
             "            FP++;\n"
             "          } else {\n"
             "            _source(PP).ch = WC;\n"
             "            _source(PP).end = SYM(FP-1).end; // Leave Peek for later.\n"
             "            PP++;\n"
             "            break;\n"
             "          }\n"
             "        } else {\n"
             "          _source(PP++).ch = WC;\n"
             "        }\n"
             "      }\n"
             "      continue;\n"
             "    }\n"
             "\n"
             "    else if (WC == '\"') { // TO DO: Update ' and \" items in imp77 as well\n"
             "      _source(PP++).ch = WC;\n"
             "      for (;;) {\n"
             "        WC = SYM(FP++).ch; CHECK_EOF(WC);\n"
             "        if (WC == '\"') {\n"
             "          // peek ahead:\n"
             "          int Peek = SYM(FP).ch; CHECK_EOF(Peek);\n"
             "          if (Peek == '\"') { // doubled \"s\n"
             "            _source(PP++).ch = WC;\n"
             "            _source(PP++).ch = Peek;\n"
             "            FP++;\n"
             "          } else {\n"
             "            _source(PP).ch = WC;\n"
             "            _source(PP).end = SYM(FP-1).end; // Leave Peek for later.\n"
             "            PP++;\n"
             "            break;\n"
             "          }\n"
             "        } else {\n"
             "          _source(PP++).ch = WC;\n"
             "        }\n"
             "      }\n"
             "      continue;\n"
             "    }\n"
             "\n"
             "    else if (WC == ' ' || WC == '\\t' || WC == '\\f') {  // use iswblank(WC) instead?\n"
             "\n"
             "      continue;\n"
             "    }\n"
             "\n"
             "\n"
             "\n"
             "\n"
             "    else {\n"
             "      // everything else just returns one significant non-space character. This includes '\\n'.\n"
             "\n"
             "      if ((WC == '\\n') && ((PP>0) && (source(PP-1).ch == 'c'))) {  // BEWARE WHEN CHANGING STROPPING ENCODING: Looking for a preceding '%C' ...\n"
             "        if (PP>0) _source(PP-1).ch = ' '; // remove the '%c'\n"
             "        _source(PP++).ch = ' '; // remove the newline\n"
             "\n"
             "        // This is the only place where we gobble spaces *after* a token rather than before.\n"
             "        // It may be cleaner to set a 'continuation' flag and gobble them before the next\n"
             "        // symbol fetch rather than do it here in a lookahead.  Esp. wrt to reconstituting source\n"
             "        // from the array for the listing file etc etc.\n"
             "        // BUT FOR NOW, %C IS HANDLED BY THS HACK:\n"
             "\n"
             "        int Lookahead = FP;\n"
             "        while (SYM(Lookahead).ch == '\\n' || SYM(Lookahead).ch == ' ' || SYM(Lookahead).ch == '\\t' || SYM(Lookahead).ch == '\\f') { // Use iswblank()?\n"
             "          // No worries about  '{...}' - this behaviour seems to be identical to Imp77's\n"
             "          _SYM(Lookahead).ch = ' ';   // gobble following newlines and whitespace before next significant character.\n"
             "          Lookahead++;\n"
             "        }\n"
             "        continue;\n"
             "      }\n"
             "\n"
             "      if (iswalpha(WC) && iswlower(WC)) {\n"
             "        WC = towupper(WC);  // ALSO TEMPORARY\n"
             "      }\n"
             "      _source(PP++).ch = WC;\n"
             "      continue;\n"
             "    }\n"
             "\n"
             "\n"
             "    // Still skipping whitespace ...\n"
             "\n"
             "  }\n"
             "\n"
             "  DONE();\n"
             "  P = 0;\n"
             "  while (source(P).ch != 0) {\n"
             "    if (debug_stropping) fprintf(stderr, \"%d: ch='%lc'  start=%d:end=%d\\n\", P, source(P).ch, source(P).start, source(P).end);\n"
             "    P++;\n"
             "  }\n"
             "\n"
             "#undef DONE\n"
             "#endif\n"
             "  return TRUE;\n",
  /*2*/   L" return TRUE; ",
  /*3*/   L" return TRUE; ",
  /*4*/   L" return TRUE; ",
};

parsefn parsetime[NUM_SEMANTIC_PHRASES] = {
  /*0*/   &parse_whitespace,
  /*1*/   &parse_Imp77_stropping,
  /*2*/   &parse_PROC,
  /*3*/   &parse_PROCSPEC,
  /*4*/   &parse_ZERO,
};

// 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,
  /* 34*/   NULL,
  /* 35*/   NULL,
  /* 36*/   NULL,
  /* 37*/   NULL,
  /* 38*/   NULL,
  /* 39*/   NULL,
  /* 40*/   NULL,
  /* 41*/   NULL,
  /* 42*/   NULL,
  /* 43*/   NULL,
  /* 44*/   NULL,
  /* 45*/   NULL,
  /* 46*/   NULL,
  /* 47*/   NULL,
  /* 48*/   NULL,
  /* 49*/   NULL,
  /* 50*/   NULL,
  /* 51*/   NULL,
  /* 52*/   NULL,
  /* 53*/   NULL,
  /* 54*/   NULL,
  /* 55*/   NULL,
  /* 56*/   NULL,
  /* 57*/   NULL,
  /* 58*/   NULL,
  /* 59*/   NULL,
  /* 60*/   NULL,
  /* 61*/   NULL,
  /* 62*/   NULL,
  /* 63*/   NULL,
  /* 64*/   NULL,
  /* 65*/   NULL,
  /* 66*/   NULL,
  /* 67*/   NULL,
  /* 68*/   NULL,
  /* 69*/   NULL,
  /* 70*/   NULL,
  /* 71*/   NULL,
  /* 72*/   NULL,
  /* 73*/   NULL,
  /* 74*/   NULL,
  /* 75*/   NULL,
  /* 76*/   NULL,
  /* 77*/   NULL,
  /* 78*/   NULL,
  /* 79*/   NULL,
  /* 80*/   NULL,
  /* 81*/   NULL,
  /* 82*/   NULL,
  /* 83*/   NULL,
  /* 84*/   NULL,
  /* 85*/   NULL,
  /* 86*/   NULL,
  /* 87*/   NULL,
  /* 88*/   NULL,
  /* 89*/   NULL,
  /* 90*/   NULL,
  /* 91*/   NULL,
  /* 92*/   NULL,
  /* 93*/   NULL,
  /* 94*/   NULL,
  /* 95*/   NULL,
  /* 96*/   NULL,
  /* 97*/   NULL,
  /* 98*/   NULL,
  /* 99*/   NULL,
  /*100*/   NULL,
  /*101*/   NULL,
  /*102*/   NULL,
  /*103*/   NULL,
  /*104*/   NULL,
  /*105*/   NULL,
  /*106*/   NULL,
  /*107*/   NULL,
  /*108*/   NULL,
  /*109*/   NULL,
  /*110*/   NULL,
  /*111*/   NULL,
  /*112*/   NULL,
  /*113*/   NULL,
  /*114*/   NULL,
  /*115*/   NULL,
  /*116*/   NULL,
  /*117*/   NULL,
  /*118*/   NULL,
  /*119*/   NULL,
  /*120*/   NULL,
  /*121*/   NULL,
  /*122*/   NULL,
  /*123*/   NULL,
  /*124*/   NULL,
  /*125*/   NULL,
  /*126*/   NULL,
  /*127*/   NULL,
  /*128*/   NULL,
  /*129*/   NULL,
  /*130*/   NULL,
  /*131*/   NULL,
  /*132*/   NULL,
  /*133*/   NULL,
  /*134*/   NULL,
  /*135*/   NULL,
  /*136*/   NULL,
  /*137*/   NULL,
  /*138*/   NULL,
  /*139*/   NULL,
  /*140*/   NULL,
  /*141*/   NULL,
  /*142*/   NULL,
  /*143*/   NULL,
  /*144*/   NULL,
  /*145*/   NULL,
  /*146*/   NULL,
  /*147*/   NULL,
  /*148*/   NULL,
  /*149*/   NULL,
  /*150*/   NULL,
  /*151*/   NULL,
  /*152*/   NULL,
  /*153*/   NULL,
  /*154*/   NULL,
  /*155*/   NULL,
  /*156*/   NULL,
  /*157*/   NULL,
  /*158*/   NULL,
  /*159*/   NULL,
  /*160*/   NULL,
  /*161*/   NULL,
  /*162*/   NULL,
  /*163*/   NULL,
  /*164*/   NULL,
  /*165*/   NULL,
  /*166*/   NULL,
  /*167*/   NULL,
  /*168*/   NULL,
  /*169*/   NULL,
  /*170*/   NULL,
  /*171*/   NULL,
  /*172*/   NULL,
  /*173*/   NULL,
  /*174*/   NULL,
  /*175*/   NULL,
  /*176*/   NULL,
  /*177*/   NULL,
  /*178*/   NULL,
  /*179*/   NULL,
  /*180*/   NULL,
  /*181*/   NULL,
  /*182*/   NULL,
  /*183*/   NULL,
  /*184*/   NULL,
  /*185*/   NULL,
  /*186*/   NULL,
  /*187*/   NULL,
  /*188*/   NULL,
  /*189*/   NULL,
  /*190*/   NULL,
  /*191*/   NULL,
  /*192*/   NULL,
  /*193*/   NULL,
  /*194*/   NULL,
  /*195*/   NULL,
  /*196*/   NULL,
  /*197*/   NULL,
  /*198*/   NULL,
  /*199*/   NULL,
  /*200*/   NULL,
  /*201*/   NULL,
  /*202*/   NULL,
  /*203*/   NULL,
  /*204*/   NULL,
  /*205*/   NULL,
  /*206*/   NULL,
  /*207*/   NULL,
  /*208*/   NULL,
  /*209*/   NULL,
  /*210*/   NULL,
  /*211*/   NULL,
  /*212*/   NULL,
  /*213*/   NULL,
  /*214*/   NULL,
  /*215*/   NULL,
  /*216*/   NULL,
  /*217*/   NULL,
  /*218*/   NULL,
  /*219*/   NULL,
  /*220*/   NULL,
  /*221*/   NULL,
};
const wchar_t *ast_code[NUM_SIMPLE_PHRASES] = {
  /*SS*/   L"",
  /*IDENT*/   L"",
  /*DeepBase*/   L"",
  /*Based_Const*/   L"",
  /*BigCharConst*/   L"",
  /*CharConst*/   L"",
  /*OptExponent*/   L"",
  /*OptDecimal*/   L"",
  /*Base_or_Float*/   L"",
  /*Num*/   L"",
  /*CONST*/   L"",
  /*stringchars*/   L"",
  /*ALIASTEXT*/   L"",
  /*V*/   L"\n"
             "  fprintf(stderr, \"[V]\");\n",
  /*N*/   L"\n"
             "  fprintf(stderr, \"[N]\");\n",
  /*FM*/   L"\n"
             "  fprintf(stderr, \"[FM]\");\n",
  /*A*/   L"\n"
             "  fprintf(stderr, \"[A]\");\n",
  /*AN*/   L"\n"
             "  fprintf(stderr, \"[AN]\");\n",
  /*NA*/   L"\n"
             "  fprintf(stderr, \"[NA]\");\n",
  /*NAN*/   L"\n"
             "  fprintf(stderr, \"[NAN]\");\n",
  /*any*/   L"",
  /*NL_opt*/   L"",
  /*more_Ts*/   L"",
  /*T*/   L"",
  /*simple_type*/   L"",
  /*routine_or_predicate*/   L"\n"
             "  fprintf(stderr, (alt == 1) ? \"[R]\" : \"[P]\");\n",
  /*fn_or_map*/   L"\n"
             "  fprintf(stderr, (alt <= 2) ? \"[F]\" : \"[M]\");\n",
  /*OWN_opt*/   L"",
  /*EXTERNAL*/   L"",
  /*EXTERNAL_opt*/   L"",
  /*COMP*/   L"",
  /*ACOMP*/   L"",
  /*exit_or_continue*/   L"",
  /*on_event*/   L"",
  /*BACK*/   L"",
  /*INDEF*/   L"",
  /*IDENT_and_INITDEC*/   L"",
  /*rest_of_IDENT_and_INITDEC*/   L"",
  /*rest_of_ADEFN*/   L"",
  /*OIDENT_ALIAS_opt*/   L"",
  /*more_IDENT_ALIAS_opts*/   L"",
  /*IDENT_ALIAS_opt*/   L"",
  /*ALIAS_opt*/   L"",
  /*rest_of_INITVAR*/   L"",
  /*Rt_Pred_FPP*/   L"",
  /*bracketed_INDEF_or_IEXP*/   L"",
  /*optional_initialiser_repeat_count*/   L"",
  /*initialiser_item*/   L"",
  /*more_initialiser_items*/   L"",
  /*initialiser_list*/   L"",
  /*optional_initialisation_T*/   L"",
  /*EXTA_item*/   L"",
  /*EXTA_list_opt*/   L"",
  /*EXTA_list*/   L"",
  /*INDEF_or_IEXP*/   L"",
  /*STATEMENTS*/   L"",
  /*L*/   L"",
  /*SWID*/   L"",
  /*rest_of_SWIDS*/   L"",
  /*SWIDS*/   L"",
  /*rest_of_SWDEFS*/   L"",
  /*SWDEFS*/   L"",
  /*SWDEF*/   L"",
  /*Star_or_IEXP*/   L"",
  /*FM_or_Star*/   L"",
  /*result_types*/   L"",
  /*Rt_Fn_Map_Pred_DECL*/   L"",
  /*NAME_opt*/   L"",
  /*SPEC_opt*/   L"",
  /*ARRAY_stuff*/   L"",
  /*Declaration_T*/   L"",
  /*optional_parameters*/   L"",
  /*Rt_CALL*/   L"",
  /*Fn_CALL*/   L"",
  /*Map_CALL*/   L"",
  /*Pred_CALL*/   L"",
  /*PROC_or_PROCSPEC*/   L"",
  /*ESCARRAY*/   L"",
  /*ESCREC*/   L"",
  /*ESCREC_opt*/   L"",
  /*ESC_ARRAY_or_REC*/   L"",
  /*simple_label*/   L"",
  /*switch_label*/   L"",
  /*S*/   L"",
  /*jump_destination*/   L"",
  /*SIGNAL*/   L"",
  /*COMMENT_TEXT*/   L"",
  /*COMMENT*/   L"",
  /*COMMENT_T*/   L"\n"
             "  return -1;\n",
  /*LHS*/   L"",
  /*IMP*/   L"",
  /*EIMP*/   L"",
  /*XIMP*/   L"",
  /*FELSE_opt*/   L"",
  /*if_or_unless*/   L"",
  /*if_unless_XIMP*/   L"",
  /*if_XIMP_opt*/   L"",
  /*THEN_opt*/   L"",
  /*else_start_IMP_opt*/   L"",
  /*else_if_unless_XIMP_opt*/   L"",
  /*else_if_XIMP_opt*/   L"",
  /*else_final_IMP_opt*/   L"",
  /*start_IMP*/   L"",
  /*final_IMP*/   L"",
  /*more_IMPS*/   L"",
  /*INCL_LIST_opt*/   L"",
  /*STATEMENT*/   L"",
  /*wh_for*/   L"",
  /*cycle_IMP*/   L"",
  /*event_list_def*/   L"",
  /*iu_while_until_for_T*/   L"",
  /*AddressOffsetOp*/   L"",
  /*ADDOP_SEXP_opt*/   L"",
  /*A_or_AN_or_NA_or_NAN*/   L"",
  /*A_or_AN*/   L"",
  /*NA_or_NAN*/   L"",
  /*A_or_AN_opt*/   L"",
  /*NA_or_NAN_opt*/   L"",
  /*VAR_ASSIGN*/   L"",
  /*INIT_DEC_ASSIGNMENTS*/   L"",
  /*rest_of_IDENTS*/   L"",
  /*IDENTS*/   L"",
  /*V_or_N*/   L"",
  /*extra*/   L"",
  /*subevent_and_extra*/   L"",
  /*IMP_ASSIGN*/   L"",
  /*N_ASS*/   L"",
  /*rest_of_AND_COND*/   L"",
  /*AND_COND*/   L"",
  /*rest_of_OR_COND*/   L"",
  /*OR_COND*/   L"",
  /*rest_of_COND*/   L"",
  /*COND*/   L"",
  /*OP1*/   L"",
  /*OP2*/   L"",
  /*OP3*/   L"",
  /*OP1_EXP*/   L"",
  /*OP2_EXP*/   L"",
  /*OP3_EXP*/   L"",
  /*OP1_EXPS*/   L"",
  /*OP2_EXPS*/   L"",
  /*OP3_EXPS*/   L"",
  /*COMP2_opt*/   L"",
  /*COMP2*/   L"",
  /*COMP1*/   L"",
  /*COMP12_opt*/   L"",
  /*DOT_V_Ns*/   L"",
  /*DOT_V_N*/   L"",
  /*COMPARISON*/   L"",
  /*COMP1OS2*/   L"",
  /*SCOND*/   L"",
  /*SIGN_opt*/   L"",
  /*UOP*/   L"",
  /*UOP_opt*/   L"",
  /*dot_Vs_opt*/   L"",
  /*dot_Vs*/   L"",
  /*EXP*/   L"",
  /*EXP2*/   L"",
  /*EXP1*/   L"",
  /*SEXP*/   L"",
  /*COP1*/   L"",
  /*COP2*/   L"",
  /*COP3*/   L"",
  /*CSIGN*/   L"",
  /*rest_of_IEXP2_EXPR*/   L"",
  /*IEXP2_EXPR*/   L"",
  /*COP3_IEXP2_optseq*/   L"",
  /*COP2_IEXP1_optseq*/   L"",
  /*COP1_IEXP0_optseq*/   L"",
  /*CUOP_opt*/   L"",
  /*CUOP*/   L"",
  /*IEXP2*/   L"",
  /*IEXP1*/   L"",
  /*IEXP0*/   L"",
  /*IEXP*/   L"",
  /*PCONST*/   L"",
  /*dq*/   L"",
  /*ACONST*/   L"",
  /*OCONST*/   L"",
  /*SEQ*/   L"",
  /*record_field_decl*/   L"",
  /*OR_record_field_declarations*/   L"",
  /*more_record_field_decls*/   L"",
  /*record_field_declarations*/   L"",
  /*CONST_BOUNDS*/   L"",
  /*RCONST_BOUNDS*/   L"",
  /*BOUNDS_PAIR*/   L"",
  /*rest_of_BPL_LIST*/   L"",
  /*BPL_LIST*/   L"",
  /*BPL*/   L"",
  /*parameter_type*/   L"",
  /*parameter_type_decl*/   L"",
  /*VDEC_or_PROC*/   L"",
  /*More_FPPs*/   L"",
  /*FPP*/   L"",
  /*FPP0*/   L"",
  /*another_FPP0*/   L"",
  /*ADEFN*/   L"",
  /*APP*/   L"",
  /*BASEAPP*/   L"",
  /*APP2*/   L"",
  /*APP3*/   L"",
  /*APP4*/   L"",
  /*APP5*/   L"",
  /*APP6*/   L"",
  /*rest_of_IEXP*/   L"",
  /*const_event_list*/   L"",
  /*N_or_AN_or_NAN*/   L"",
  /*ADDOP_IEXP_opt*/   L"",
  /*rest_of_EQs_init*/   L"",
  /*EQs*/   L"",
  /*INITVAR*/   L"",
  /*RESLEFT_opt*/   L"",
  /*RESRIGHT_opt*/   L"",
  /*RESEXP*/   L"",
};

const wchar_t *keyword[NUM_KEYWORDS] = {
  /*  0*/   L"integer",
  /*  1*/   L"real",
  /*  2*/   L"byteinteger",
  /*  3*/   L"byte",
  /*  4*/   L"shortinteger",
  /*  5*/   L"short",
  /*  6*/   L"longinteger",
  /*  7*/   L"longreal",
  /*  8*/   L"long",
  /*  9*/   L"routine",
  /* 10*/   L"predicate",
  /* 11*/   L"function",
  /* 12*/   L"fn",
  /* 13*/   L"map",
  /* 14*/   L"namefn",
  /* 15*/   L"namefunction",
  /* 16*/   L"own",
  /* 17*/   L"constant",
  /* 18*/   L"const",
  /* 19*/   L"external",
  /* 20*/   L"system",
  /* 21*/   L"dynamic",
  /* 22*/   L"prim",
  /* 23*/   L"perm",
  /* 24*/   L"exit",
  /* 25*/   L"continue",
  /* 26*/   L"onevent",
  /* 27*/   L"on",
  /* 28*/   L"return",
  /* 29*/   L"true",
  /* 30*/   L"false",
  /* 31*/   L"alias",
  /* 32*/   L"string",
  /* 33*/   L"record",
  /* 34*/   L"name",
  /* 35*/   L"spec",
  /* 36*/   L"array",
  /* 37*/   L"recordformatspec",
  /* 38*/   L"recordformat",
  /* 39*/   L"switch",
  /* 40*/   L"label",
  /* 41*/   L"signalevent",
  /* 42*/   L"signal",
  /* 43*/   L"comment",
  /* 44*/   L"result",
  /* 45*/   L"stop",
  /* 46*/   L"monitor",
  /* 47*/   L"start",
  /* 48*/   L"then",
  /* 49*/   L"finish",
  /* 50*/   L"else",
  /* 51*/   L"if",
  /* 52*/   L"unless",
  /* 53*/   L"and",
  /* 54*/   L"list",
  /* 55*/   L"endoflist",
  /* 56*/   L"begin",
  /* 57*/   L"program",
  /* 58*/   L"endofprogram",
  /* 59*/   L"endoffile",
  /* 60*/   L"endofperm",
  /* 61*/   L"end",
  /* 62*/   L"cycle",
  /* 63*/   L"repeat",
  /* 64*/   L"until",
  /* 65*/   L"control",
  /* 66*/   L"diagnose",
  /* 67*/   L"include",
  /* 68*/   L"realslong",
  /* 69*/   L"realsnormal",
  /* 70*/   L"option",
  /* 71*/   L"while",
  /* 72*/   L"for",
  /* 73*/   L"or",
  /* 74*/   L"not",
};
const wchar_t *regexps[NUM_REGEXPS] = {
  /*0*/   L"^[A-Z][A-Z0-9 ]*",
  /*1*/   L"^[0-9A-Z][0-9A-Z ]*",
  /*2*/   L"^'([^\']|'')*'",
  /*3*/   L"^''''",
  /*4*/   L"^''",
  /*5*/   L"^'.'",
  /*6*/   L"^[0-9][0-9 ]*",
  /*7*/   L"^[MBKXR]",
  /*8*/   L"^.",
};
const int gram[NUM_GRAMMAR /* 1819 */] = {

// P<SS> = ...;
  /*  0*/ COUNT_OF_ALTS    | 0x000001,
  /*  1*/ COUNT_OF_PHRASES | 0x000003,
  /*  2*/ SEMANTIC_TYPE    | S_Imp77_stropping,
  /*  3*/ PHRASE_TYPE      | G_NL_opt,
  /*  4*/ PHRASE_TYPE      | G_STATEMENTS,

// P<IDENT> = ...;
  /*  5*/ COUNT_OF_ALTS    | 0x000001,
  /*  6*/ COUNT_OF_PHRASES | 0x000002,
  /*  7*/ PHRASE_TYPE      | NEGATED_PHRASE     | G_CONST,
  /*  8*/ REGEXP_TYPE      | WHITESPACE_ALLOWED | 0x000000,  /* ^[A-Z][A-Z0-9 ]* */

// P<DeepBase> = ...;
  /*  9*/ COUNT_OF_ALTS    | 0x000002,
  /* 10*/ COUNT_OF_PHRASES | 0x000003,
  /* 11*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00005f,  /* '_' */
  /* 12*/ REGEXP_TYPE      | WHITESPACE_ALLOWED | 0x000001,  /* ^[0-9A-Z][0-9A-Z ]* */
  /* 13*/ PHRASE_TYPE      | G_DeepBase,
  /* 14*/ COUNT_OF_PHRASES | 0x000000,

// P<Based_Const> = ...;
  /* 15*/ COUNT_OF_ALTS    | 0x000001,
  /* 16*/ COUNT_OF_PHRASES | 0x000003,
  /* 17*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00005f,  /* '_' */
  /* 18*/ REGEXP_TYPE      | WHITESPACE_ALLOWED | 0x000001,  /* ^[0-9A-Z][0-9A-Z ]* */
  /* 19*/ PHRASE_TYPE      | G_DeepBase,

// P<BigCharConst> = ...;
  /* 20*/ COUNT_OF_ALTS    | 0x000001,
  /* 21*/ COUNT_OF_PHRASES | 0x000001,
  /* 22*/ REGEXP_TYPE      | WHITESPACE_ALLOWED | 0x000002,  /* ^'([^\']|'')*' */

// P<CharConst> = ...;
  /* 23*/ COUNT_OF_ALTS    | 0x000003,
  /* 24*/ COUNT_OF_PHRASES | 0x000001,
  /* 25*/ REGEXP_TYPE      | WHITESPACE_ALLOWED | 0x000003,  /* ^'''' */
  /* 26*/ COUNT_OF_PHRASES | 0x000001,
  /* 27*/ REGEXP_TYPE      | WHITESPACE_ALLOWED | 0x000004,  /* ^'' */
  /* 28*/ COUNT_OF_PHRASES | 0x000001,
  /* 29*/ REGEXP_TYPE      | WHITESPACE_ALLOWED | 0x000005,  /* ^'.' */

// P<OptExponent> = ...;
  /* 30*/ COUNT_OF_ALTS    | 0x000002,
  /* 31*/ COUNT_OF_PHRASES | 0x000002,
  /* 32*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000040,  /* '@' */
  /* 33*/ PHRASE_TYPE      | G_Num,
  /* 34*/ COUNT_OF_PHRASES | 0x000000,

// P<OptDecimal> = ...;
  /* 35*/ COUNT_OF_ALTS    | 0x000002,
  /* 36*/ COUNT_OF_PHRASES | 0x000002,
  /* 37*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002e,  /* '.' */
  /* 38*/ PHRASE_TYPE      | G_Num,
  /* 39*/ COUNT_OF_PHRASES | 0x000000,

// P<Base_or_Float> = ...;
  /* 40*/ COUNT_OF_ALTS    | 0x000002,
  /* 41*/ COUNT_OF_PHRASES | 0x000001,
  /* 42*/ PHRASE_TYPE      | G_Based_Const,
  /* 43*/ COUNT_OF_PHRASES | 0x000002,
  /* 44*/ PHRASE_TYPE      | G_OptDecimal,
  /* 45*/ PHRASE_TYPE      | G_OptExponent,

// P<Num> = ...;
  /* 46*/ COUNT_OF_ALTS    | 0x000001,
  /* 47*/ COUNT_OF_PHRASES | 0x000001,
  /* 48*/ REGEXP_TYPE      | WHITESPACE_ALLOWED | 0x000006,  /* ^[0-9][0-9 ]* */

// P<CONST> = ...;
  /* 49*/ COUNT_OF_ALTS    | 0x000004,
  /* 50*/ COUNT_OF_PHRASES | 0x000002,
  /* 51*/ PHRASE_TYPE      | G_Num,
  /* 52*/ PHRASE_TYPE      | G_Base_or_Float,
  /* 53*/ COUNT_OF_PHRASES | 0x000001,
  /* 54*/ PHRASE_TYPE      | G_CharConst,
  /* 55*/ COUNT_OF_PHRASES | 0x000001,
  /* 56*/ PHRASE_TYPE      | G_ALIASTEXT,
  /* 57*/ COUNT_OF_PHRASES | 0x000002,
  /* 58*/ REGEXP_TYPE      | WHITESPACE_ALLOWED | 0x000007,  /* ^[MBKXR] */
  /* 59*/ PHRASE_TYPE      | G_BigCharConst,

// P<stringchars> = ...;
  /* 60*/ COUNT_OF_ALTS    | 0x000003,
  /* 61*/ COUNT_OF_PHRASES | 0x000003,
  /* 62*/ PHRASE_TYPE      | G_dq,
  /* 63*/ PHRASE_TYPE      | G_dq,
  /* 64*/ PHRASE_TYPE      | G_stringchars,
  /* 65*/ COUNT_OF_PHRASES | 0x000003,
  /* 66*/ PHRASE_TYPE      | NEGATED_PHRASE     | G_dq,
  /* 67*/ PHRASE_TYPE      | G_any,
  /* 68*/ PHRASE_TYPE      | G_stringchars,
  /* 69*/ COUNT_OF_PHRASES | 0x000000,

// P<ALIASTEXT> = ...;
  /* 70*/ COUNT_OF_ALTS    | 0x000001,
  /* 71*/ COUNT_OF_PHRASES | 0x000003,
  /* 72*/ PHRASE_TYPE      | G_dq,
  /* 73*/ PHRASE_TYPE      | G_stringchars,
  /* 74*/ PHRASE_TYPE      | G_dq,

// P<V> = ...;
  /* 75*/ COUNT_OF_ALTS    | 0x000001,
  /* 76*/ COUNT_OF_PHRASES | 0x000002,
  /* 77*/ PHRASE_TYPE      | G_IDENT,
  /* 78*/ PHRASE_TYPE      | G_ESC_ARRAY_or_REC,

// P<N> = ...;
  /* 79*/ COUNT_OF_ALTS    | 0x000001,
  /* 80*/ COUNT_OF_PHRASES | 0x000002,
  /* 81*/ PHRASE_TYPE      | G_IDENT,
  /* 82*/ PHRASE_TYPE      | G_ESC_ARRAY_or_REC,

// P<FM> = ...;
  /* 83*/ COUNT_OF_ALTS    | 0x000001,
  /* 84*/ COUNT_OF_PHRASES | 0x000002,
  /* 85*/ PHRASE_TYPE      | G_IDENT,
  /* 86*/ PHRASE_TYPE      | G_ESC_ARRAY_or_REC,

// P<A> = ...;
  /* 87*/ COUNT_OF_ALTS    | 0x000001,
  /* 88*/ COUNT_OF_PHRASES | 0x000002,
  /* 89*/ PHRASE_TYPE      | G_IDENT,
  /* 90*/ PHRASE_TYPE      | G_ESC_ARRAY_or_REC,

// P<AN> = ...;
  /* 91*/ COUNT_OF_ALTS    | 0x000001,
  /* 92*/ COUNT_OF_PHRASES | 0x000002,
  /* 93*/ PHRASE_TYPE      | G_IDENT,
  /* 94*/ PHRASE_TYPE      | G_ESC_ARRAY_or_REC,

// P<NA> = ...;
  /* 95*/ COUNT_OF_ALTS    | 0x000001,
  /* 96*/ COUNT_OF_PHRASES | 0x000002,
  /* 97*/ PHRASE_TYPE      | G_IDENT,
  /* 98*/ PHRASE_TYPE      | G_ESC_ARRAY_or_REC,

// P<NAN> = ...;
  /* 99*/ COUNT_OF_ALTS    | 0x000001,
  /*100*/ COUNT_OF_PHRASES | 0x000002,
  /*101*/ PHRASE_TYPE      | G_IDENT,
  /*102*/ PHRASE_TYPE      | G_ESC_ARRAY_or_REC,

// P<any> = ...;
  /*103*/ COUNT_OF_ALTS    | 0x000001,
  /*104*/ COUNT_OF_PHRASES | 0x000001,
  /*105*/ REGEXP_TYPE      | WHITESPACE_ALLOWED | 0x000008,  /* ^. */

// P<NL_opt> = ...;
  /*106*/ COUNT_OF_ALTS    | 0x000002,
  /*107*/ COUNT_OF_PHRASES | 0x000002,
  /*108*/ BIP_TYPE         | B_NL,
  /*109*/ PHRASE_TYPE      | G_NL_opt,
  /*110*/ COUNT_OF_PHRASES | 0x000000,

// P<more_Ts> = ...;
  /*111*/ COUNT_OF_ALTS    | 0x000002,
  /*112*/ COUNT_OF_PHRASES | 0x000002,
  /*113*/ PHRASE_TYPE      | G_T,
  /*114*/ PHRASE_TYPE      | G_more_Ts,
  /*115*/ COUNT_OF_PHRASES | 0x000000,

// P<T> = ...;
  /*116*/ COUNT_OF_ALTS    | 0x000002,
  /*117*/ COUNT_OF_PHRASES | 0x000002,
  /*118*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003b,  /* ';' */
  /*119*/ PHRASE_TYPE      | G_more_Ts,
  /*120*/ COUNT_OF_PHRASES | 0x000002,
  /*121*/ BIP_TYPE         | B_NL,
  /*122*/ PHRASE_TYPE      | G_more_Ts,

// P<simple_type> = ...;
  /*123*/ COUNT_OF_ALTS    | 0x000009,
  /*124*/ COUNT_OF_PHRASES | 0x000001,
  /*125*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /* integer */
  /*126*/ COUNT_OF_PHRASES | 0x000001,
  /*127*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000001,  /* real */
  /*128*/ COUNT_OF_PHRASES | 0x000001,
  /*129*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000002,  /* byteinteger */
  /*130*/ COUNT_OF_PHRASES | 0x000001,
  /*131*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000003,  /* byte */
  /*132*/ COUNT_OF_PHRASES | 0x000001,
  /*133*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000004,  /* shortinteger */
  /*134*/ COUNT_OF_PHRASES | 0x000001,
  /*135*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000005,  /* short */
  /*136*/ COUNT_OF_PHRASES | 0x000001,
  /*137*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000006,  /* longinteger */
  /*138*/ COUNT_OF_PHRASES | 0x000001,
  /*139*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000007,  /* longreal */
  /*140*/ COUNT_OF_PHRASES | 0x000001,
  /*141*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000008,  /* long */

// P<routine_or_predicate> = ...;
  /*142*/ COUNT_OF_ALTS    | 0x000002,
  /*143*/ COUNT_OF_PHRASES | 0x000001,
  /*144*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000009,  /* routine */
  /*145*/ COUNT_OF_PHRASES | 0x000001,
  /*146*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00000a,  /* predicate */

// P<fn_or_map> = ...;
  /*147*/ COUNT_OF_ALTS    | 0x000005,
  /*148*/ COUNT_OF_PHRASES | 0x000001,
  /*149*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00000b,  /* function */
  /*150*/ COUNT_OF_PHRASES | 0x000001,
  /*151*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00000c,  /* fn */
  /*152*/ COUNT_OF_PHRASES | 0x000001,
  /*153*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00000d,  /* map */
  /*154*/ COUNT_OF_PHRASES | 0x000001,
  /*155*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00000e,  /* namefn */
  /*156*/ COUNT_OF_PHRASES | 0x000001,
  /*157*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00000f,  /* namefunction */

// P<OWN_opt> = ...;
  /*158*/ COUNT_OF_ALTS    | 0x000004,
  /*159*/ COUNT_OF_PHRASES | 0x000001,
  /*160*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000010,  /* own */
  /*161*/ COUNT_OF_PHRASES | 0x000001,
  /*162*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000011,  /* constant */
  /*163*/ COUNT_OF_PHRASES | 0x000001,
  /*164*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000012,  /* const */
  /*165*/ COUNT_OF_PHRASES | 0x000000,

// P<EXTERNAL> = ...;
  /*166*/ COUNT_OF_ALTS    | 0x000005,
  /*167*/ COUNT_OF_PHRASES | 0x000001,
  /*168*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000013,  /* external */
  /*169*/ COUNT_OF_PHRASES | 0x000001,
  /*170*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000014,  /* system */
  /*171*/ COUNT_OF_PHRASES | 0x000001,
  /*172*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000015,  /* dynamic */
  /*173*/ COUNT_OF_PHRASES | 0x000001,
  /*174*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000016,  /* prim */
  /*175*/ COUNT_OF_PHRASES | 0x000001,
  /*176*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000017,  /* perm */

// P<EXTERNAL_opt> = ...;
  /*177*/ COUNT_OF_ALTS    | 0x000002,
  /*178*/ COUNT_OF_PHRASES | 0x000001,
  /*179*/ PHRASE_TYPE      | G_EXTERNAL,
  /*180*/ COUNT_OF_PHRASES | 0x000000,

// P<COMP> = ...;
  /*181*/ COUNT_OF_ALTS    | 0x000009,
  /*182*/ COUNT_OF_PHRASES | 0x000001,
  /*183*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*184*/ COUNT_OF_PHRASES | 0x000002,
  /*185*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003e,  /* '>' */
  /*186*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*187*/ COUNT_OF_PHRASES | 0x000001,
  /*188*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003e,  /* '>' */
  /*189*/ COUNT_OF_PHRASES | 0x000002,
  /*190*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003c,  /* '<' */
  /*191*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*192*/ COUNT_OF_PHRASES | 0x000001,
  /*193*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003c,  /* '<' */
  /*194*/ COUNT_OF_PHRASES | 0x000001,
  /*195*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000023,  /* '#' */
  /*196*/ COUNT_OF_PHRASES | 0x000002,
  /*197*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00005c,  /* '\' */
  /*198*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*199*/ COUNT_OF_PHRASES | 0x000002,
  /*200*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003c,  /* '<' */
  /*201*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003e,  /* '>' */
  /*202*/ COUNT_OF_PHRASES | 0x000002,
  /*203*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00007e,  /* '~' */
  /*204*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */

// P<ACOMP> = ...;
  /*205*/ COUNT_OF_ALTS    | 0x000002,
  /*206*/ COUNT_OF_PHRASES | 0x000002,
  /*207*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*208*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*209*/ COUNT_OF_PHRASES | 0x000002,
  /*210*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000023,  /* '#' */
  /*211*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000023,  /* '#' */

// P<exit_or_continue> = ...;
  /*212*/ COUNT_OF_ALTS    | 0x000002,
  /*213*/ COUNT_OF_PHRASES | 0x000001,
  /*214*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000018,  /* exit */
  /*215*/ COUNT_OF_PHRASES | 0x000001,
  /*216*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000019,  /* continue */

// P<on_event> = ...;
  /*217*/ COUNT_OF_ALTS    | 0x000002,
  /*218*/ COUNT_OF_PHRASES | 0x000001,
  /*219*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00001a,  /* onevent */
  /*220*/ COUNT_OF_PHRASES | 0x000001,
  /*221*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00001b,  /* on */

// P<BACK> = ...;
  /*222*/ COUNT_OF_ALTS    | 0x000003,
  /*223*/ COUNT_OF_PHRASES | 0x000001,
  /*224*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00001c,  /* return */
  /*225*/ COUNT_OF_PHRASES | 0x000001,
  /*226*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00001d,  /* true */
  /*227*/ COUNT_OF_PHRASES | 0x000001,
  /*228*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00001e,  /* false */

// P<INDEF> = ...;
  /*229*/ COUNT_OF_ALTS    | 0x000001,
  /*230*/ COUNT_OF_PHRASES | 0x000001,
  /*231*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002a,  /* '*' */

// P<IDENT_and_INITDEC> = ...;
  /*232*/ COUNT_OF_ALTS    | 0x000001,
  /*233*/ COUNT_OF_PHRASES | 0x000002,
  /*234*/ PHRASE_TYPE      | G_IDENT,
  /*235*/ PHRASE_TYPE      | G_INIT_DEC_ASSIGNMENTS,

// P<rest_of_IDENT_and_INITDEC> = ...;
  /*236*/ COUNT_OF_ALTS    | 0x000002,
  /*237*/ COUNT_OF_PHRASES | 0x000004,
  /*238*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*239*/ PHRASE_TYPE      | G_NL_opt,
  /*240*/ PHRASE_TYPE      | G_IDENT_and_INITDEC,
  /*241*/ PHRASE_TYPE      | G_rest_of_IDENT_and_INITDEC,
  /*242*/ COUNT_OF_PHRASES | 0x000000,

// P<rest_of_ADEFN> = ...;
  /*243*/ COUNT_OF_ALTS    | 0x000002,
  /*244*/ COUNT_OF_PHRASES | 0x000003,
  /*245*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*246*/ PHRASE_TYPE      | G_NL_opt,
  /*247*/ PHRASE_TYPE      | G_ADEFN,
  /*248*/ COUNT_OF_PHRASES | 0x000000,

// P<OIDENT_ALIAS_opt> = ...;
  /*249*/ COUNT_OF_ALTS    | 0x000001,
  /*250*/ COUNT_OF_PHRASES | 0x000002,
  /*251*/ PHRASE_TYPE      | G_IDENT,
  /*252*/ PHRASE_TYPE      | G_ALIAS_opt,

// P<more_IDENT_ALIAS_opts> = ...;
  /*253*/ COUNT_OF_ALTS    | 0x000002,
  /*254*/ COUNT_OF_PHRASES | 0x000004,
  /*255*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*256*/ PHRASE_TYPE      | G_NL_opt,
  /*257*/ PHRASE_TYPE      | G_IDENT_ALIAS_opt,
  /*258*/ PHRASE_TYPE      | G_more_IDENT_ALIAS_opts,
  /*259*/ COUNT_OF_PHRASES | 0x000000,

// P<IDENT_ALIAS_opt> = ...;
  /*260*/ COUNT_OF_ALTS    | 0x000001,
  /*261*/ COUNT_OF_PHRASES | 0x000002,
  /*262*/ PHRASE_TYPE      | G_IDENT,
  /*263*/ PHRASE_TYPE      | G_ALIAS_opt,

// P<ALIAS_opt> = ...;
  /*264*/ COUNT_OF_ALTS    | 0x000002,
  /*265*/ COUNT_OF_PHRASES | 0x000002,
  /*266*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00001f,  /* alias */
  /*267*/ PHRASE_TYPE      | G_ACONST,
  /*268*/ COUNT_OF_PHRASES | 0x000000,

// P<rest_of_INITVAR> = ...;
  /*269*/ COUNT_OF_ALTS    | 0x000002,
  /*270*/ COUNT_OF_PHRASES | 0x000004,
  /*271*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*272*/ PHRASE_TYPE      | G_NL_opt,
  /*273*/ PHRASE_TYPE      | G_INITVAR,
  /*274*/ PHRASE_TYPE      | G_rest_of_INITVAR,
  /*275*/ COUNT_OF_PHRASES | 0x000000,

// P<Rt_Pred_FPP> = ...;
  /*276*/ COUNT_OF_ALTS    | 0x000002,
  /*277*/ COUNT_OF_PHRASES | 0x000003,
  /*278*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*279*/ PHRASE_TYPE      | G_FPP,
  /*280*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*281*/ COUNT_OF_PHRASES | 0x000000,

// P<bracketed_INDEF_or_IEXP> = ...;
  /*282*/ COUNT_OF_ALTS    | 0x000001,
  /*283*/ COUNT_OF_PHRASES | 0x000003,
  /*284*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*285*/ PHRASE_TYPE      | G_INDEF_or_IEXP,
  /*286*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */

// P<optional_initialiser_repeat_count> = ...;
  /*287*/ COUNT_OF_ALTS    | 0x000003,
  /*288*/ COUNT_OF_PHRASES | 0x000003,
  /*289*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*290*/ PHRASE_TYPE      | G_IEXP,
  /*291*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*292*/ COUNT_OF_PHRASES | 0x000003,
  /*293*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*294*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002a,  /* '*' */
  /*295*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*296*/ COUNT_OF_PHRASES | 0x000000,

// P<initialiser_item> = ...;
  /*297*/ COUNT_OF_ALTS    | 0x000001,
  /*298*/ COUNT_OF_PHRASES | 0x000002,
  /*299*/ PHRASE_TYPE      | G_IEXP,
  /*300*/ PHRASE_TYPE      | G_optional_initialiser_repeat_count,

// P<more_initialiser_items> = ...;
  /*301*/ COUNT_OF_ALTS    | 0x000002,
  /*302*/ COUNT_OF_PHRASES | 0x000003,
  /*303*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*304*/ PHRASE_TYPE      | G_NL_opt,
  /*305*/ PHRASE_TYPE      | G_initialiser_list,
  /*306*/ COUNT_OF_PHRASES | 0x000000,

// P<initialiser_list> = ...;
  /*307*/ COUNT_OF_ALTS    | 0x000001,
  /*308*/ COUNT_OF_PHRASES | 0x000002,
  /*309*/ PHRASE_TYPE      | G_initialiser_item,
  /*310*/ PHRASE_TYPE      | G_more_initialiser_items,

// P<optional_initialisation_T> = ...;
  /*311*/ COUNT_OF_ALTS    | 0x000002,
  /*312*/ COUNT_OF_PHRASES | 0x000004,
  /*313*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*314*/ PHRASE_TYPE      | G_NL_opt,
  /*315*/ PHRASE_TYPE      | G_initialiser_list,
  /*316*/ PHRASE_TYPE      | G_T,
  /*317*/ COUNT_OF_PHRASES | 0x000001,
  /*318*/ PHRASE_TYPE      | G_T,

// P<EXTA_item> = ...;
  /*319*/ COUNT_OF_ALTS    | 0x000001,
  /*320*/ COUNT_OF_PHRASES | 0x000002,
  /*321*/ PHRASE_TYPE      | G_OIDENT_ALIAS_opt,
  /*322*/ PHRASE_TYPE      | G_CONST_BOUNDS,

// P<EXTA_list_opt> = ...;
  /*323*/ COUNT_OF_ALTS    | 0x000003,
  /*324*/ COUNT_OF_PHRASES | 0x000001,
  /*325*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*326*/ COUNT_OF_PHRASES | 0x000003,
  /*327*/ PHRASE_TYPE      | G_NL_opt,
  /*328*/ PHRASE_TYPE      | G_EXTA_item,
  /*329*/ PHRASE_TYPE      | G_EXTA_list_opt,
  /*330*/ COUNT_OF_PHRASES | 0x000000,

// P<EXTA_list> = ...;
  /*331*/ COUNT_OF_ALTS    | 0x000001,
  /*332*/ COUNT_OF_PHRASES | 0x000002,
  /*333*/ PHRASE_TYPE      | G_EXTA_item,
  /*334*/ PHRASE_TYPE      | G_EXTA_list_opt,

// P<INDEF_or_IEXP> = ...;
  /*335*/ COUNT_OF_ALTS    | 0x000002,
  /*336*/ COUNT_OF_PHRASES | 0x000001,
  /*337*/ PHRASE_TYPE      | G_INDEF,
  /*338*/ COUNT_OF_PHRASES | 0x000001,
  /*339*/ PHRASE_TYPE      | G_IEXP,

// P<STATEMENTS> = ...;
  /*340*/ COUNT_OF_ALTS    | 0x000003,
  /*341*/ COUNT_OF_PHRASES | 0x000001,
  /*342*/ BIP_TYPE         | WHITESPACE_ALLOWED | B_EOF,
  /*343*/ COUNT_OF_PHRASES | 0x000002,
  /*344*/ PHRASE_TYPE      | G_STATEMENT,
  /*345*/ PHRASE_TYPE      | G_STATEMENTS,
  /*346*/ COUNT_OF_PHRASES | 0x000000,

// P<L> = ...;
  /*347*/ COUNT_OF_ALTS    | 0x000001,
  /*348*/ COUNT_OF_PHRASES | 0x000001,
  /*349*/ PHRASE_TYPE      | G_IDENT,

// P<SWID> = ...;
  /*350*/ COUNT_OF_ALTS    | 0x000001,
  /*351*/ COUNT_OF_PHRASES | 0x000001,
  /*352*/ PHRASE_TYPE      | G_IDENT,

// P<rest_of_SWIDS> = ...;
  /*353*/ COUNT_OF_ALTS    | 0x000002,
  /*354*/ COUNT_OF_PHRASES | 0x000004,
  /*355*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*356*/ PHRASE_TYPE      | G_NL_opt,
  /*357*/ PHRASE_TYPE      | G_SWID,
  /*358*/ PHRASE_TYPE      | G_rest_of_SWIDS,
  /*359*/ COUNT_OF_PHRASES | 0x000000,

// P<SWIDS> = ...;
  /*360*/ COUNT_OF_ALTS    | 0x000001,
  /*361*/ COUNT_OF_PHRASES | 0x000002,
  /*362*/ PHRASE_TYPE      | G_SWID,
  /*363*/ PHRASE_TYPE      | G_rest_of_SWIDS,

// P<rest_of_SWDEFS> = ...;
  /*364*/ COUNT_OF_ALTS    | 0x000002,
  /*365*/ COUNT_OF_PHRASES | 0x000004,
  /*366*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*367*/ PHRASE_TYPE      | G_NL_opt,
  /*368*/ PHRASE_TYPE      | G_SWDEFS,
  /*369*/ PHRASE_TYPE      | G_rest_of_SWDEFS,
  /*370*/ COUNT_OF_PHRASES | 0x000000,

// P<SWDEFS> = ...;
  /*371*/ COUNT_OF_ALTS    | 0x000001,
  /*372*/ COUNT_OF_PHRASES | 0x000002,
  /*373*/ PHRASE_TYPE      | G_SWDEF,
  /*374*/ PHRASE_TYPE      | G_rest_of_SWDEFS,

// P<SWDEF> = ...;
  /*375*/ COUNT_OF_ALTS    | 0x000001,
  /*376*/ COUNT_OF_PHRASES | 0x000002,
  /*377*/ PHRASE_TYPE      | G_SWIDS,
  /*378*/ PHRASE_TYPE      | G_CONST_BOUNDS,

// P<Star_or_IEXP> = ...;
  /*379*/ COUNT_OF_ALTS    | 0x000002,
  /*380*/ COUNT_OF_PHRASES | 0x000001,
  /*381*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002a,  /* '*' */
  /*382*/ COUNT_OF_PHRASES | 0x000001,
  /*383*/ PHRASE_TYPE      | G_IEXP,

// P<FM_or_Star> = ...;
  /*384*/ COUNT_OF_ALTS    | 0x000002,
  /*385*/ COUNT_OF_PHRASES | 0x000001,
  /*386*/ PHRASE_TYPE      | G_FM,
  /*387*/ COUNT_OF_PHRASES | 0x000001,
  /*388*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002a,  /* '*' */

// P<result_types> = ...;
  /*389*/ COUNT_OF_ALTS    | 0x000004,
  /*390*/ COUNT_OF_PHRASES | 0x000001,
  /*391*/ PHRASE_TYPE      | G_simple_type,
  /*392*/ COUNT_OF_PHRASES | 0x000006,
  /*393*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /* integer */
  /*394*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*395*/ PHRASE_TYPE      | G_IEXP,
  /*396*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003a,  /* ':' */
  /*397*/ PHRASE_TYPE      | G_IEXP,
  /*398*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*399*/ COUNT_OF_PHRASES | 0x000004,
  /*400*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000020,  /* string */
  /*401*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*402*/ PHRASE_TYPE      | G_Star_or_IEXP,
  /*403*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*404*/ COUNT_OF_PHRASES | 0x000004,
  /*405*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000021,  /* record */
  /*406*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*407*/ PHRASE_TYPE      | G_FM_or_Star,
  /*408*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */

// P<Rt_Fn_Map_Pred_DECL> = ...;
  /*409*/ COUNT_OF_ALTS    | 0x000002,
  /*410*/ COUNT_OF_PHRASES | 0x000001,
  /*411*/ PHRASE_TYPE      | G_routine_or_predicate,
  /*412*/ COUNT_OF_PHRASES | 0x000002,
  /*413*/ PHRASE_TYPE      | G_result_types,
  /*414*/ PHRASE_TYPE      | G_fn_or_map,

// P<NAME_opt> = ...;
  /*415*/ COUNT_OF_ALTS    | 0x000002,
  /*416*/ COUNT_OF_PHRASES | 0x000001,
  /*417*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000022,  /* name */
  /*418*/ COUNT_OF_PHRASES | 0x000000,

// P<SPEC_opt> = ...;
  /*419*/ COUNT_OF_ALTS    | 0x000002,
  /*420*/ COUNT_OF_PHRASES | 0x000001,
  /*421*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000023,  /* spec */
  /*422*/ COUNT_OF_PHRASES | 0x000000,

// P<ARRAY_stuff> = ...;
  /*423*/ COUNT_OF_ALTS    | 0x000002,
  /*424*/ COUNT_OF_PHRASES | 0x000002,
  /*425*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000024,  /* array */
  /*426*/ PHRASE_TYPE      | G_NAME_opt,
  /*427*/ COUNT_OF_PHRASES | 0x000005,
  /*428*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000024,  /* array */
  /*429*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*430*/ PHRASE_TYPE      | G_IEXP,
  /*431*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*432*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000022,  /* name */

// P<Declaration_T> = ...;
  /*433*/ COUNT_OF_ALTS    | 0x00000e,
  /*434*/ COUNT_OF_PHRASES | 0x000006,
  /*435*/ PHRASE_TYPE      | G_simple_type,
  /*436*/ PHRASE_TYPE      | G_NAME_opt,
  /*437*/ PHRASE_TYPE      | G_ARRAY_stuff,
  /*438*/ PHRASE_TYPE      | G_ADEFN,
  /*439*/ PHRASE_TYPE      | G_rest_of_ADEFN,
  /*440*/ PHRASE_TYPE      | G_T,
  /*441*/ COUNT_OF_PHRASES | 0x000005,
  /*442*/ PHRASE_TYPE      | G_simple_type,
  /*443*/ PHRASE_TYPE      | G_NAME_opt,
  /*444*/ PHRASE_TYPE      | G_IDENT_and_INITDEC,
  /*445*/ PHRASE_TYPE      | G_rest_of_IDENT_and_INITDEC,
  /*446*/ PHRASE_TYPE      | G_T,
  /*447*/ COUNT_OF_PHRASES | 0x000008,
  /*448*/ PHRASE_TYPE      | G_OWN_opt,
  /*449*/ PHRASE_TYPE      | G_result_types,
  /*450*/ PHRASE_TYPE      | G_NAME_opt,
  /*451*/ PHRASE_TYPE      | G_ARRAY_stuff,
  /*452*/ PHRASE_TYPE      | G_IDENT,
  /*453*/ PHRASE_TYPE      | G_ALIAS_opt,
  /*454*/ PHRASE_TYPE      | G_CONST_BOUNDS,
  /*455*/ PHRASE_TYPE      | G_optional_initialisation_T,
  /*456*/ COUNT_OF_PHRASES | 0x000006,
  /*457*/ PHRASE_TYPE      | G_OWN_opt,
  /*458*/ PHRASE_TYPE      | G_result_types,
  /*459*/ PHRASE_TYPE      | G_NAME_opt,
  /*460*/ PHRASE_TYPE      | G_INITVAR,
  /*461*/ PHRASE_TYPE      | G_rest_of_INITVAR,
  /*462*/ PHRASE_TYPE      | G_T,
  /*463*/ COUNT_OF_PHRASES | 0x000008,
  /*464*/ PHRASE_TYPE      | G_EXTERNAL_opt,
  /*465*/ PHRASE_TYPE      | G_Rt_Fn_Map_Pred_DECL,
  /*466*/ PHRASE_TYPE      | G_SPEC_opt,
  /*467*/ PHRASE_TYPE      | G_PROC_or_PROCSPEC,
  /*468*/ PHRASE_TYPE      | G_IDENT,
  /*469*/ PHRASE_TYPE      | G_ALIAS_opt,
  /*470*/ PHRASE_TYPE      | G_Rt_Pred_FPP,
  /*471*/ PHRASE_TYPE      | G_T,
  /*472*/ COUNT_OF_PHRASES | 0x000006,
  /*473*/ PHRASE_TYPE      | G_EXTERNAL_opt,
  /*474*/ PHRASE_TYPE      | G_result_types,
  /*475*/ PHRASE_TYPE      | G_NAME_opt,
  /*476*/ PHRASE_TYPE      | G_ARRAY_stuff,
  /*477*/ PHRASE_TYPE      | G_EXTA_list,
  /*478*/ PHRASE_TYPE      | G_T,
  /*479*/ COUNT_OF_PHRASES | 0x000006,
  /*480*/ PHRASE_TYPE      | G_EXTERNAL_opt,
  /*481*/ PHRASE_TYPE      | G_result_types,
  /*482*/ PHRASE_TYPE      | G_NAME_opt,
  /*483*/ PHRASE_TYPE      | G_IDENT_ALIAS_opt,
  /*484*/ PHRASE_TYPE      | G_more_IDENT_ALIAS_opts,
  /*485*/ PHRASE_TYPE      | G_T,
  /*486*/ COUNT_OF_PHRASES | 0x000007,
  /*487*/ PHRASE_TYPE      | G_EXTERNAL,
  /*488*/ PHRASE_TYPE      | G_result_types,
  /*489*/ PHRASE_TYPE      | G_NAME_opt,
  /*490*/ PHRASE_TYPE      | G_ARRAY_stuff,
  /*491*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000023,  /* spec */
  /*492*/ PHRASE_TYPE      | G_EXTA_list,
  /*493*/ PHRASE_TYPE      | G_T,
  /*494*/ COUNT_OF_PHRASES | 0x000007,
  /*495*/ PHRASE_TYPE      | G_EXTERNAL,
  /*496*/ PHRASE_TYPE      | G_result_types,
  /*497*/ PHRASE_TYPE      | G_NAME_opt,
  /*498*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000023,  /* spec */
  /*499*/ PHRASE_TYPE      | G_IDENT_ALIAS_opt,
  /*500*/ PHRASE_TYPE      | G_more_IDENT_ALIAS_opts,
  /*501*/ PHRASE_TYPE      | G_T,
  /*502*/ COUNT_OF_PHRASES | 0x000003,
  /*503*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000025,  /* recordformatspec */
  /*504*/ PHRASE_TYPE      | G_IDENT,
  /*505*/ PHRASE_TYPE      | G_T,
  /*506*/ COUNT_OF_PHRASES | 0x000006,
  /*507*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000026,  /* recordformat */
  /*508*/ PHRASE_TYPE      | G_IDENT,
  /*509*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*510*/ PHRASE_TYPE      | G_record_field_declarations,
  /*511*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*512*/ PHRASE_TYPE      | G_T,
  /*513*/ COUNT_OF_PHRASES | 0x000003,
  /*514*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000027,  /* switch */
  /*515*/ PHRASE_TYPE      | G_SWDEFS,
  /*516*/ PHRASE_TYPE      | G_T,
  /*517*/ COUNT_OF_PHRASES | 0x000003,
  /*518*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000028,  /* label */
  /*519*/ PHRASE_TYPE      | G_IDENTS,
  /*520*/ PHRASE_TYPE      | G_T,
  /*521*/ COUNT_OF_PHRASES | 0x000004,
  /*522*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000022,  /* name */
  /*523*/ PHRASE_TYPE      | G_IDENT_and_INITDEC,
  /*524*/ PHRASE_TYPE      | G_rest_of_IDENT_and_INITDEC,
  /*525*/ PHRASE_TYPE      | G_T,

// P<optional_parameters> = ...;
  /*526*/ COUNT_OF_ALTS    | 0x000002,
  /*527*/ COUNT_OF_PHRASES | 0x000003,
  /*528*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*529*/ PHRASE_TYPE      | G_APP,
  /*530*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*531*/ COUNT_OF_PHRASES | 0x000000,

// P<Rt_CALL> = ...;
  /*532*/ COUNT_OF_ALTS    | 0x000001,
  /*533*/ COUNT_OF_PHRASES | 0x000002,
  /*534*/ PHRASE_TYPE      | G_IDENT,
  /*535*/ PHRASE_TYPE      | G_optional_parameters,

// P<Fn_CALL> = ...;
  /*536*/ COUNT_OF_ALTS    | 0x000001,
  /*537*/ COUNT_OF_PHRASES | 0x000002,
  /*538*/ PHRASE_TYPE      | G_IDENT,
  /*539*/ PHRASE_TYPE      | G_optional_parameters,

// P<Map_CALL> = ...;
  /*540*/ COUNT_OF_ALTS    | 0x000001,
  /*541*/ COUNT_OF_PHRASES | 0x000002,
  /*542*/ PHRASE_TYPE      | G_IDENT,
  /*543*/ PHRASE_TYPE      | G_optional_parameters,

// P<Pred_CALL> = ...;
  /*544*/ COUNT_OF_ALTS    | 0x000001,
  /*545*/ COUNT_OF_PHRASES | 0x000002,
  /*546*/ PHRASE_TYPE      | G_IDENT,
  /*547*/ PHRASE_TYPE      | G_optional_parameters,

// P<PROC_or_PROCSPEC> = ...;
  /*548*/ COUNT_OF_ALTS    | 0x000002,
  /*549*/ COUNT_OF_PHRASES | 0x000001,
  /*550*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_PROC,
  /*551*/ COUNT_OF_PHRASES | 0x000001,
  /*552*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_PROCSPEC,

// P<ESCARRAY> = ...;
  /*553*/ COUNT_OF_ALTS    | 0x000001,
  /*554*/ COUNT_OF_PHRASES | 0x000004,
  /*555*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*556*/ PHRASE_TYPE      | G_APP,
  /*557*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*558*/ PHRASE_TYPE      | G_ESCREC_opt,

// P<ESCREC> = ...;
  /*559*/ COUNT_OF_ALTS    | 0x000001,
  /*560*/ COUNT_OF_PHRASES | 0x000003,
  /*561*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00005f,  /* '_' */
  /*562*/ PHRASE_TYPE      | G_IDENT,
  /*563*/ PHRASE_TYPE      | G_ESC_ARRAY_or_REC,

// P<ESCREC_opt> = ...;
  /*564*/ COUNT_OF_ALTS    | 0x000002,
  /*565*/ COUNT_OF_PHRASES | 0x000002,
  /*566*/ PHRASE_TYPE      | G_ESCREC,
  /*567*/ PHRASE_TYPE      | G_ESC_ARRAY_or_REC,
  /*568*/ COUNT_OF_PHRASES | 0x000000,

// P<ESC_ARRAY_or_REC> = ...;
  /*569*/ COUNT_OF_ALTS    | 0x000003,
  /*570*/ COUNT_OF_PHRASES | 0x000001,
  /*571*/ PHRASE_TYPE      | G_ESCARRAY,
  /*572*/ COUNT_OF_PHRASES | 0x000001,
  /*573*/ PHRASE_TYPE      | G_ESCREC,
  /*574*/ COUNT_OF_PHRASES | 0x000000,

// P<simple_label> = ...;
  /*575*/ COUNT_OF_ALTS    | 0x000001,
  /*576*/ COUNT_OF_PHRASES | 0x000002,
  /*577*/ PHRASE_TYPE      | G_L,
  /*578*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003a,  /* ':' */

// P<switch_label> = ...;
  /*579*/ COUNT_OF_ALTS    | 0x000001,
  /*580*/ COUNT_OF_PHRASES | 0x000003,
  /*581*/ PHRASE_TYPE      | G_S,
  /*582*/ PHRASE_TYPE      | G_bracketed_INDEF_or_IEXP,
  /*583*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003a,  /* ':' */

// P<S> = ...;
  /*584*/ COUNT_OF_ALTS    | 0x000001,
  /*585*/ COUNT_OF_PHRASES | 0x000001,
  /*586*/ PHRASE_TYPE      | G_IDENT,

// P<jump_destination> = ...;
  /*587*/ COUNT_OF_ALTS    | 0x000002,
  /*588*/ COUNT_OF_PHRASES | 0x000004,
  /*589*/ PHRASE_TYPE      | G_S,
  /*590*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*591*/ PHRASE_TYPE      | G_EXP,
  /*592*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*593*/ COUNT_OF_PHRASES | 0x000001,
  /*594*/ PHRASE_TYPE      | G_L,

// P<SIGNAL> = ...;
  /*595*/ COUNT_OF_ALTS    | 0x000002,
  /*596*/ COUNT_OF_PHRASES | 0x000001,
  /*597*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000029,  /* signalevent */
  /*598*/ COUNT_OF_PHRASES | 0x000001,
  /*599*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002a,  /* signal */

// P<COMMENT_TEXT> = ...;
  /*600*/ COUNT_OF_ALTS    | 0x000002,
  /*601*/ COUNT_OF_PHRASES | 0x000003,
  /*602*/ PHRASE_TYPE      | NEGATED_PHRASE     | G_T,
  /*603*/ PHRASE_TYPE      | G_any,
  /*604*/ PHRASE_TYPE      | G_COMMENT_TEXT,
  /*605*/ COUNT_OF_PHRASES | 0x000000,

// P<COMMENT> = ...;
  /*606*/ COUNT_OF_ALTS    | 0x000002,
  /*607*/ COUNT_OF_PHRASES | 0x000001,
  /*608*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002b,  /* comment */
  /*609*/ COUNT_OF_PHRASES | 0x000001,
  /*610*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000021,  /* '!' */

// P<COMMENT_T> = ...;
  /*611*/ COUNT_OF_ALTS    | 0x000001,
  /*612*/ COUNT_OF_PHRASES | 0x000003,
  /*613*/ PHRASE_TYPE      | G_COMMENT,
  /*614*/ PHRASE_TYPE      | G_COMMENT_TEXT,
  /*615*/ PHRASE_TYPE      | G_T,

// P<LHS> = ...;
  /*616*/ COUNT_OF_ALTS    | 0x000003,
  /*617*/ COUNT_OF_PHRASES | 0x000002,
  /*618*/ PHRASE_TYPE      | G_V,
  /*619*/ PHRASE_TYPE      | G_ESC_ARRAY_or_REC,
  /*620*/ COUNT_OF_PHRASES | 0x000002,
  /*621*/ PHRASE_TYPE      | G_N,
  /*622*/ PHRASE_TYPE      | G_ESC_ARRAY_or_REC,
  /*623*/ COUNT_OF_PHRASES | 0x000002,
  /*624*/ PHRASE_TYPE      | G_Map_CALL,
  /*625*/ PHRASE_TYPE      | G_ESCREC,

// P<IMP> = ...;
  /*626*/ COUNT_OF_ALTS    | 0x00000d,
  /*627*/ COUNT_OF_PHRASES | 0x000003,
  /*628*/ PHRASE_TYPE      | G_LHS,
  /*629*/ PHRASE_TYPE      | G_IMP_ASSIGN,
  /*630*/ PHRASE_TYPE      | G_more_IMPS,
  /*631*/ COUNT_OF_PHRASES | 0x000003,
  /*632*/ PHRASE_TYPE      | G_N,
  /*633*/ PHRASE_TYPE      | G_N_ASS,
  /*634*/ PHRASE_TYPE      | G_more_IMPS,
  /*635*/ COUNT_OF_PHRASES | 0x000002,
  /*636*/ PHRASE_TYPE      | G_Rt_CALL,
  /*637*/ PHRASE_TYPE      | G_more_IMPS,
  /*638*/ COUNT_OF_PHRASES | 0x000001,
  /*639*/ PHRASE_TYPE      | G_BACK,
  /*640*/ COUNT_OF_PHRASES | 0x000005,
  /*641*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002c,  /* result */
  /*642*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*643*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*644*/ PHRASE_TYPE      | G_NL_opt,
  /*645*/ PHRASE_TYPE      | G_V_or_N,
  /*646*/ COUNT_OF_PHRASES | 0x000004,
  /*647*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002c,  /* result */
  /*648*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*649*/ PHRASE_TYPE      | G_NL_opt,
  /*650*/ PHRASE_TYPE      | G_EXP,
  /*651*/ COUNT_OF_PHRASES | 0x000001,
  /*652*/ PHRASE_TYPE      | G_exit_or_continue,
  /*653*/ COUNT_OF_PHRASES | 0x000006,
  /*654*/ PHRASE_TYPE      | G_AN,
  /*655*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*656*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*657*/ PHRASE_TYPE      | G_NL_opt,
  /*658*/ PHRASE_TYPE      | G_A_or_AN_opt,
  /*659*/ PHRASE_TYPE      | G_more_IMPS,
  /*660*/ COUNT_OF_PHRASES | 0x000006,
  /*661*/ PHRASE_TYPE      | G_NAN,
  /*662*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*663*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*664*/ PHRASE_TYPE      | G_NL_opt,
  /*665*/ PHRASE_TYPE      | G_NA_or_NAN_opt,
  /*666*/ PHRASE_TYPE      | G_more_IMPS,
  /*667*/ COUNT_OF_PHRASES | 0x000001,
  /*668*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002d,  /* stop */
  /*669*/ COUNT_OF_PHRASES | 0x000002,
  /*670*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002e,  /* monitor */
  /*671*/ PHRASE_TYPE      | G_more_IMPS,
  /*672*/ COUNT_OF_PHRASES | 0x000003,
  /*673*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002d,  /* '-' */
  /*674*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003e,  /* '>' */
  /*675*/ PHRASE_TYPE      | G_jump_destination,
  /*676*/ COUNT_OF_PHRASES | 0x000003,
  /*677*/ PHRASE_TYPE      | G_SIGNAL,
  /*678*/ PHRASE_TYPE      | G_IEXP,
  /*679*/ PHRASE_TYPE      | G_subevent_and_extra,

// P<EIMP> = ...;
  /*680*/ COUNT_OF_ALTS    | 0x000003,
  /*681*/ COUNT_OF_PHRASES | 0x000002,
  /*682*/ PHRASE_TYPE      | G_COND,
  /*683*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002f,  /* start */
  /*684*/ COUNT_OF_PHRASES | 0x000003,
  /*685*/ PHRASE_TYPE      | G_COND,
  /*686*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* then */
  /*687*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002f,  /* start */
  /*688*/ COUNT_OF_PHRASES | 0x000004,
  /*689*/ PHRASE_TYPE      | G_COND,
  /*690*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* then */
  /*691*/ PHRASE_TYPE      | G_IMP,
  /*692*/ PHRASE_TYPE      | G_else_start_IMP_opt,

// P<XIMP> = ...;
  /*693*/ COUNT_OF_ALTS    | 0x000002,
  /*694*/ COUNT_OF_PHRASES | 0x000004,
  /*695*/ PHRASE_TYPE      | G_COND,
  /*696*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* then */
  /*697*/ PHRASE_TYPE      | G_IMP,
  /*698*/ PHRASE_TYPE      | G_else_if_XIMP_opt,
  /*699*/ COUNT_OF_PHRASES | 0x000002,
  /*700*/ PHRASE_TYPE      | G_COND,
  /*701*/ PHRASE_TYPE      | G_THEN_opt,

// P<FELSE_opt> = ...;
  /*702*/ COUNT_OF_ALTS    | 0x000002,
  /*703*/ COUNT_OF_PHRASES | 0x000002,
  /*704*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000031,  /* finish */
  /*705*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* else */
  /*706*/ COUNT_OF_PHRASES | 0x000000,

// P<if_or_unless> = ...;
  /*707*/ COUNT_OF_ALTS    | 0x000002,
  /*708*/ COUNT_OF_PHRASES | 0x000001,
  /*709*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000033,  /* if */
  /*710*/ COUNT_OF_PHRASES | 0x000001,
  /*711*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000034,  /* unless */

// P<if_unless_XIMP> = ...;
  /*712*/ COUNT_OF_ALTS    | 0x000002,
  /*713*/ COUNT_OF_PHRASES | 0x000002,
  /*714*/ PHRASE_TYPE      | G_if_or_unless,
  /*715*/ PHRASE_TYPE      | G_XIMP,
  /*716*/ COUNT_OF_PHRASES | 0x000000,

// P<if_XIMP_opt> = ...;
  /*717*/ COUNT_OF_ALTS    | 0x000002,
  /*718*/ COUNT_OF_PHRASES | 0x000002,
  /*719*/ PHRASE_TYPE      | G_if_or_unless,
  /*720*/ PHRASE_TYPE      | G_XIMP,
  /*721*/ COUNT_OF_PHRASES | 0x000000,

// P<THEN_opt> = ...;
  /*722*/ COUNT_OF_ALTS    | 0x000002,
  /*723*/ COUNT_OF_PHRASES | 0x000001,
  /*724*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* then */
  /*725*/ COUNT_OF_PHRASES | 0x000000,

// P<else_start_IMP_opt> = ...;
  /*726*/ COUNT_OF_ALTS    | 0x000002,
  /*727*/ COUNT_OF_PHRASES | 0x000002,
  /*728*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* else */
  /*729*/ PHRASE_TYPE      | G_start_IMP,
  /*730*/ COUNT_OF_PHRASES | 0x000000,

// P<else_if_unless_XIMP_opt> = ...;
  /*731*/ COUNT_OF_ALTS    | 0x000002,
  /*732*/ COUNT_OF_PHRASES | 0x000002,
  /*733*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* else */
  /*734*/ PHRASE_TYPE      | G_if_unless_XIMP,
  /*735*/ COUNT_OF_PHRASES | 0x000000,

// P<else_if_XIMP_opt> = ...;
  /*736*/ COUNT_OF_ALTS    | 0x000002,
  /*737*/ COUNT_OF_PHRASES | 0x000002,
  /*738*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* else */
  /*739*/ PHRASE_TYPE      | G_if_XIMP_opt,
  /*740*/ COUNT_OF_PHRASES | 0x000000,

// P<else_final_IMP_opt> = ...;
  /*741*/ COUNT_OF_ALTS    | 0x000002,
  /*742*/ COUNT_OF_PHRASES | 0x000002,
  /*743*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* else */
  /*744*/ PHRASE_TYPE      | G_final_IMP,
  /*745*/ COUNT_OF_PHRASES | 0x000000,

// P<start_IMP> = ...;
  /*746*/ COUNT_OF_ALTS    | 0x000003,
  /*747*/ COUNT_OF_PHRASES | 0x000001,
  /*748*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002f,  /* start */
  /*749*/ COUNT_OF_PHRASES | 0x000002,
  /*750*/ PHRASE_TYPE      | G_if_or_unless,
  /*751*/ PHRASE_TYPE      | G_EIMP,
  /*752*/ COUNT_OF_PHRASES | 0x000001,
  /*753*/ PHRASE_TYPE      | G_IMP,

// P<final_IMP> = ...;
  /*754*/ COUNT_OF_ALTS    | 0x000003,
  /*755*/ COUNT_OF_PHRASES | 0x000001,
  /*756*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002f,  /* start */
  /*757*/ COUNT_OF_PHRASES | 0x000002,
  /*758*/ PHRASE_TYPE      | G_if_or_unless,
  /*759*/ PHRASE_TYPE      | G_EIMP,
  /*760*/ COUNT_OF_PHRASES | 0x000001,
  /*761*/ PHRASE_TYPE      | G_IMP,

// P<more_IMPS> = ...;
  /*762*/ COUNT_OF_ALTS    | 0x000002,
  /*763*/ COUNT_OF_PHRASES | 0x000003,
  /*764*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000035,  /* and */
  /*765*/ PHRASE_TYPE      | G_NL_opt,
  /*766*/ PHRASE_TYPE      | G_IMP,
  /*767*/ COUNT_OF_PHRASES | 0x000000,

// P<INCL_LIST_opt> = ...;
  /*768*/ COUNT_OF_ALTS    | 0x000003,
  /*769*/ COUNT_OF_PHRASES | 0x000001,
  /*770*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000036,  /* list */
  /*771*/ COUNT_OF_PHRASES | 0x000001,
  /*772*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000037,  /* endoflist */
  /*773*/ COUNT_OF_PHRASES | 0x000000,

// P<STATEMENT> = ...;
  /*774*/ COUNT_OF_ALTS    | 0x000026,
  /*775*/ COUNT_OF_PHRASES | 0x000001,
  /*776*/ PHRASE_TYPE      | G_Declaration_T,
  /*777*/ COUNT_OF_PHRASES | 0x000002,
  /*778*/ PHRASE_TYPE      | G_simple_label,
  /*779*/ PHRASE_TYPE      | G_T,
  /*780*/ COUNT_OF_PHRASES | 0x000001,
  /*781*/ PHRASE_TYPE      | G_simple_label,
  /*782*/ COUNT_OF_PHRASES | 0x000002,
  /*783*/ PHRASE_TYPE      | G_switch_label,
  /*784*/ PHRASE_TYPE      | G_T,
  /*785*/ COUNT_OF_PHRASES | 0x000001,
  /*786*/ PHRASE_TYPE      | G_switch_label,
  /*787*/ COUNT_OF_PHRASES | 0x000005,
  /*788*/ PHRASE_TYPE      | G_FELSE_opt,
  /*789*/ PHRASE_TYPE      | G_if_or_unless,
  /*790*/ PHRASE_TYPE      | G_COND,
  /*791*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002f,  /* start */
  /*792*/ PHRASE_TYPE      | G_T,
  /*793*/ COUNT_OF_PHRASES | 0x000006,
  /*794*/ PHRASE_TYPE      | G_FELSE_opt,
  /*795*/ PHRASE_TYPE      | G_if_or_unless,
  /*796*/ PHRASE_TYPE      | G_COND,
  /*797*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* then */
  /*798*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002f,  /* start */
  /*799*/ PHRASE_TYPE      | G_T,
  /*800*/ COUNT_OF_PHRASES | 0x000007,
  /*801*/ PHRASE_TYPE      | G_FELSE_opt,
  /*802*/ PHRASE_TYPE      | G_if_or_unless,
  /*803*/ PHRASE_TYPE      | G_COND,
  /*804*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* then */
  /*805*/ PHRASE_TYPE      | G_IMP,
  /*806*/ PHRASE_TYPE      | G_else_final_IMP_opt,
  /*807*/ PHRASE_TYPE      | G_T,
  /*808*/ COUNT_OF_PHRASES | 0x000004,
  /*809*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000031,  /* finish */
  /*810*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* else */
  /*811*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002f,  /* start */
  /*812*/ PHRASE_TYPE      | G_T,
  /*813*/ COUNT_OF_PHRASES | 0x000004,
  /*814*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000031,  /* finish */
  /*815*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* else */
  /*816*/ PHRASE_TYPE      | G_IMP,
  /*817*/ PHRASE_TYPE      | G_T,
  /*818*/ COUNT_OF_PHRASES | 0x000002,
  /*819*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* else */
  /*820*/ PHRASE_TYPE      | G_T,
  /*821*/ COUNT_OF_PHRASES | 0x000004,
  /*822*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* else */
  /*823*/ PHRASE_TYPE      | G_if_or_unless,
  /*824*/ PHRASE_TYPE      | G_COND,
  /*825*/ PHRASE_TYPE      | G_T,
  /*826*/ COUNT_OF_PHRASES | 0x000007,
  /*827*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* else */
  /*828*/ PHRASE_TYPE      | G_if_or_unless,
  /*829*/ PHRASE_TYPE      | G_COND,
  /*830*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* then */
  /*831*/ PHRASE_TYPE      | G_IMP,
  /*832*/ PHRASE_TYPE      | G_else_if_unless_XIMP_opt,
  /*833*/ PHRASE_TYPE      | G_T,
  /*834*/ COUNT_OF_PHRASES | 0x000002,
  /*835*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000031,  /* finish */
  /*836*/ PHRASE_TYPE      | G_T,
  /*837*/ COUNT_OF_PHRASES | 0x000002,
  /*838*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000038,  /* begin */
  /*839*/ PHRASE_TYPE      | G_T,
  /*840*/ COUNT_OF_PHRASES | 0x000003,
  /*841*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000039,  /* program */
  /*842*/ PHRASE_TYPE      | G_IDENT,
  /*843*/ PHRASE_TYPE      | G_T,
  /*844*/ COUNT_OF_PHRASES | 0x000002,
  /*845*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000036,  /* list */
  /*846*/ PHRASE_TYPE      | G_T,
  /*847*/ COUNT_OF_PHRASES | 0x000002,
  /*848*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00003a,  /* endofprogram */
  /*849*/ PHRASE_TYPE      | G_T,
  /*850*/ COUNT_OF_PHRASES | 0x000002,
  /*851*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00003b,  /* endoffile */
  /*852*/ PHRASE_TYPE      | G_T,
  /*853*/ COUNT_OF_PHRASES | 0x000002,
  /*854*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00003c,  /* endofperm */
  /*855*/ PHRASE_TYPE      | G_T,
  /*856*/ COUNT_OF_PHRASES | 0x000002,
  /*857*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000037,  /* endoflist */
  /*858*/ PHRASE_TYPE      | G_T,
  /*859*/ COUNT_OF_PHRASES | 0x000002,
  /*860*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00003d,  /* end */
  /*861*/ PHRASE_TYPE      | G_T,
  /*862*/ COUNT_OF_PHRASES | 0x000002,
  /*863*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00003e,  /* cycle */
  /*864*/ PHRASE_TYPE      | G_T,
  /*865*/ COUNT_OF_PHRASES | 0x000003,
  /*866*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00003e,  /* cycle */
  /*867*/ PHRASE_TYPE      | G_SEQ,
  /*868*/ PHRASE_TYPE      | G_T,
  /*869*/ COUNT_OF_PHRASES | 0x000003,
  /*870*/ PHRASE_TYPE      | G_wh_for,
  /*871*/ PHRASE_TYPE      | G_cycle_IMP,
  /*872*/ PHRASE_TYPE      | G_T,
  /*873*/ COUNT_OF_PHRASES | 0x000002,
  /*874*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00003f,  /* repeat */
  /*875*/ PHRASE_TYPE      | G_T,
  /*876*/ COUNT_OF_PHRASES | 0x000004,
  /*877*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00003f,  /* repeat */
  /*878*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000040,  /* until */
  /*879*/ PHRASE_TYPE      | G_COND,
  /*880*/ PHRASE_TYPE      | G_T,
  /*881*/ COUNT_OF_PHRASES | 0x000004,
  /*882*/ PHRASE_TYPE      | G_on_event,
  /*883*/ PHRASE_TYPE      | G_event_list_def,
  /*884*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002f,  /* start */
  /*885*/ PHRASE_TYPE      | G_T,
  /*886*/ COUNT_OF_PHRASES | 0x000003,
  /*887*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000041,  /* control */
  /*888*/ PHRASE_TYPE      | G_IEXP,
  /*889*/ PHRASE_TYPE      | G_T,
  /*890*/ COUNT_OF_PHRASES | 0x000003,
  /*891*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000042,  /* diagnose */
  /*892*/ PHRASE_TYPE      | G_IEXP,
  /*893*/ PHRASE_TYPE      | G_T,
  /*894*/ COUNT_OF_PHRASES | 0x000004,
  /*895*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002a,  /* '*' */
  /*896*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*897*/ PHRASE_TYPE      | G_IEXP,
  /*898*/ PHRASE_TYPE      | G_T,
  /*899*/ COUNT_OF_PHRASES | 0x000002,
  /*900*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002a,  /* '*' */
  /*901*/ PHRASE_TYPE      | G_T,
  /*902*/ COUNT_OF_PHRASES | 0x000005,
  /*903*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000043,  /* include */
  /*904*/ PHRASE_TYPE      | GUARD_PHRASE       | G_dq,
  /*905*/ PHRASE_TYPE      | G_CONST,
  /*906*/ PHRASE_TYPE      | G_INCL_LIST_opt,
  /*907*/ PHRASE_TYPE      | G_T,
  /*908*/ COUNT_OF_PHRASES | 0x000002,
  /*909*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000044,  /* realslong */
  /*910*/ PHRASE_TYPE      | G_T,
  /*911*/ COUNT_OF_PHRASES | 0x000002,
  /*912*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000045,  /* realsnormal */
  /*913*/ PHRASE_TYPE      | G_T,
  /*914*/ COUNT_OF_PHRASES | 0x000003,
  /*915*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000046,  /* option */
  /*916*/ PHRASE_TYPE      | G_OCONST,
  /*917*/ PHRASE_TYPE      | G_T,
  /*918*/ COUNT_OF_PHRASES | 0x000002,
  /*919*/ PHRASE_TYPE      | G_IMP,
  /*920*/ PHRASE_TYPE      | G_iu_while_until_for_T,
  /*921*/ COUNT_OF_PHRASES | 0x000001,
  /*922*/ PHRASE_TYPE      | G_COMMENT_T,

// P<wh_for> = ...;
  /*923*/ COUNT_OF_ALTS    | 0x000002,
  /*924*/ COUNT_OF_PHRASES | 0x000002,
  /*925*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000047,  /* while */
  /*926*/ PHRASE_TYPE      | G_COND,
  /*927*/ COUNT_OF_PHRASES | 0x000002,
  /*928*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000048,  /* for */
  /*929*/ PHRASE_TYPE      | G_SEQ,

// P<cycle_IMP> = ...;
  /*930*/ COUNT_OF_ALTS    | 0x000002,
  /*931*/ COUNT_OF_PHRASES | 0x000001,
  /*932*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00003e,  /* cycle */
  /*933*/ COUNT_OF_PHRASES | 0x000002,
  /*934*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* then */
  /*935*/ PHRASE_TYPE      | G_IMP,

// P<event_list_def> = ...;
  /*936*/ COUNT_OF_ALTS    | 0x000002,
  /*937*/ COUNT_OF_PHRASES | 0x000001,
  /*938*/ PHRASE_TYPE      | G_const_event_list,
  /*939*/ COUNT_OF_PHRASES | 0x000001,
  /*940*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002a,  /* '*' */

// P<iu_while_until_for_T> = ...;
  /*941*/ COUNT_OF_ALTS    | 0x000005,
  /*942*/ COUNT_OF_PHRASES | 0x000003,
  /*943*/ PHRASE_TYPE      | G_if_or_unless,
  /*944*/ PHRASE_TYPE      | G_COND,
  /*945*/ PHRASE_TYPE      | G_T,
  /*946*/ COUNT_OF_PHRASES | 0x000003,
  /*947*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000047,  /* while */
  /*948*/ PHRASE_TYPE      | G_COND,
  /*949*/ PHRASE_TYPE      | G_T,
  /*950*/ COUNT_OF_PHRASES | 0x000003,
  /*951*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000040,  /* until */
  /*952*/ PHRASE_TYPE      | G_COND,
  /*953*/ PHRASE_TYPE      | G_T,
  /*954*/ COUNT_OF_PHRASES | 0x000003,
  /*955*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000048,  /* for */
  /*956*/ PHRASE_TYPE      | G_SEQ,
  /*957*/ PHRASE_TYPE      | G_T,
  /*958*/ COUNT_OF_PHRASES | 0x000001,
  /*959*/ PHRASE_TYPE      | G_T,

// P<AddressOffsetOp> = ...;
  /*960*/ COUNT_OF_ALTS    | 0x000002,
  /*961*/ COUNT_OF_PHRASES | 0x000002,
  /*962*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002b,  /* '+' */
  /*963*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002b,  /* '+' */
  /*964*/ COUNT_OF_PHRASES | 0x000002,
  /*965*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002d,  /* '-' */
  /*966*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002d,  /* '-' */

// P<ADDOP_SEXP_opt> = ...;
  /*967*/ COUNT_OF_ALTS    | 0x000002,
  /*968*/ COUNT_OF_PHRASES | 0x000002,
  /*969*/ PHRASE_TYPE      | G_AddressOffsetOp,
  /*970*/ PHRASE_TYPE      | G_SEXP,
  /*971*/ COUNT_OF_PHRASES | 0x000000,

// P<A_or_AN_or_NA_or_NAN> = ...;
  /*972*/ COUNT_OF_ALTS    | 0x000004,
  /*973*/ COUNT_OF_PHRASES | 0x000001,
  /*974*/ PHRASE_TYPE      | G_A,
  /*975*/ COUNT_OF_PHRASES | 0x000001,
  /*976*/ PHRASE_TYPE      | G_AN,
  /*977*/ COUNT_OF_PHRASES | 0x000001,
  /*978*/ PHRASE_TYPE      | G_NA,
  /*979*/ COUNT_OF_PHRASES | 0x000001,
  /*980*/ PHRASE_TYPE      | G_NAN,

// P<A_or_AN> = ...;
  /*981*/ COUNT_OF_ALTS    | 0x000002,
  /*982*/ COUNT_OF_PHRASES | 0x000001,
  /*983*/ PHRASE_TYPE      | G_A,
  /*984*/ COUNT_OF_PHRASES | 0x000001,
  /*985*/ PHRASE_TYPE      | G_AN,

// P<NA_or_NAN> = ...;
  /*986*/ COUNT_OF_ALTS    | 0x000002,
  /*987*/ COUNT_OF_PHRASES | 0x000001,
  /*988*/ PHRASE_TYPE      | G_NA,
  /*989*/ COUNT_OF_PHRASES | 0x000001,
  /*990*/ PHRASE_TYPE      | G_NAN,

// P<A_or_AN_opt> = ...;
  /*991*/ COUNT_OF_ALTS    | 0x000002,
  /*992*/ COUNT_OF_PHRASES | 0x000001,
  /*993*/ PHRASE_TYPE      | G_A_or_AN,
  /*994*/ COUNT_OF_PHRASES | 0x000001,
  /*995*/ PHRASE_TYPE      | G_A_or_AN,

// P<NA_or_NAN_opt> = ...;
  /*996*/ COUNT_OF_ALTS    | 0x000002,
  /*997*/ COUNT_OF_PHRASES | 0x000001,
  /*998*/ PHRASE_TYPE      | G_NA_or_NAN,
  /*999*/ COUNT_OF_PHRASES | 0x000001,
  /*1000*/ PHRASE_TYPE      | G_NA_or_NAN,

// P<VAR_ASSIGN> = ...;
  /*1001*/ COUNT_OF_ALTS    | 0x000002,
  /*1002*/ COUNT_OF_PHRASES | 0x000003,
  /*1003*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*1004*/ PHRASE_TYPE      | G_NL_opt,
  /*1005*/ PHRASE_TYPE      | G_EXP,
  /*1006*/ COUNT_OF_PHRASES | 0x000005,
  /*1007*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003c,  /* '<' */
  /*1008*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002d,  /* '-' */
  /*1009*/ PHRASE_TYPE      | G_NL_opt,
  /*1010*/ PHRASE_TYPE      | G_SIGN_opt,
  /*1011*/ PHRASE_TYPE      | G_EXP,

// P<INIT_DEC_ASSIGNMENTS> = ...;
  /*1012*/ COUNT_OF_ALTS    | 0x000004,
  /*1013*/ COUNT_OF_PHRASES | 0x000002,
  /*1014*/ PHRASE_TYPE      | G_V,
  /*1015*/ PHRASE_TYPE      | G_VAR_ASSIGN,
  /*1016*/ COUNT_OF_PHRASES | 0x000006,
  /*1017*/ PHRASE_TYPE      | G_N,
  /*1018*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*1019*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*1020*/ PHRASE_TYPE      | G_NL_opt,
  /*1021*/ PHRASE_TYPE      | G_V_or_N,
  /*1022*/ PHRASE_TYPE      | G_ADDOP_SEXP_opt,
  /*1023*/ COUNT_OF_PHRASES | 0x000005,
  /*1024*/ PHRASE_TYPE      | G_AN,
  /*1025*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*1026*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*1027*/ PHRASE_TYPE      | G_NL_opt,
  /*1028*/ PHRASE_TYPE      | G_A_or_AN,
  /*1029*/ COUNT_OF_PHRASES | 0x000005,
  /*1030*/ PHRASE_TYPE      | G_NAN,
  /*1031*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*1032*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*1033*/ PHRASE_TYPE      | G_NL_opt,
  /*1034*/ PHRASE_TYPE      | G_NA_or_NAN,

// P<rest_of_IDENTS> = ...;
  /*1035*/ COUNT_OF_ALTS    | 0x000002,
  /*1036*/ COUNT_OF_PHRASES | 0x000004,
  /*1037*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*1038*/ PHRASE_TYPE      | G_NL_opt,
  /*1039*/ PHRASE_TYPE      | G_IDENT,
  /*1040*/ PHRASE_TYPE      | G_rest_of_IDENTS,
  /*1041*/ COUNT_OF_PHRASES | 0x000000,

// P<IDENTS> = ...;
  /*1042*/ COUNT_OF_ALTS    | 0x000001,
  /*1043*/ COUNT_OF_PHRASES | 0x000002,
  /*1044*/ PHRASE_TYPE      | G_IDENT,
  /*1045*/ PHRASE_TYPE      | G_rest_of_IDENTS,

// P<V_or_N> = ...;
  /*1046*/ COUNT_OF_ALTS    | 0x000005,
  /*1047*/ COUNT_OF_PHRASES | 0x000002,
  /*1048*/ PHRASE_TYPE      | G_V,
  /*1049*/ PHRASE_TYPE      | G_ESC_ARRAY_or_REC,
  /*1050*/ COUNT_OF_PHRASES | 0x000002,
  /*1051*/ PHRASE_TYPE      | G_N,
  /*1052*/ PHRASE_TYPE      | G_ESC_ARRAY_or_REC,
  /*1053*/ COUNT_OF_PHRASES | 0x000001,
  /*1054*/ PHRASE_TYPE      | G_Fn_CALL,
  /*1055*/ COUNT_OF_PHRASES | 0x000002,
  /*1056*/ PHRASE_TYPE      | G_Map_CALL,
  /*1057*/ PHRASE_TYPE      | G_ESCREC,
  /*1058*/ COUNT_OF_PHRASES | 0x000001,
  /*1059*/ PHRASE_TYPE      | G_CONST,

// P<extra> = ...;
  /*1060*/ COUNT_OF_ALTS    | 0x000002,
  /*1061*/ COUNT_OF_PHRASES | 0x000003,
  /*1062*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*1063*/ PHRASE_TYPE      | G_NL_opt,
  /*1064*/ PHRASE_TYPE      | G_EXP,
  /*1065*/ COUNT_OF_PHRASES | 0x000000,

// P<subevent_and_extra> = ...;
  /*1066*/ COUNT_OF_ALTS    | 0x000002,
  /*1067*/ COUNT_OF_PHRASES | 0x000004,
  /*1068*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*1069*/ PHRASE_TYPE      | G_NL_opt,
  /*1070*/ PHRASE_TYPE      | G_EXP,
  /*1071*/ PHRASE_TYPE      | G_extra,
  /*1072*/ COUNT_OF_PHRASES | 0x000000,

// P<IMP_ASSIGN> = ...;
  /*1073*/ COUNT_OF_ALTS    | 0x000003,
  /*1074*/ COUNT_OF_PHRASES | 0x000003,
  /*1075*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*1076*/ PHRASE_TYPE      | G_NL_opt,
  /*1077*/ PHRASE_TYPE      | G_EXP,
  /*1078*/ COUNT_OF_PHRASES | 0x000005,
  /*1079*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003c,  /* '<' */
  /*1080*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002d,  /* '-' */
  /*1081*/ PHRASE_TYPE      | G_NL_opt,
  /*1082*/ PHRASE_TYPE      | G_SIGN_opt,
  /*1083*/ PHRASE_TYPE      | G_EXP,
  /*1084*/ COUNT_OF_PHRASES | 0x000004,
  /*1085*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002d,  /* '-' */
  /*1086*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003e,  /* '>' */
  /*1087*/ PHRASE_TYPE      | G_NL_opt,
  /*1088*/ PHRASE_TYPE      | G_RESEXP,

// P<N_ASS> = ...;
  /*1089*/ COUNT_OF_ALTS    | 0x000002,
  /*1090*/ COUNT_OF_PHRASES | 0x000002,
  /*1091*/ PHRASE_TYPE      | G_ADDOP_SEXP_opt,
  /*1092*/ PHRASE_TYPE      | G_IMP_ASSIGN,
  /*1093*/ COUNT_OF_PHRASES | 0x000005,
  /*1094*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*1095*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*1096*/ PHRASE_TYPE      | G_NL_opt,
  /*1097*/ PHRASE_TYPE      | G_V_or_N,
  /*1098*/ PHRASE_TYPE      | G_ADDOP_SEXP_opt,

// P<rest_of_AND_COND> = ...;
  /*1099*/ COUNT_OF_ALTS    | 0x000002,
  /*1100*/ COUNT_OF_PHRASES | 0x000002,
  /*1101*/ PHRASE_TYPE      | G_AND_COND,
  /*1102*/ PHRASE_TYPE      | G_rest_of_AND_COND,
  /*1103*/ COUNT_OF_PHRASES | 0x000000,

// P<AND_COND> = ...;
  /*1104*/ COUNT_OF_ALTS    | 0x000001,
  /*1105*/ COUNT_OF_PHRASES | 0x000004,
  /*1106*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000035,  /* and */
  /*1107*/ PHRASE_TYPE      | G_NL_opt,
  /*1108*/ PHRASE_TYPE      | G_SCOND,
  /*1109*/ PHRASE_TYPE      | G_rest_of_AND_COND,

// P<rest_of_OR_COND> = ...;
  /*1110*/ COUNT_OF_ALTS    | 0x000002,
  /*1111*/ COUNT_OF_PHRASES | 0x000002,
  /*1112*/ PHRASE_TYPE      | G_OR_COND,
  /*1113*/ PHRASE_TYPE      | G_rest_of_OR_COND,
  /*1114*/ COUNT_OF_PHRASES | 0x000000,

// P<OR_COND> = ...;
  /*1115*/ COUNT_OF_ALTS    | 0x000001,
  /*1116*/ COUNT_OF_PHRASES | 0x000004,
  /*1117*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000049,  /* or */
  /*1118*/ PHRASE_TYPE      | G_NL_opt,
  /*1119*/ PHRASE_TYPE      | G_SCOND,
  /*1120*/ PHRASE_TYPE      | G_rest_of_OR_COND,

// P<rest_of_COND> = ...;
  /*1121*/ COUNT_OF_ALTS    | 0x000003,
  /*1122*/ COUNT_OF_PHRASES | 0x000001,
  /*1123*/ PHRASE_TYPE      | G_AND_COND,
  /*1124*/ COUNT_OF_PHRASES | 0x000001,
  /*1125*/ PHRASE_TYPE      | G_OR_COND,
  /*1126*/ COUNT_OF_PHRASES | 0x000000,

// P<COND> = ...;
  /*1127*/ COUNT_OF_ALTS    | 0x000001,
  /*1128*/ COUNT_OF_PHRASES | 0x000002,
  /*1129*/ PHRASE_TYPE      | G_SCOND,
  /*1130*/ PHRASE_TYPE      | G_rest_of_COND,

// P<OP1> = ...;
  /*1131*/ COUNT_OF_ALTS    | 0x000006,
  /*1132*/ COUNT_OF_PHRASES | 0x000002,
  /*1133*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003c,  /* '<' */
  /*1134*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003c,  /* '<' */
  /*1135*/ COUNT_OF_PHRASES | 0x000002,
  /*1136*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003e,  /* '>' */
  /*1137*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003e,  /* '>' */
  /*1138*/ COUNT_OF_PHRASES | 0x000002,
  /*1139*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00005e,  /* '^' */
  /*1140*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00005e,  /* '^' */
  /*1141*/ COUNT_OF_PHRASES | 0x000001,
  /*1142*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00005e,  /* '^' */
  /*1143*/ COUNT_OF_PHRASES | 0x000002,
  /*1144*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00005c,  /* '\' */
  /*1145*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00005c,  /* '\' */
  /*1146*/ COUNT_OF_PHRASES | 0x000001,
  /*1147*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00005c,  /* '\' */

// P<OP2> = ...;
  /*1148*/ COUNT_OF_ALTS    | 0x000004,
  /*1149*/ COUNT_OF_PHRASES | 0x000001,
  /*1150*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000026,  /* '&' */
  /*1151*/ COUNT_OF_PHRASES | 0x000001,
  /*1152*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002a,  /* '*' */
  /*1153*/ COUNT_OF_PHRASES | 0x000002,
  /*1154*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002f,  /* '/' */
  /*1155*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002f,  /* '/' */
  /*1156*/ COUNT_OF_PHRASES | 0x000001,
  /*1157*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002f,  /* '/' */

// P<OP3> = ...;
  /*1158*/ COUNT_OF_ALTS    | 0x000004,
  /*1159*/ COUNT_OF_PHRASES | 0x000001,
  /*1160*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002b,  /* '+' */
  /*1161*/ COUNT_OF_PHRASES | 0x000001,
  /*1162*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002d,  /* '-' */
  /*1163*/ COUNT_OF_PHRASES | 0x000002,
  /*1164*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000021,  /* '!' */
  /*1165*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000021,  /* '!' */
  /*1166*/ COUNT_OF_PHRASES | 0x000001,
  /*1167*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000021,  /* '!' */

// P<OP1_EXP> = ...;
  /*1168*/ COUNT_OF_ALTS    | 0x000001,
  /*1169*/ COUNT_OF_PHRASES | 0x000002,
  /*1170*/ PHRASE_TYPE      | G_OP1,
  /*1171*/ PHRASE_TYPE      | G_SEXP,

// P<OP2_EXP> = ...;
  /*1172*/ COUNT_OF_ALTS    | 0x000001,
  /*1173*/ COUNT_OF_PHRASES | 0x000002,
  /*1174*/ PHRASE_TYPE      | G_OP2,
  /*1175*/ PHRASE_TYPE      | G_EXP1,

// P<OP3_EXP> = ...;
  /*1176*/ COUNT_OF_ALTS    | 0x000001,
  /*1177*/ COUNT_OF_PHRASES | 0x000002,
  /*1178*/ PHRASE_TYPE      | G_OP3,
  /*1179*/ PHRASE_TYPE      | G_EXP2,

// P<OP1_EXPS> = ...;
  /*1180*/ COUNT_OF_ALTS    | 0x000002,
  /*1181*/ COUNT_OF_PHRASES | 0x000002,
  /*1182*/ PHRASE_TYPE      | G_OP1_EXP,
  /*1183*/ PHRASE_TYPE      | G_OP1_EXPS,
  /*1184*/ COUNT_OF_PHRASES | 0x000000,

// P<OP2_EXPS> = ...;
  /*1185*/ COUNT_OF_ALTS    | 0x000002,
  /*1186*/ COUNT_OF_PHRASES | 0x000002,
  /*1187*/ PHRASE_TYPE      | G_OP2_EXP,
  /*1188*/ PHRASE_TYPE      | G_OP2_EXPS,
  /*1189*/ COUNT_OF_PHRASES | 0x000000,

// P<OP3_EXPS> = ...;
  /*1190*/ COUNT_OF_ALTS    | 0x000002,
  /*1191*/ COUNT_OF_PHRASES | 0x000002,
  /*1192*/ PHRASE_TYPE      | G_OP3_EXP,
  /*1193*/ PHRASE_TYPE      | G_OP3_EXPS,
  /*1194*/ COUNT_OF_PHRASES | 0x000000,

// P<COMP2_opt> = ...;
  /*1195*/ COUNT_OF_ALTS    | 0x000002,
  /*1196*/ COUNT_OF_PHRASES | 0x000001,
  /*1197*/ PHRASE_TYPE      | G_COMP2,
  /*1198*/ COUNT_OF_PHRASES | 0x000000,

// P<COMP2> = ...;
  /*1199*/ COUNT_OF_ALTS    | 0x000001,
  /*1200*/ COUNT_OF_PHRASES | 0x000002,
  /*1201*/ PHRASE_TYPE      | G_COMP,
  /*1202*/ PHRASE_TYPE      | G_EXP,

// P<COMP1> = ...;
  /*1203*/ COUNT_OF_ALTS    | 0x000001,
  /*1204*/ COUNT_OF_PHRASES | 0x000002,
  /*1205*/ PHRASE_TYPE      | G_COMP,
  /*1206*/ PHRASE_TYPE      | G_EXP,

// P<COMP12_opt> = ...;
  /*1207*/ COUNT_OF_ALTS    | 0x000001,
  /*1208*/ COUNT_OF_PHRASES | 0x000002,
  /*1209*/ PHRASE_TYPE      | G_COMP1,
  /*1210*/ PHRASE_TYPE      | G_COMP2_opt,

// P<DOT_V_Ns> = ...;
  /*1211*/ COUNT_OF_ALTS    | 0x000002,
  /*1212*/ COUNT_OF_PHRASES | 0x000002,
  /*1213*/ PHRASE_TYPE      | G_DOT_V_N,
  /*1214*/ PHRASE_TYPE      | G_DOT_V_Ns,
  /*1215*/ COUNT_OF_PHRASES | 0x000000,

// P<DOT_V_N> = ...;
  /*1216*/ COUNT_OF_ALTS    | 0x000001,
  /*1217*/ COUNT_OF_PHRASES | 0x000002,
  /*1218*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002e,  /* '.' */
  /*1219*/ PHRASE_TYPE      | G_V_or_N,

// P<COMPARISON> = ...;
  /*1220*/ COUNT_OF_ALTS    | 0x000006,
  /*1221*/ COUNT_OF_PHRASES | 0x000002,
  /*1222*/ PHRASE_TYPE      | G_COMP1,
  /*1223*/ PHRASE_TYPE      | G_COMP2_opt,
  /*1224*/ COUNT_OF_PHRASES | 0x000002,
  /*1225*/ PHRASE_TYPE      | G_ACOMP,
  /*1226*/ PHRASE_TYPE      | G_V_or_N,
  /*1227*/ COUNT_OF_PHRASES | 0x000003,
  /*1228*/ PHRASE_TYPE      | G_ACOMP,
  /*1229*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000030,  /* '0' */
  /*1230*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_ZERO,
  /*1231*/ COUNT_OF_PHRASES | 0x000003,
  /*1232*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002d,  /* '-' */
  /*1233*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003e,  /* '>' */
  /*1234*/ PHRASE_TYPE      | G_RESEXP,
  /*1235*/ COUNT_OF_PHRASES | 0x000004,
  /*1236*/ PHRASE_TYPE      | G_OP1_EXPS,
  /*1237*/ PHRASE_TYPE      | G_OP2_EXPS,
  /*1238*/ PHRASE_TYPE      | G_OP3_EXPS,
  /*1239*/ PHRASE_TYPE      | G_COMP12_opt,
  /*1240*/ COUNT_OF_PHRASES | 0x000002,
  /*1241*/ PHRASE_TYPE      | G_DOT_V_Ns,
  /*1242*/ PHRASE_TYPE      | G_COMP12_opt,

// P<COMP1OS2> = ...;
  /*1243*/ COUNT_OF_ALTS    | 0x000001,
  /*1244*/ COUNT_OF_PHRASES | 0x000003,
  /*1245*/ PHRASE_TYPE      | G_COMP,
  /*1246*/ PHRASE_TYPE      | G_EXP,
  /*1247*/ PHRASE_TYPE      | G_COMP2_opt,

// P<SCOND> = ...;
  /*1248*/ COUNT_OF_ALTS    | 0x000008,
  /*1249*/ COUNT_OF_PHRASES | 0x000002,
  /*1250*/ PHRASE_TYPE      | G_V_or_N,
  /*1251*/ PHRASE_TYPE      | G_COMPARISON,
  /*1252*/ COUNT_OF_PHRASES | 0x000003,
  /*1253*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*1254*/ PHRASE_TYPE      | G_COND,
  /*1255*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*1256*/ COUNT_OF_PHRASES | 0x000002,
  /*1257*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00004a,  /* not */
  /*1258*/ PHRASE_TYPE      | G_SCOND,
  /*1259*/ COUNT_OF_PHRASES | 0x000001,
  /*1260*/ PHRASE_TYPE      | G_Pred_CALL,
  /*1261*/ COUNT_OF_PHRASES | 0x000007,
  /*1262*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*1263*/ PHRASE_TYPE      | G_EXP,
  /*1264*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*1265*/ PHRASE_TYPE      | G_OP1_EXPS,
  /*1266*/ PHRASE_TYPE      | G_OP2_EXPS,
  /*1267*/ PHRASE_TYPE      | G_OP3_EXPS,
  /*1268*/ PHRASE_TYPE      | G_COMP1OS2,
  /*1269*/ COUNT_OF_PHRASES | 0x000003,
  /*1270*/ PHRASE_TYPE      | G_A_or_AN_or_NA_or_NAN,
  /*1271*/ PHRASE_TYPE      | G_ACOMP,
  /*1272*/ PHRASE_TYPE      | G_A_or_AN_or_NA_or_NAN,
  /*1273*/ COUNT_OF_PHRASES | 0x000004,
  /*1274*/ PHRASE_TYPE      | G_A_or_AN_or_NA_or_NAN,
  /*1275*/ PHRASE_TYPE      | G_ACOMP,
  /*1276*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000030,  /* '0' */
  /*1277*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_ZERO,
  /*1278*/ COUNT_OF_PHRASES | 0x000002,
  /*1279*/ PHRASE_TYPE      | G_EXP,
  /*1280*/ PHRASE_TYPE      | G_COMP12_opt,

// P<SIGN_opt> = ...;
  /*1281*/ COUNT_OF_ALTS    | 0x000003,
  /*1282*/ COUNT_OF_PHRASES | 0x000001,
  /*1283*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002b,  /* '+' */
  /*1284*/ COUNT_OF_PHRASES | 0x000001,
  /*1285*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002d,  /* '-' */
  /*1286*/ COUNT_OF_PHRASES | 0x000000,

// P<UOP> = ...;
  /*1287*/ COUNT_OF_ALTS    | 0x000003,
  /*1288*/ COUNT_OF_PHRASES | 0x000001,
  /*1289*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00005c,  /* '\' */
  /*1290*/ COUNT_OF_PHRASES | 0x000001,
  /*1291*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00005e,  /* '^' */
  /*1292*/ COUNT_OF_PHRASES | 0x000001,
  /*1293*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00007e,  /* '~' */

// P<UOP_opt> = ...;
  /*1294*/ COUNT_OF_ALTS    | 0x000002,
  /*1295*/ COUNT_OF_PHRASES | 0x000001,
  /*1296*/ PHRASE_TYPE      | G_UOP,
  /*1297*/ COUNT_OF_PHRASES | 0x000000,

// P<dot_Vs_opt> = ...;
  /*1298*/ COUNT_OF_ALTS    | 0x000002,
  /*1299*/ COUNT_OF_PHRASES | 0x000002,
  /*1300*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002e,  /* '.' */
  /*1301*/ PHRASE_TYPE      | G_V_or_N,
  /*1302*/ COUNT_OF_PHRASES | 0x000000,

// P<dot_Vs> = ...;
  /*1303*/ COUNT_OF_ALTS    | 0x000001,
  /*1304*/ COUNT_OF_PHRASES | 0x000003,
  /*1305*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002e,  /* '.' */
  /*1306*/ PHRASE_TYPE      | G_V_or_N,
  /*1307*/ PHRASE_TYPE      | G_dot_Vs_opt,

// P<EXP> = ...;
  /*1308*/ COUNT_OF_ALTS    | 0x000004,
  /*1309*/ COUNT_OF_PHRASES | 0x000002,
  /*1310*/ PHRASE_TYPE      | G_V_or_N,
  /*1311*/ PHRASE_TYPE      | G_dot_Vs,
  /*1312*/ COUNT_OF_PHRASES | 0x000004,
  /*1313*/ PHRASE_TYPE      | G_V_or_N,
  /*1314*/ PHRASE_TYPE      | G_OP1_EXPS,
  /*1315*/ PHRASE_TYPE      | G_OP2_EXPS,
  /*1316*/ PHRASE_TYPE      | G_OP3_EXPS,
  /*1317*/ COUNT_OF_PHRASES | 0x000005,
  /*1318*/ PHRASE_TYPE      | G_UOP_opt,
  /*1319*/ PHRASE_TYPE      | G_SEXP,
  /*1320*/ PHRASE_TYPE      | G_OP1_EXPS,
  /*1321*/ PHRASE_TYPE      | G_OP2_EXPS,
  /*1322*/ PHRASE_TYPE      | G_OP3_EXPS,
  /*1323*/ COUNT_OF_PHRASES | 0x000003,
  /*1324*/ PHRASE_TYPE      | G_SIGN_opt,
  /*1325*/ PHRASE_TYPE      | G_EXP2,
  /*1326*/ PHRASE_TYPE      | G_OP3_EXPS,

// P<EXP2> = ...;
  /*1327*/ COUNT_OF_ALTS    | 0x000001,
  /*1328*/ COUNT_OF_PHRASES | 0x000003,
  /*1329*/ PHRASE_TYPE      | G_SEXP,
  /*1330*/ PHRASE_TYPE      | G_OP1_EXPS,
  /*1331*/ PHRASE_TYPE      | G_OP2_EXPS,

// P<EXP1> = ...;
  /*1332*/ COUNT_OF_ALTS    | 0x000001,
  /*1333*/ COUNT_OF_PHRASES | 0x000002,
  /*1334*/ PHRASE_TYPE      | G_SEXP,
  /*1335*/ PHRASE_TYPE      | G_OP1_EXPS,

// P<SEXP> = ...;
  /*1336*/ COUNT_OF_ALTS    | 0x000004,
  /*1337*/ COUNT_OF_PHRASES | 0x000001,
  /*1338*/ PHRASE_TYPE      | G_V_or_N,
  /*1339*/ COUNT_OF_PHRASES | 0x000003,
  /*1340*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*1341*/ PHRASE_TYPE      | G_EXP,
  /*1342*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*1343*/ COUNT_OF_PHRASES | 0x000003,
  /*1344*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00007c,  /* '|' */
  /*1345*/ PHRASE_TYPE      | G_EXP,
  /*1346*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00007c,  /* '|' */
  /*1347*/ COUNT_OF_PHRASES | 0x000001,
  /*1348*/ PHRASE_TYPE      | G_IEXP,

// P<COP1> = ...;
  /*1349*/ COUNT_OF_ALTS    | 0x000001,
  /*1350*/ COUNT_OF_PHRASES | 0x000001,
  /*1351*/ PHRASE_TYPE      | G_OP1,

// P<COP2> = ...;
  /*1352*/ COUNT_OF_ALTS    | 0x000001,
  /*1353*/ COUNT_OF_PHRASES | 0x000001,
  /*1354*/ PHRASE_TYPE      | G_OP2,

// P<COP3> = ...;
  /*1355*/ COUNT_OF_ALTS    | 0x000001,
  /*1356*/ COUNT_OF_PHRASES | 0x000001,
  /*1357*/ PHRASE_TYPE      | G_OP3,

// P<CSIGN> = ...;
  /*1358*/ COUNT_OF_ALTS    | 0x000001,
  /*1359*/ COUNT_OF_PHRASES | 0x000001,
  /*1360*/ PHRASE_TYPE      | G_SIGN_opt,

// P<rest_of_IEXP2_EXPR> = ...;
  /*1361*/ COUNT_OF_ALTS    | 0x000002,
  /*1362*/ COUNT_OF_PHRASES | 0x000003,
  /*1363*/ PHRASE_TYPE      | G_COP3,
  /*1364*/ PHRASE_TYPE      | G_IEXP2,
  /*1365*/ PHRASE_TYPE      | G_rest_of_IEXP2_EXPR,
  /*1366*/ COUNT_OF_PHRASES | 0x000000,

// P<IEXP2_EXPR> = ...;
  /*1367*/ COUNT_OF_ALTS    | 0x000001,
  /*1368*/ COUNT_OF_PHRASES | 0x000002,
  /*1369*/ PHRASE_TYPE      | G_IEXP2,
  /*1370*/ PHRASE_TYPE      | G_rest_of_IEXP2_EXPR,

// P<COP3_IEXP2_optseq> = ...;
  /*1371*/ COUNT_OF_ALTS    | 0x000002,
  /*1372*/ COUNT_OF_PHRASES | 0x000003,
  /*1373*/ PHRASE_TYPE      | G_COP3,
  /*1374*/ PHRASE_TYPE      | G_IEXP2,
  /*1375*/ PHRASE_TYPE      | G_COP3_IEXP2_optseq,
  /*1376*/ COUNT_OF_PHRASES | 0x000000,

// P<COP2_IEXP1_optseq> = ...;
  /*1377*/ COUNT_OF_ALTS    | 0x000002,
  /*1378*/ COUNT_OF_PHRASES | 0x000003,
  /*1379*/ PHRASE_TYPE      | G_COP2,
  /*1380*/ PHRASE_TYPE      | G_IEXP1,
  /*1381*/ PHRASE_TYPE      | G_COP2_IEXP1_optseq,
  /*1382*/ COUNT_OF_PHRASES | 0x000000,

// P<COP1_IEXP0_optseq> = ...;
  /*1383*/ COUNT_OF_ALTS    | 0x000002,
  /*1384*/ COUNT_OF_PHRASES | 0x000003,
  /*1385*/ PHRASE_TYPE      | G_COP1,
  /*1386*/ PHRASE_TYPE      | G_IEXP0,
  /*1387*/ PHRASE_TYPE      | G_COP1_IEXP0_optseq,
  /*1388*/ COUNT_OF_PHRASES | 0x000000,

// P<CUOP_opt> = ...;
  /*1389*/ COUNT_OF_ALTS    | 0x000002,
  /*1390*/ COUNT_OF_PHRASES | 0x000001,
  /*1391*/ PHRASE_TYPE      | G_CUOP,
  /*1392*/ COUNT_OF_PHRASES | 0x000000,

// P<CUOP> = ...;
  /*1393*/ COUNT_OF_ALTS    | 0x000001,
  /*1394*/ COUNT_OF_PHRASES | 0x000001,
  /*1395*/ PHRASE_TYPE      | G_UOP,

// P<IEXP2> = ...;
  /*1396*/ COUNT_OF_ALTS    | 0x000001,
  /*1397*/ COUNT_OF_PHRASES | 0x000003,
  /*1398*/ PHRASE_TYPE      | G_IEXP0,
  /*1399*/ PHRASE_TYPE      | G_COP1_IEXP0_optseq,
  /*1400*/ PHRASE_TYPE      | G_COP2_IEXP1_optseq,

// P<IEXP1> = ...;
  /*1401*/ COUNT_OF_ALTS    | 0x000001,
  /*1402*/ COUNT_OF_PHRASES | 0x000002,
  /*1403*/ PHRASE_TYPE      | G_IEXP0,
  /*1404*/ PHRASE_TYPE      | G_COP1_IEXP0_optseq,

// P<IEXP0> = ...;
  /*1405*/ COUNT_OF_ALTS    | 0x000003,
  /*1406*/ COUNT_OF_PHRASES | 0x000001,
  /*1407*/ PHRASE_TYPE      | G_PCONST,
  /*1408*/ COUNT_OF_PHRASES | 0x000003,
  /*1409*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*1410*/ PHRASE_TYPE      | G_IEXP,
  /*1411*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*1412*/ COUNT_OF_PHRASES | 0x000003,
  /*1413*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00007c,  /* '|' */
  /*1414*/ PHRASE_TYPE      | G_IEXP,
  /*1415*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00007c,  /* '|' */

// P<IEXP> = ...;
  /*1416*/ COUNT_OF_ALTS    | 0x000002,
  /*1417*/ COUNT_OF_PHRASES | 0x000005,
  /*1418*/ PHRASE_TYPE      | G_CUOP_opt,
  /*1419*/ PHRASE_TYPE      | G_IEXP0,
  /*1420*/ PHRASE_TYPE      | G_COP1_IEXP0_optseq,
  /*1421*/ PHRASE_TYPE      | G_COP2_IEXP1_optseq,
  /*1422*/ PHRASE_TYPE      | G_COP3_IEXP2_optseq,
  /*1423*/ COUNT_OF_PHRASES | 0x000002,
  /*1424*/ PHRASE_TYPE      | G_CSIGN,
  /*1425*/ PHRASE_TYPE      | G_IEXP2_EXPR,

// P<PCONST> = ...;
  /*1426*/ COUNT_OF_ALTS    | 0x000002,
  /*1427*/ COUNT_OF_PHRASES | 0x000001,
  /*1428*/ PHRASE_TYPE      | G_CONST,
  /*1429*/ COUNT_OF_PHRASES | 0x000001,
  /*1430*/ PHRASE_TYPE      | G_V,

// P<dq> = ...;
  /*1431*/ COUNT_OF_ALTS    | 0x000001,
  /*1432*/ COUNT_OF_PHRASES | 0x000001,
  /*1433*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000022,  /* '"' */

// P<ACONST> = ...;
  /*1434*/ COUNT_OF_ALTS    | 0x000001,
  /*1435*/ COUNT_OF_PHRASES | 0x000002,
  /*1436*/ PHRASE_TYPE      | GUARD_PHRASE       | G_dq,
  /*1437*/ PHRASE_TYPE      | G_CONST,

// P<OCONST> = ...;
  /*1438*/ COUNT_OF_ALTS    | 0x000001,
  /*1439*/ COUNT_OF_PHRASES | 0x000002,
  /*1440*/ PHRASE_TYPE      | GUARD_PHRASE       | G_dq,
  /*1441*/ PHRASE_TYPE      | G_CONST,

// P<SEQ> = ...;
  /*1442*/ COUNT_OF_ALTS    | 0x000001,
  /*1443*/ COUNT_OF_PHRASES | 0x000008,
  /*1444*/ PHRASE_TYPE      | G_V_or_N,
  /*1445*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*1446*/ PHRASE_TYPE      | G_NL_opt,
  /*1447*/ PHRASE_TYPE      | G_EXP,
  /*1448*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*1449*/ PHRASE_TYPE      | G_EXP,
  /*1450*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*1451*/ PHRASE_TYPE      | G_EXP,

// P<record_field_decl> = ...;
  /*1452*/ COUNT_OF_ALTS    | 0x000011,
  /*1453*/ COUNT_OF_PHRASES | 0x000003,
  /*1454*/ PHRASE_TYPE      | G_simple_type,
  /*1455*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000022,  /* name */
  /*1456*/ PHRASE_TYPE      | G_IDENTS,
  /*1457*/ COUNT_OF_PHRASES | 0x000004,
  /*1458*/ PHRASE_TYPE      | G_simple_type,
  /*1459*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000024,  /* array */
  /*1460*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000022,  /* name */
  /*1461*/ PHRASE_TYPE      | G_IDENTS,
  /*1462*/ COUNT_OF_PHRASES | 0x000004,
  /*1463*/ PHRASE_TYPE      | G_simple_type,
  /*1464*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000024,  /* array */
  /*1465*/ PHRASE_TYPE      | G_IDENTS,
  /*1466*/ PHRASE_TYPE      | G_RCONST_BOUNDS,
  /*1467*/ COUNT_OF_PHRASES | 0x000005,
  /*1468*/ PHRASE_TYPE      | G_simple_type,
  /*1469*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000022,  /* name */
  /*1470*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000024,  /* array */
  /*1471*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000022,  /* name */
  /*1472*/ PHRASE_TYPE      | G_IDENTS,
  /*1473*/ COUNT_OF_PHRASES | 0x000002,
  /*1474*/ PHRASE_TYPE      | G_simple_type,
  /*1475*/ PHRASE_TYPE      | G_IDENTS,
  /*1476*/ COUNT_OF_PHRASES | 0x000006,
  /*1477*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000020,  /* string */
  /*1478*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*1479*/ PHRASE_TYPE      | G_Star_or_IEXP,
  /*1480*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*1481*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000022,  /* name */
  /*1482*/ PHRASE_TYPE      | G_IDENTS,
  /*1483*/ COUNT_OF_PHRASES | 0x000007,
  /*1484*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000020,  /* string */
  /*1485*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*1486*/ PHRASE_TYPE      | G_Star_or_IEXP,
  /*1487*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*1488*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000024,  /* array */
  /*1489*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000022,  /* name */
  /*1490*/ PHRASE_TYPE      | G_IDENTS,
  /*1491*/ COUNT_OF_PHRASES | 0x000007,
  /*1492*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000020,  /* string */
  /*1493*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*1494*/ PHRASE_TYPE      | G_IEXP,
  /*1495*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*1496*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000024,  /* array */
  /*1497*/ PHRASE_TYPE      | G_IDENTS,
  /*1498*/ PHRASE_TYPE      | G_RCONST_BOUNDS,
  /*1499*/ COUNT_OF_PHRASES | 0x000008,
  /*1500*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000020,  /* string */
  /*1501*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*1502*/ PHRASE_TYPE      | G_Star_or_IEXP,
  /*1503*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*1504*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000022,  /* name */
  /*1505*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000024,  /* array */
  /*1506*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000022,  /* name */
  /*1507*/ PHRASE_TYPE      | G_IDENTS,
  /*1508*/ COUNT_OF_PHRASES | 0x000008,
  /*1509*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000020,  /* string */
  /*1510*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*1511*/ PHRASE_TYPE      | G_Star_or_IEXP,
  /*1512*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*1513*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000022,  /* name */
  /*1514*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000024,  /* array */
  /*1515*/ PHRASE_TYPE      | G_IDENTS,
  /*1516*/ PHRASE_TYPE      | G_RCONST_BOUNDS,
  /*1517*/ COUNT_OF_PHRASES | 0x000005,
  /*1518*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000020,  /* string */
  /*1519*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*1520*/ PHRASE_TYPE      | G_IEXP,
  /*1521*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*1522*/ PHRASE_TYPE      | G_IDENTS,
  /*1523*/ COUNT_OF_PHRASES | 0x000008,
  /*1524*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000021,  /* record */
  /*1525*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*1526*/ PHRASE_TYPE      | G_IDENT,
  /*1527*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*1528*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000022,  /* name */
  /*1529*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000024,  /* array */
  /*1530*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000022,  /* name */
  /*1531*/ PHRASE_TYPE      | G_IDENTS,
  /*1532*/ COUNT_OF_PHRASES | 0x000008,
  /*1533*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000021,  /* record */
  /*1534*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*1535*/ PHRASE_TYPE      | G_IDENT,
  /*1536*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*1537*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000022,  /* name */
  /*1538*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000024,  /* array */
  /*1539*/ PHRASE_TYPE      | G_IDENTS,
  /*1540*/ PHRASE_TYPE      | G_RCONST_BOUNDS,
  /*1541*/ COUNT_OF_PHRASES | 0x000006,
  /*1542*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000021,  /* record */
  /*1543*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*1544*/ PHRASE_TYPE      | G_IDENT,
  /*1545*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*1546*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000022,  /* name */
  /*1547*/ PHRASE_TYPE      | G_IDENTS,
  /*1548*/ COUNT_OF_PHRASES | 0x000007,
  /*1549*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000021,  /* record */
  /*1550*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*1551*/ PHRASE_TYPE      | G_IDENT,
  /*1552*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*1553*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000024,  /* array */
  /*1554*/ PHRASE_TYPE      | G_IDENTS,
  /*1555*/ PHRASE_TYPE      | G_RCONST_BOUNDS,
  /*1556*/ COUNT_OF_PHRASES | 0x000005,
  /*1557*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000021,  /* record */
  /*1558*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*1559*/ PHRASE_TYPE      | G_IDENT,
  /*1560*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*1561*/ PHRASE_TYPE      | G_IDENTS,
  /*1562*/ COUNT_OF_PHRASES | 0x000004,
  /*1563*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*1564*/ PHRASE_TYPE      | G_record_field_declarations,
  /*1565*/ PHRASE_TYPE      | G_OR_record_field_declarations,
  /*1566*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */

// P<OR_record_field_declarations> = ...;
  /*1567*/ COUNT_OF_ALTS    | 0x000002,
  /*1568*/ COUNT_OF_PHRASES | 0x000003,
  /*1569*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000049,  /* or */
  /*1570*/ PHRASE_TYPE      | G_record_field_declarations,
  /*1571*/ PHRASE_TYPE      | G_OR_record_field_declarations,
  /*1572*/ COUNT_OF_PHRASES | 0x000000,

// P<more_record_field_decls> = ...;
  /*1573*/ COUNT_OF_ALTS    | 0x000002,
  /*1574*/ COUNT_OF_PHRASES | 0x000004,
  /*1575*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*1576*/ PHRASE_TYPE      | G_NL_opt,
  /*1577*/ PHRASE_TYPE      | G_record_field_decl,
  /*1578*/ PHRASE_TYPE      | G_more_record_field_decls,
  /*1579*/ COUNT_OF_PHRASES | 0x000000,

// P<record_field_declarations> = ...;
  /*1580*/ COUNT_OF_ALTS    | 0x000001,
  /*1581*/ COUNT_OF_PHRASES | 0x000003,
  /*1582*/ PHRASE_TYPE      | G_NL_opt,
  /*1583*/ PHRASE_TYPE      | G_record_field_decl,
  /*1584*/ PHRASE_TYPE      | G_more_record_field_decls,

// P<CONST_BOUNDS> = ...;
  /*1585*/ COUNT_OF_ALTS    | 0x000001,
  /*1586*/ COUNT_OF_PHRASES | 0x000005,
  /*1587*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*1588*/ PHRASE_TYPE      | G_IEXP,
  /*1589*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003a,  /* ':' */
  /*1590*/ PHRASE_TYPE      | G_IEXP,
  /*1591*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */

// P<RCONST_BOUNDS> = ...;
  /*1592*/ COUNT_OF_ALTS    | 0x000001,
  /*1593*/ COUNT_OF_PHRASES | 0x000005,
  /*1594*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*1595*/ PHRASE_TYPE      | G_IEXP,
  /*1596*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003a,  /* ':' */
  /*1597*/ PHRASE_TYPE      | G_IEXP,
  /*1598*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */

// P<BOUNDS_PAIR> = ...;
  /*1599*/ COUNT_OF_ALTS    | 0x000001,
  /*1600*/ COUNT_OF_PHRASES | 0x000003,
  /*1601*/ PHRASE_TYPE      | G_EXP,
  /*1602*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003a,  /* ':' */
  /*1603*/ PHRASE_TYPE      | G_EXP,

// P<rest_of_BPL_LIST> = ...;
  /*1604*/ COUNT_OF_ALTS    | 0x000002,
  /*1605*/ COUNT_OF_PHRASES | 0x000003,
  /*1606*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*1607*/ PHRASE_TYPE      | G_BOUNDS_PAIR,
  /*1608*/ PHRASE_TYPE      | G_rest_of_BPL_LIST,
  /*1609*/ COUNT_OF_PHRASES | 0x000000,

// P<BPL_LIST> = ...;
  /*1610*/ COUNT_OF_ALTS    | 0x000001,
  /*1611*/ COUNT_OF_PHRASES | 0x000002,
  /*1612*/ PHRASE_TYPE      | G_BOUNDS_PAIR,
  /*1613*/ PHRASE_TYPE      | G_rest_of_BPL_LIST,

// P<BPL> = ...;
  /*1614*/ COUNT_OF_ALTS    | 0x000001,
  /*1615*/ COUNT_OF_PHRASES | 0x000003,
  /*1616*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*1617*/ PHRASE_TYPE      | G_BPL_LIST,
  /*1618*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */

// P<parameter_type> = ...;
  /*1619*/ COUNT_OF_ALTS    | 0x000003,
  /*1620*/ COUNT_OF_PHRASES | 0x000001,
  /*1621*/ PHRASE_TYPE      | G_simple_type,
  /*1622*/ COUNT_OF_PHRASES | 0x000004,
  /*1623*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000020,  /* string */
  /*1624*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*1625*/ PHRASE_TYPE      | G_Star_or_IEXP,
  /*1626*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*1627*/ COUNT_OF_PHRASES | 0x000004,
  /*1628*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000021,  /* record */
  /*1629*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*1630*/ PHRASE_TYPE      | G_FM_or_Star,
  /*1631*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */

// P<parameter_type_decl> = ...;
  /*1632*/ COUNT_OF_ALTS    | 0x000004,
  /*1633*/ COUNT_OF_PHRASES | 0x000004,
  /*1634*/ PHRASE_TYPE      | G_parameter_type,
  /*1635*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000022,  /* name */
  /*1636*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000024,  /* array */
  /*1637*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000022,  /* name */
  /*1638*/ COUNT_OF_PHRASES | 0x000002,
  /*1639*/ PHRASE_TYPE      | G_parameter_type,
  /*1640*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000022,  /* name */
  /*1641*/ COUNT_OF_PHRASES | 0x000003,
  /*1642*/ PHRASE_TYPE      | G_parameter_type,
  /*1643*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000024,  /* array */
  /*1644*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000022,  /* name */
  /*1645*/ COUNT_OF_PHRASES | 0x000001,
  /*1646*/ PHRASE_TYPE      | G_parameter_type,

// P<VDEC_or_PROC> = ...;
  /*1647*/ COUNT_OF_ALTS    | 0x000002,
  /*1648*/ COUNT_OF_PHRASES | 0x000003,
  /*1649*/ PHRASE_TYPE      | G_parameter_type_decl,
  /*1650*/ PHRASE_TYPE      | G_IDENTS,
  /*1651*/ PHRASE_TYPE      | G_another_FPP0,
  /*1652*/ COUNT_OF_PHRASES | 0x000003,
  /*1653*/ PHRASE_TYPE      | G_Rt_Fn_Map_Pred_DECL,
  /*1654*/ PHRASE_TYPE      | G_IDENT,
  /*1655*/ PHRASE_TYPE      | G_Rt_Pred_FPP,

// P<More_FPPs> = ...;
  /*1656*/ COUNT_OF_ALTS    | 0x000002,
  /*1657*/ COUNT_OF_PHRASES | 0x000003,
  /*1658*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*1659*/ PHRASE_TYPE      | G_VDEC_or_PROC,
  /*1660*/ PHRASE_TYPE      | G_More_FPPs,
  /*1661*/ COUNT_OF_PHRASES | 0x000000,

// P<FPP> = ...;
  /*1662*/ COUNT_OF_ALTS    | 0x000001,
  /*1663*/ COUNT_OF_PHRASES | 0x000002,
  /*1664*/ PHRASE_TYPE      | G_VDEC_or_PROC,
  /*1665*/ PHRASE_TYPE      | G_More_FPPs,

// P<FPP0> = ...;
  /*1666*/ COUNT_OF_ALTS    | 0x000001,
  /*1667*/ COUNT_OF_PHRASES | 0x000001,
  /*1668*/ PHRASE_TYPE      | G_VDEC_or_PROC,

// P<another_FPP0> = ...;
  /*1669*/ COUNT_OF_ALTS    | 0x000002,
  /*1670*/ COUNT_OF_PHRASES | 0x000003,
  /*1671*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*1672*/ PHRASE_TYPE      | G_NL_opt,
  /*1673*/ PHRASE_TYPE      | G_FPP0,
  /*1674*/ COUNT_OF_PHRASES | 0x000000,

// P<ADEFN> = ...;
  /*1675*/ COUNT_OF_ALTS    | 0x000001,
  /*1676*/ COUNT_OF_PHRASES | 0x000002,
  /*1677*/ PHRASE_TYPE      | G_IDENTS,
  /*1678*/ PHRASE_TYPE      | G_BPL,

// P<APP> = ...;
  /*1679*/ COUNT_OF_ALTS    | 0x000006,
  /*1680*/ COUNT_OF_PHRASES | 0x000001,
  /*1681*/ PHRASE_TYPE      | G_APP6,
  /*1682*/ COUNT_OF_PHRASES | 0x000001,
  /*1683*/ PHRASE_TYPE      | G_APP5,
  /*1684*/ COUNT_OF_PHRASES | 0x000001,
  /*1685*/ PHRASE_TYPE      | G_APP4,
  /*1686*/ COUNT_OF_PHRASES | 0x000001,
  /*1687*/ PHRASE_TYPE      | G_APP3,
  /*1688*/ COUNT_OF_PHRASES | 0x000001,
  /*1689*/ PHRASE_TYPE      | G_APP2,
  /*1690*/ COUNT_OF_PHRASES | 0x000001,
  /*1691*/ PHRASE_TYPE      | G_BASEAPP,

// P<BASEAPP> = ...;
  /*1692*/ COUNT_OF_ALTS    | 0x000001,
  /*1693*/ COUNT_OF_PHRASES | 0x000001,
  /*1694*/ PHRASE_TYPE      | G_EXP,

// P<APP2> = ...;
  /*1695*/ COUNT_OF_ALTS    | 0x000001,
  /*1696*/ COUNT_OF_PHRASES | 0x000004,
  /*1697*/ PHRASE_TYPE      | G_EXP,
  /*1698*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*1699*/ PHRASE_TYPE      | G_NL_opt,
  /*1700*/ PHRASE_TYPE      | G_EXP,

// P<APP3> = ...;
  /*1701*/ COUNT_OF_ALTS    | 0x000001,
  /*1702*/ COUNT_OF_PHRASES | 0x000007,
  /*1703*/ PHRASE_TYPE      | G_EXP,
  /*1704*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*1705*/ PHRASE_TYPE      | G_NL_opt,
  /*1706*/ PHRASE_TYPE      | G_EXP,
  /*1707*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*1708*/ PHRASE_TYPE      | G_NL_opt,
  /*1709*/ PHRASE_TYPE      | G_EXP,

// P<APP4> = ...;
  /*1710*/ COUNT_OF_ALTS    | 0x000001,
  /*1711*/ COUNT_OF_PHRASES | 0x00000a,
  /*1712*/ PHRASE_TYPE      | G_EXP,
  /*1713*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*1714*/ PHRASE_TYPE      | G_NL_opt,
  /*1715*/ PHRASE_TYPE      | G_EXP,
  /*1716*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*1717*/ PHRASE_TYPE      | G_NL_opt,
  /*1718*/ PHRASE_TYPE      | G_EXP,
  /*1719*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*1720*/ PHRASE_TYPE      | G_NL_opt,
  /*1721*/ PHRASE_TYPE      | G_EXP,

// P<APP5> = ...;
  /*1722*/ COUNT_OF_ALTS    | 0x000001,
  /*1723*/ COUNT_OF_PHRASES | 0x00000d,
  /*1724*/ PHRASE_TYPE      | G_EXP,
  /*1725*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*1726*/ PHRASE_TYPE      | G_NL_opt,
  /*1727*/ PHRASE_TYPE      | G_EXP,
  /*1728*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*1729*/ PHRASE_TYPE      | G_NL_opt,
  /*1730*/ PHRASE_TYPE      | G_EXP,
  /*1731*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*1732*/ PHRASE_TYPE      | G_NL_opt,
  /*1733*/ PHRASE_TYPE      | G_EXP,
  /*1734*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*1735*/ PHRASE_TYPE      | G_NL_opt,
  /*1736*/ PHRASE_TYPE      | G_EXP,

// P<APP6> = ...;
  /*1737*/ COUNT_OF_ALTS    | 0x000001,
  /*1738*/ COUNT_OF_PHRASES | 0x000010,
  /*1739*/ PHRASE_TYPE      | G_EXP,
  /*1740*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*1741*/ PHRASE_TYPE      | G_NL_opt,
  /*1742*/ PHRASE_TYPE      | G_EXP,
  /*1743*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*1744*/ PHRASE_TYPE      | G_NL_opt,
  /*1745*/ PHRASE_TYPE      | G_EXP,
  /*1746*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*1747*/ PHRASE_TYPE      | G_NL_opt,
  /*1748*/ PHRASE_TYPE      | G_EXP,
  /*1749*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*1750*/ PHRASE_TYPE      | G_NL_opt,
  /*1751*/ PHRASE_TYPE      | G_EXP,
  /*1752*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*1753*/ PHRASE_TYPE      | G_NL_opt,
  /*1754*/ PHRASE_TYPE      | G_EXP,

// P<rest_of_IEXP> = ...;
  /*1755*/ COUNT_OF_ALTS    | 0x000002,
  /*1756*/ COUNT_OF_PHRASES | 0x000002,
  /*1757*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*1758*/ PHRASE_TYPE      | G_const_event_list,
  /*1759*/ COUNT_OF_PHRASES | 0x000000,

// P<const_event_list> = ...;
  /*1760*/ COUNT_OF_ALTS    | 0x000001,
  /*1761*/ COUNT_OF_PHRASES | 0x000002,
  /*1762*/ PHRASE_TYPE      | G_IEXP,
  /*1763*/ PHRASE_TYPE      | G_rest_of_IEXP,

// P<N_or_AN_or_NAN> = ...;
  /*1764*/ COUNT_OF_ALTS    | 0x000004,
  /*1765*/ COUNT_OF_PHRASES | 0x000001,
  /*1766*/ PHRASE_TYPE      | G_N,
  /*1767*/ COUNT_OF_PHRASES | 0x000001,
  /*1768*/ PHRASE_TYPE      | G_AN,
  /*1769*/ COUNT_OF_PHRASES | 0x000001,
  /*1770*/ PHRASE_TYPE      | G_NAN,
  /*1771*/ COUNT_OF_PHRASES | 0x000002,
  /*1772*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000030,  /* '0' */
  /*1773*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_ZERO,

// P<ADDOP_IEXP_opt> = ...;
  /*1774*/ COUNT_OF_ALTS    | 0x000002,
  /*1775*/ COUNT_OF_PHRASES | 0x000002,
  /*1776*/ PHRASE_TYPE      | G_AddressOffsetOp,
  /*1777*/ PHRASE_TYPE      | G_IEXP,
  /*1778*/ COUNT_OF_PHRASES | 0x000000,

// P<rest_of_EQs_init> = ...;
  /*1779*/ COUNT_OF_ALTS    | 0x000002,
  /*1780*/ COUNT_OF_PHRASES | 0x000002,
  /*1781*/ PHRASE_TYPE      | G_V_or_N,
  /*1782*/ PHRASE_TYPE      | G_ADDOP_IEXP_opt,
  /*1783*/ COUNT_OF_PHRASES | 0x000001,
  /*1784*/ PHRASE_TYPE      | G_IEXP,

// P<EQs> = ...;
  /*1785*/ COUNT_OF_ALTS    | 0x000003,
  /*1786*/ COUNT_OF_PHRASES | 0x000003,
  /*1787*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*1788*/ PHRASE_TYPE      | G_NL_opt,
  /*1789*/ PHRASE_TYPE      | G_IEXP,
  /*1790*/ COUNT_OF_PHRASES | 0x000005,
  /*1791*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*1792*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*1793*/ PHRASE_TYPE      | G_NL_opt,
  /*1794*/ PHRASE_TYPE      | G_N_or_AN_or_NAN,
  /*1795*/ PHRASE_TYPE      | G_rest_of_EQs_init,
  /*1796*/ COUNT_OF_PHRASES | 0x000000,

// P<INITVAR> = ...;
  /*1797*/ COUNT_OF_ALTS    | 0x000001,
  /*1798*/ COUNT_OF_PHRASES | 0x000003,
  /*1799*/ PHRASE_TYPE      | G_IDENT,
  /*1800*/ PHRASE_TYPE      | G_ALIAS_opt,
  /*1801*/ PHRASE_TYPE      | G_EQs,

// P<RESLEFT_opt> = ...;
  /*1802*/ COUNT_OF_ALTS    | 0x000002,
  /*1803*/ COUNT_OF_PHRASES | 0x000002,
  /*1804*/ PHRASE_TYPE      | G_V_or_N,
  /*1805*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002e,  /* '.' */
  /*1806*/ COUNT_OF_PHRASES | 0x000000,

// P<RESRIGHT_opt> = ...;
  /*1807*/ COUNT_OF_ALTS    | 0x000002,
  /*1808*/ COUNT_OF_PHRASES | 0x000002,
  /*1809*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002e,  /* '.' */
  /*1810*/ PHRASE_TYPE      | G_V_or_N,
  /*1811*/ COUNT_OF_PHRASES | 0x000000,

// P<RESEXP> = ...;
  /*1812*/ COUNT_OF_ALTS    | 0x000001,
  /*1813*/ COUNT_OF_PHRASES | 0x000005,
  /*1814*/ PHRASE_TYPE      | G_RESLEFT_opt,
  /*1815*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*1816*/ PHRASE_TYPE      | G_EXP,
  /*1817*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*1818*/ PHRASE_TYPE      | G_RESRIGHT_opt,
};

#ifdef INITCODE

  // This anonymous block is where the global declarations go, which come
  // before the procedures, parse rules, etc.

#endif //INITCODE
int parse_whitespace(void)
{
#ifdef IN_PARSER
  while (source(TP).ch==' ' || source(TP).ch=='\t' || source(TP).ch=='\f') {
    TP += 1;
  }
#endif
  return TRUE;
}
int parse_Imp77_stropping(void)
{
#ifdef IN_PARSER
  int debug_stropping = 0;

  // The source file has already been read trivially into source().
  
  // We will copy from source() into temp(), then perform line reconstruction
  // on temp(), writing back to source().  The parser will then parse source()
  // into atoms according to the grammar.  Initially it will only store the
  // reconstructed characters into the atoms, but once it is working, I will
  // modify it to also store the unreconsructed source for use in source-to-source
  // translations, where whitespace, embedded comments, and indentation is
  // desired in the translation, in order to mirror the original file.

  // Because unfortunately underlining in Unicode is done by a *following*
  // underline joiner character (818) rather than being a single unicode
  // code point, it is difficult to use a single-character encoding of a
  // stropped keyword letter - what the old Imp compilers would represent
  // by adding 128 to the character.  However there *is* an alternive
  // source of upper case and lower case letters in the mathematics area!

  // A:Z could be encoded as 1D400:1D419 and a:z as 1D41A:1D433 :-)
  // but for now I'm encoding keywords in lower case and variables in
  // upper case.
  
  // The 1D400+ encoding looks more or less like ordinary text if it happens
  // to be displayed (e.g. during debugging) although there should never be
  // any need to display internally-coded keywords to users of the
  // compilers built with this parser.

  // All arrays are flex and the upper bound is a limit, not a minimum.
  DECLARE(SYM, reconstructed, 128000000/*600000*/);
#define _SYM(x) WRITE(x,SYM,reconstructed)
#define  SYM(x)  READ(x,SYM,reconstructed)

  int LASTP, P = 0;
  while (source(P).ch != 0 /* WEOF */) {
    _SYM(P).ch = source(P).ch;
    _SYM(P).start = P; _SYM(P).end = P+1;
    P += 1;
  }
  _SYM(P).ch = 0 /* WEOF */;
  _SYM(P).start = P; _SYM(P).end = P; // no chars for EOF
  LASTP = P;
  
  if (debug_stropping) {
    int I;
    fprintf(stderr, "source() moved to SYM(0:%d) = \"", LASTP);
    for (I = 0; I < LASTP; I++) {
      fprintf(stderr, "%lc", SYM(I).ch);
    }
    if (SYM(LASTP).ch != 0) fprintf(stderr, "[%d]", SYM(LASTP).ch);
    fprintf(stderr, "\";\n");
  };

  int FP = 0, PP = 0; // Fetch Pointer, Put Pointer.

#define DONE() \
        do {                                                                        \
            FP -= 1; /* the terminating 0*/                                         \
            _source(PP).ch = 0;                                                     \
            _source(PP).end = SYM(FP).end;                                          \
            if (debug_stropping) {                                                  \
              int I;                                                                \
              fprintf(stderr, "SYM(0:%d) moved back to source(0:%d) = \"", FP, PP); \
              for (I = 0; I < PP; I++) {                                            \
                fprintf(stderr, "%lc", source(I).ch);                               \
              }                                                                     \
              if (source(PP).ch != 0) fprintf(stderr, "[%d]", source(PP).ch);       \
              fprintf(stderr, "\";\n");                                             \
            }                                                                       \
            return TRUE;                                                            \
        } while (0)

  wint_t WC;

  // NOTE THAT WITH THIS IMP77 GRAMMAR, '\n' IS NOT WHITESPACE.  LINE ENDINGS ARE EXPLICITLY
  // ENTERED IN THE GRAMMAR.  (See the phrases <T>, and <NL_opt>.
  
  // uparse.c has been modified so that its implicit whitespace skipping no longer skips '\n'.
  // (The algol60 parser in contrast treats all \n's the same as spaces)
  
  // HOW TO HANDLE ' IN A PARSED COMMENT?
  //
  // %COMMENT A ' MESSES UP!
  //
  // because it keeps scanning until a closing quote.  However if you don't scan between quotes,
  // line reconstruction will lose spaces within strings!
  //
  // You can't just end a quoted string at a newline because embedded newlines are allowed.
  // And I checked Imp77 - it allows a single quote ch in a comment.

  // If line reconstruction were being done on the fly then it could be modified if we knew we were
  // in a comment, but since we're doing it all in advance, the only option to handle this appears
  // to be that whenever we're in a comment, we throw away all the following line reconstruction and
  // re-do it, with that comment handled differently.

  // Or bite the bullet and work out how to do line reconstruction on the fly (which my previous
  // imptoc did eventually manage using the 'demandload' call. So *every* fetch via TP would have
  // to be recoded as a procedure call, with on-the-fly line reconstruction, and either a way to
  // undo it if backtracking or simply never doing it any farther past TP and undoing it on backtracking.

  // What a can of worms just to handle badly designed comments.  TO DO.

#define CHECK_EOF(x) do if ((x) == 0) DONE(); else { _source(PP).end = SYM(FP-1).end; } while (0)

  // PP is the 'current' slot we are writing into.
  _source(PP).start = SYM(FP).start;

  for (;;) {

    _source(PP).end = SYM(FP).end; // Keep updated.
    WC = SYM(FP++).ch; CHECK_EOF(WC);

    if (WC == '%') { // We found a keyword.  It will always be read up to the last character of the keyword.

      for (;;) {
        WC = SYM(FP++).ch; CHECK_EOF(WC);
        if (WC == '%') {

        } else if (!isalpha(WC)) {
          // It's possible to have a bunch of '%' signs and *no* keyword characters.
          --FP; // point FP back to the non-keyword character, not as currently, the one past that.
          break;
        } else { // isalpha(WC)
          if (isupper(WC)) WC = tolower(WC);
          _source(PP).end = SYM(FP-1).end; // | 128
          _source(PP++).ch = WC; // | 128
          _source(PP).start = SYM(FP).start; // | 128
        }
      }
      continue;
    }

    else if (WC == '{') {

      for (;;) {
        WC = SYM(FP++).ch; CHECK_EOF(WC);

        if (WC == '\n') {
          --FP; /* re-read the \n as a significant character */                                                                 // _source(PP).end = SYM(FP-1).end; // point FP back to the newline
          break;
        }
        if (WC == '}') {  // Not sure if \n should be gobbled for {this style
          break; // but still looking.
        }
      }
      continue;
    }

    else if (WC == '\'') {
      _source(PP++).ch = WC;
      for (;;) {
        WC = SYM(FP++).ch; CHECK_EOF(WC);
        if (WC == '\'') {
          // peek ahead:
          int Peek = SYM(FP).ch; CHECK_EOF(Peek);
          if (Peek == '\'') { // doubled 's
            _source(PP++).ch = WC;
            _source(PP++).ch = Peek;
            FP++;
          } else {
            _source(PP).ch = WC;
            _source(PP).end = SYM(FP-1).end; // Leave Peek for later.
            PP++;
            break;
          }
        } else {
          _source(PP++).ch = WC;
        }
      }
      continue;
    }

    else if (WC == '"') { // TO DO: Update ' and " items in imp77 as well
      _source(PP++).ch = WC;
      for (;;) {
        WC = SYM(FP++).ch; CHECK_EOF(WC);
        if (WC == '"') {
          // peek ahead:
          int Peek = SYM(FP).ch; CHECK_EOF(Peek);
          if (Peek == '"') { // doubled "s
            _source(PP++).ch = WC;
            _source(PP++).ch = Peek;
            FP++;
          } else {
            _source(PP).ch = WC;
            _source(PP).end = SYM(FP-1).end; // Leave Peek for later.
            PP++;
            break;
          }
        } else {
          _source(PP++).ch = WC;
        }
      }
      continue;
    }

    else if (WC == ' ' || WC == '\t' || WC == '\f') {  // use iswblank(WC) instead?

      continue;
    }




    else {
      // everything else just returns one significant non-space character. This includes '\n'.

      if ((WC == '\n') && ((PP>0) && (source(PP-1).ch == 'c'))) {  // BEWARE WHEN CHANGING STROPPING ENCODING: Looking for a preceding '%C' ...
        if (PP>0) _source(PP-1).ch = ' '; // remove the '%c'
        _source(PP++).ch = ' '; // remove the newline

        // This is the only place where we gobble spaces *after* a token rather than before.
        // It may be cleaner to set a 'continuation' flag and gobble them before the next
        // symbol fetch rather than do it here in a lookahead.  Esp. wrt to reconstituting source
        // from the array for the listing file etc etc.
        // BUT FOR NOW, %C IS HANDLED BY THS HACK:

        int Lookahead = FP;
        while (SYM(Lookahead).ch == '\n' || SYM(Lookahead).ch == ' ' || SYM(Lookahead).ch == '\t' || SYM(Lookahead).ch == '\f') { // Use iswblank()?
          // No worries about  '{...}' - this behaviour seems to be identical to Imp77's
          _SYM(Lookahead).ch = ' ';   // gobble following newlines and whitespace before next significant character.
          Lookahead++;
        }
        continue;
      }

      if (iswalpha(WC) && iswlower(WC)) {
        WC = towupper(WC);  // ALSO TEMPORARY
      }
      _source(PP++).ch = WC;
      continue;
    }


    // Still skipping whitespace ...

  }

  DONE();
  P = 0;
  while (source(P).ch != 0) {
    if (debug_stropping) fprintf(stderr, "%d: ch='%lc'  start=%d:end=%d\n", P, source(P).ch, source(P).start, source(P).end);
    P++;
  }

#undef DONE
#endif
  return TRUE;
}
int parse_PROC(void)
{ return TRUE; }
int parse_PROCSPEC(void)
{ return TRUE; }
int parse_ZERO(void)
{ return TRUE; }

// B<EOF> = 0;

// B<NL> = 2;

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