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

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


#define BIP_BASE 0
#define PHRASE_BASE 2
#define SEMANTIC_BASE 255
#define AST_BASE 260

#define NUM_BIPS 2
#define NUM_SIMPLE_PHRASES 253
#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 1951

#define B_EOF 0
#define B_NL 2
#define P_SS 2
#define P_FINAL 3
#define P_STATEMENTS 4
#define P_STATEMENT 5
#define P_IDENT 6
#define P_DeepBase 7
#define P_Based_Const 8
#define P_BigCharConst 9
#define P_CharConst 10
#define P_OptExponent 11
#define P_OptDecimal 12
#define P_Base_or_Float 13
#define P_Num 14
#define P_CONST 15
#define P_stringchars 16
#define P_ALIASTEXT 17
#define P_V 18
#define P_N 19
#define P_FM 20
#define P_A 21
#define P_AN 22
#define P_NA 23
#define P_NAN 24
#define P_any 25
#define P_NL_opt 26
#define P_more_Ts 27
#define P_T 28
#define P_simple_type 29
#define P_routine_or_predicate 30
#define P_fn_or_map 31
#define P_OWN_or_CONST 32
#define P_EXTERNAL 33
#define P_EXTERNAL_opt 34
#define P_COMP 35
#define P_ACOMP 36
#define P_exit_or_continue 37
#define P_on_event 38
#define P_BACK 39
#define P_ALIAS_opt 40
#define P_Rt_Pred_FPP 41
#define P_INDEF 42
#define P_INDEF_or_IEXP 43
#define P_bracketed_INDEF_or_IEXP 44
#define P_optional_initialiser_repeat_count 45
#define P_initialiser_item_with_optional_repeat_count 46
#define P_L 47
#define P_SWID 48
#define P_rest_of_SWIDS 49
#define P_SWIDS 50
#define P_rest_of_SWDEFS 51
#define P_SWDEFS 52
#define P_SWDEF 53
#define P_simple_label 54
#define P_switch_label 55
#define P_S 56
#define P_jump_destination 57
#define P_Star_or_IEXP 58
#define P_FM_or_Star 59
#define P_result_types 60
#define P_scalar_declaration_types 61
#define P_name_declaration_types 62
#define P_Rt_Fn_Map_Pred_DECL 63
#define P_SPEC_opt 64
#define P_ARRAYNAME 65
#define P_Proc_Declaration 66
#define P_External_Name_Array_Name_Declaration 67
#define P_External_Array_Name_Declaration 68
#define P_External_Array_Declaration 69
#define P_External_Name_Array_Declaration 70
#define P_External_Scalar_Name_Declaration 71
#define P_External_Scalar_Declaration 72
#define P_OWN_or_CONST_Name_Array_Name_Declaration 73
#define P_OWN_or_CONST_Array_Name_Declaration 74
#define P_OWN_or_CONST_Array_Declaration 75
#define P_OWN_or_CONST_Name_Array_Declaration 76
#define P_OWN_or_CONST_Scalar_Name_Declaration 77
#define P_OWN_or_CONST_Scalar_Declaration 78
#define P_AUTO_Name_Array_Name_Declaration 79
#define P_AUTO_Array_Name_Declaration 80
#define P_AUTO_Array_Declaration 81
#define P_AUTO_Name_Array_Declaration 82
#define P_AUTO_Scalar_Name_Declaration 83
#define P_AUTO_Scalar_Declaration 84
#define P_name 85
#define P_const_array_bounds 86
#define P_optional_name_assignment 87
#define P_name_ident_and_optional_assignment 88
#define P_more_name_idents_and_optional_assignments 89
#define P_name_idents_and_optional_assignments 90
#define P_name_ident 91
#define P_more_name_idents 92
#define P_name_idents 93
#define P_AUTO_name_idents_and_optional_assignments 94
#define P_OWN_or_CONST_name_idents_and_optional_assignments 95
#define P_EXTERNAL_name_idents_and_optional_assignments 96
#define P_EXTERNAL_name_idents 97
#define P_name_array_idents 98
#define P_more_name_array_idents 99
#define P_EXTERNAL_name_array_idents 100
#define P_OWN_or_CONST_name_array_idents 101
#define P_more_AUTO_name_array_idents 102
#define P_AUTO_name_array_idents 103
#define P_more_external_array_idents 104
#define P_more_AUTO_array_idents 105
#define P_EXTERNAL_array_idents 106
#define P_AUTO_array_idents 107
#define P_optional_scalar_assignment 108
#define P_scalar_ident_and_optional_assignment 109
#define P_more_scalar_idents_and_optional_assignments 110
#define P_scalar_idents_and_optional_assignments 111
#define P_EXTERNAL_scalar_idents_and_optional_assignments 112
#define P_OWN_or_CONST_scalar_idents_and_optional_assignments 113
#define P_AUTO_scalar_idents_and_optional_assignments 114
#define P_EXTERNAL_scalar_ident 115
#define P_EXTERNAL_scalar_idents 116
#define P_more_external_scalar_idents 117
#define P_more_array_data 118
#define P_scalar_array_data 119
#define P_optional_array_assignment 120
#define P_EXTERNAL_array_ident_and_optional_assignment 121
#define P_OWN_or_CONST_array_ident_and_optional_assignment 122
#define P_Name_Array_Name_Declaration 123
#define P_Array_Name_Declaration 124
#define P_Name_Array_Declaration 125
#define P_Array_Declaration 126
#define P_Scalar_Name_Declaration 127
#define P_Scalar_Declaration 128
#define P_Data_Declaration 129
#define P_Declaration 130
#define P_optional_parameters 131
#define P_Rt_CALL 132
#define P_Fn_CALL 133
#define P_Map_CALL 134
#define P_Pred_CALL 135
#define P_PROC_or_PROCSPEC 136
#define P_ESCARRAY 137
#define P_ESCREC_opt 138
#define P_ESCREC 139
#define P_ESC_ARRAY_or_REC 140
#define P_SIGNAL 141
#define P_COMMENT_TEXT 142
#define P_COMMENT 143
#define P_COMMENT_T 144
#define P_LHS 145
#define P_IMP 146
#define P_EIMP 147
#define P_XIMP 148
#define P_FELSE_opt 149
#define P_if_or_unless 150
#define P_if_unless_XIMP 151
#define P_if_XIMP_opt 152
#define P_THEN_opt 153
#define P_else_start_IMP_opt 154
#define P_else_if_unless_XIMP_opt 155
#define P_else_if_XIMP_opt 156
#define P_else_final_IMP_opt 157
#define P_start_IMP 158
#define P_final_IMP 159
#define P_and_IMPS 160
#define P_INCL_LIST_opt 161
#define P_wh_for 162
#define P_cycle_IMP 163
#define P_event_list_def 164
#define P_iu_while_until_for_T 165
#define P_AddressOffsetOp 166
#define P_ADDOP_SEXP_opt 167
#define P_A_or_AN_or_NA_or_NAN 168
#define P_A_or_AN 169
#define P_NA_or_NAN 170
#define P_rest_of_IDENTS 171
#define P_IDENTS 172
#define P_V_or_N 173
#define P_extra 174
#define P_subevent_and_extra 175
#define P_IMP_ASSIGN 176
#define P_N_ASS 177
#define P_rest_of_AND_COND 178
#define P_AND_COND 179
#define P_rest_of_OR_COND 180
#define P_OR_COND 181
#define P_rest_of_COND 182
#define P_COND 183
#define P_OP0 184
#define P_OP1 185
#define P_OP2 186
#define P_OP3 187
#define P_OP0_EXP 188
#define P_OP1_EXP 189
#define P_OP2_EXP 190
#define P_OP3_EXP 191
#define P_OP0_EXPS 192
#define P_OP1_EXPS 193
#define P_OP2_EXPS 194
#define P_OP3_EXPS 195
#define P_COMP2_opt 196
#define P_COMP2 197
#define P_COMP1 198
#define P_COMP12_opt 199
#define P_COMPARISON 200
#define P_COMP1OS2 201
#define P_SCOND 202
#define P_SIGN_opt 203
#define P_UOP 204
#define P_UOP_opt 205
#define P_EXP 206
#define P_EXP2 207
#define P_EXP1 208
#define P_EXP0 209
#define P_SEXP 210
#define P_COP1 211
#define P_COP2 212
#define P_COP3 213
#define P_CSIGN 214
#define P_rest_of_IEXP2_EXPR 215
#define P_IEXP2_EXPR 216
#define P_COP3_IEXP2_optseq 217
#define P_COP2_IEXP1_optseq 218
#define P_COP1_IEXP0_optseq 219
#define P_CUOP_opt 220
#define P_CUOP 221
#define P_IEXP2 222
#define P_IEXP1 223
#define P_IEXP0 224
#define P_IEXP 225
#define P_PCONST 226
#define P_dq 227
#define P_ACONST 228
#define P_OCONST 229
#define P_SEQ 230
#define P_record_field_decl 231
#define P_OR_record_field_declarations 232
#define P_more_record_field_decls 233
#define P_record_field_declarations 234
#define P_CONST_BOUNDS 235
#define P_RCONST_BOUNDS 236
#define P_BOUNDS_PAIR 237
#define P_rest_of_BPL_LIST 238
#define P_BPL_LIST 239
#define P_BPL 240
#define P_parameter_type 241
#define P_parameter_type_decl 242
#define P_VDEC_or_PROC 243
#define P_More_FPPs 244
#define P_FPP 245
#define P_FPP0 246
#define P_another_FPP0 247
#define P_MORE_APPS 248
#define P_APP 249
#define P_rest_of_IEXP 250
#define P_const_event_list 251
#define P_RESLEFT_opt 252
#define P_RESRIGHT_opt 253
#define P_RESEXP 254
#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_FINAL 6
#define G_STATEMENTS 15
#define G_STATEMENT 20
#define G_IDENT 200
#define G_DeepBase 204
#define G_Based_Const 210
#define G_BigCharConst 215
#define G_CharConst 218
#define G_OptExponent 225
#define G_OptDecimal 230
#define G_Base_or_Float 235
#define G_Num 241
#define G_CONST 244
#define G_stringchars 255
#define G_ALIASTEXT 265
#define G_V 270
#define G_N 274
#define G_FM 278
#define G_A 282
#define G_AN 286
#define G_NA 290
#define G_NAN 294
#define G_any 298
#define G_NL_opt 301
#define G_more_Ts 306
#define G_T 311
#define G_simple_type 318
#define G_routine_or_predicate 337
#define G_fn_or_map 342
#define G_OWN_or_CONST 353
#define G_EXTERNAL 360
#define G_EXTERNAL_opt 371
#define G_COMP 375
#define G_ACOMP 399
#define G_exit_or_continue 406
#define G_on_event 411
#define G_BACK 416
#define G_ALIAS_opt 423
#define G_Rt_Pred_FPP 428
#define G_INDEF 434
#define G_INDEF_or_IEXP 437
#define G_bracketed_INDEF_or_IEXP 442
#define G_optional_initialiser_repeat_count 447
#define G_initialiser_item_with_optional_repeat_count 457
#define G_L 461
#define G_SWID 464
#define G_rest_of_SWIDS 467
#define G_SWIDS 474
#define G_rest_of_SWDEFS 478
#define G_SWDEFS 485
#define G_SWDEF 489
#define G_simple_label 493
#define G_switch_label 497
#define G_S 502
#define G_jump_destination 505
#define G_Star_or_IEXP 513
#define G_FM_or_Star 518
#define G_result_types 523
#define G_scalar_declaration_types 536
#define G_name_declaration_types 549
#define G_Rt_Fn_Map_Pred_DECL 565
#define G_SPEC_opt 571
#define G_ARRAYNAME 575
#define G_Proc_Declaration 585
#define G_External_Name_Array_Name_Declaration 594
#define G_External_Array_Name_Declaration 606
#define G_External_Array_Declaration 618
#define G_External_Name_Array_Declaration 630
#define G_External_Scalar_Name_Declaration 642
#define G_External_Scalar_Declaration 656
#define G_OWN_or_CONST_Name_Array_Name_Declaration 666
#define G_OWN_or_CONST_Array_Name_Declaration 672
#define G_OWN_or_CONST_Array_Declaration 678
#define G_OWN_or_CONST_Name_Array_Declaration 684
#define G_OWN_or_CONST_Scalar_Name_Declaration 690
#define G_OWN_or_CONST_Scalar_Declaration 699
#define G_AUTO_Name_Array_Name_Declaration 704
#define G_AUTO_Array_Name_Declaration 709
#define G_AUTO_Array_Declaration 714
#define G_AUTO_Name_Array_Declaration 719
#define G_AUTO_Scalar_Name_Declaration 724
#define G_AUTO_Scalar_Declaration 731
#define G_name 735
#define G_const_array_bounds 738
#define G_optional_name_assignment 741
#define G_name_ident_and_optional_assignment 751
#define G_more_name_idents_and_optional_assignments 755
#define G_name_idents_and_optional_assignments 761
#define G_name_ident 765
#define G_more_name_idents 768
#define G_name_idents 774
#define G_AUTO_name_idents_and_optional_assignments 778
#define G_OWN_or_CONST_name_idents_and_optional_assignments 781
#define G_EXTERNAL_name_idents_and_optional_assignments 784
#define G_EXTERNAL_name_idents 787
#define G_name_array_idents 790
#define G_more_name_array_idents 795
#define G_EXTERNAL_name_array_idents 801
#define G_OWN_or_CONST_name_array_idents 804
#define G_more_AUTO_name_array_idents 807
#define G_AUTO_name_array_idents 813
#define G_more_external_array_idents 818
#define G_more_AUTO_array_idents 824
#define G_EXTERNAL_array_idents 830
#define G_AUTO_array_idents 835
#define G_optional_scalar_assignment 840
#define G_scalar_ident_and_optional_assignment 845
#define G_more_scalar_idents_and_optional_assignments 849
#define G_scalar_idents_and_optional_assignments 855
#define G_EXTERNAL_scalar_idents_and_optional_assignments 859
#define G_OWN_or_CONST_scalar_idents_and_optional_assignments 862
#define G_AUTO_scalar_idents_and_optional_assignments 865
#define G_EXTERNAL_scalar_ident 868
#define G_EXTERNAL_scalar_idents 871
#define G_more_external_scalar_idents 875
#define G_more_array_data 881
#define G_scalar_array_data 887
#define G_optional_array_assignment 891
#define G_EXTERNAL_array_ident_and_optional_assignment 897
#define G_OWN_or_CONST_array_ident_and_optional_assignment 902
#define G_Name_Array_Name_Declaration 907
#define G_Array_Name_Declaration 914
#define G_Name_Array_Declaration 921
#define G_Array_Declaration 928
#define G_Scalar_Name_Declaration 935
#define G_Scalar_Declaration 942
#define G_Data_Declaration 949
#define G_Declaration 962
#define G_optional_parameters 982
#define G_Rt_CALL 988
#define G_Fn_CALL 992
#define G_Map_CALL 996
#define G_Pred_CALL 1000
#define G_PROC_or_PROCSPEC 1004
#define G_ESCARRAY 1009
#define G_ESCREC_opt 1015
#define G_ESCREC 1020
#define G_ESC_ARRAY_or_REC 1025
#define G_SIGNAL 1031
#define G_COMMENT_TEXT 1036
#define G_COMMENT 1042
#define G_COMMENT_T 1047
#define G_LHS 1052
#define G_IMP 1062
#define G_EIMP 1116
#define G_XIMP 1129
#define G_FELSE_opt 1138
#define G_if_or_unless 1143
#define G_if_unless_XIMP 1148
#define G_if_XIMP_opt 1153
#define G_THEN_opt 1158
#define G_else_start_IMP_opt 1162
#define G_else_if_unless_XIMP_opt 1167
#define G_else_if_XIMP_opt 1172
#define G_else_final_IMP_opt 1177
#define G_start_IMP 1182
#define G_final_IMP 1190
#define G_and_IMPS 1198
#define G_INCL_LIST_opt 1204
#define G_wh_for 1210
#define G_cycle_IMP 1217
#define G_event_list_def 1223
#define G_iu_while_until_for_T 1228
#define G_AddressOffsetOp 1247
#define G_ADDOP_SEXP_opt 1254
#define G_A_or_AN_or_NA_or_NAN 1259
#define G_A_or_AN 1268
#define G_NA_or_NAN 1273
#define G_rest_of_IDENTS 1278
#define G_IDENTS 1285
#define G_V_or_N 1289
#define G_extra 1303
#define G_subevent_and_extra 1309
#define G_IMP_ASSIGN 1316
#define G_N_ASS 1332
#define G_rest_of_AND_COND 1342
#define G_AND_COND 1347
#define G_rest_of_OR_COND 1353
#define G_OR_COND 1358
#define G_rest_of_COND 1364
#define G_COND 1370
#define G_OP0 1374
#define G_OP1 1377
#define G_OP2 1394
#define G_OP3 1404
#define G_OP0_EXP 1414
#define G_OP1_EXP 1418
#define G_OP2_EXP 1422
#define G_OP3_EXP 1426
#define G_OP0_EXPS 1430
#define G_OP1_EXPS 1435
#define G_OP2_EXPS 1440
#define G_OP3_EXPS 1445
#define G_COMP2_opt 1450
#define G_COMP2 1454
#define G_COMP1 1458
#define G_COMP12_opt 1462
#define G_COMPARISON 1466
#define G_COMP1OS2 1487
#define G_SCOND 1492
#define G_SIGN_opt 1526
#define G_UOP 1532
#define G_UOP_opt 1539
#define G_EXP 1543
#define G_EXP2 1561
#define G_EXP1 1567
#define G_EXP0 1572
#define G_SEXP 1576
#define G_COP1 1589
#define G_COP2 1592
#define G_COP3 1595
#define G_CSIGN 1598
#define G_rest_of_IEXP2_EXPR 1601
#define G_IEXP2_EXPR 1607
#define G_COP3_IEXP2_optseq 1611
#define G_COP2_IEXP1_optseq 1617
#define G_COP1_IEXP0_optseq 1623
#define G_CUOP_opt 1629
#define G_CUOP 1633
#define G_IEXP2 1636
#define G_IEXP1 1641
#define G_IEXP0 1645
#define G_IEXP 1656
#define G_PCONST 1666
#define G_dq 1671
#define G_ACONST 1674
#define G_OCONST 1678
#define G_SEQ 1682
#define G_record_field_decl 1692
#define G_OR_record_field_declarations 1807
#define G_more_record_field_decls 1813
#define G_record_field_declarations 1820
#define G_CONST_BOUNDS 1825
#define G_RCONST_BOUNDS 1832
#define G_BOUNDS_PAIR 1839
#define G_rest_of_BPL_LIST 1844
#define G_BPL_LIST 1850
#define G_BPL 1854
#define G_parameter_type 1859
#define G_parameter_type_decl 1872
#define G_VDEC_or_PROC 1885
#define G_More_FPPs 1894
#define G_FPP 1901
#define G_FPP0 1905
#define G_another_FPP0 1908
#define G_MORE_APPS 1914
#define G_APP 1921
#define G_rest_of_IEXP 1925
#define G_const_event_list 1930
#define G_RESLEFT_opt 1934
#define G_RESRIGHT_opt 1939
#define G_RESEXP 1944

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"FINAL",
  /*2+2*/   L"STATEMENTS",
  /*2+3*/   L"STATEMENT",
  /*2+4*/   L"IDENT",
  /*2+5*/   L"DeepBase",
  /*2+6*/   L"Based_Const",
  /*2+7*/   L"BigCharConst",
  /*2+8*/   L"CharConst",
  /*2+9*/   L"OptExponent",
  /*2+10*/   L"OptDecimal",
  /*2+11*/   L"Base_or_Float",
  /*2+12*/   L"Num",
  /*2+13*/   L"CONST",
  /*2+14*/   L"stringchars",
  /*2+15*/   L"ALIASTEXT",
  /*2+16*/   L"V",
  /*2+17*/   L"N",
  /*2+18*/   L"FM",
  /*2+19*/   L"A",
  /*2+20*/   L"AN",
  /*2+21*/   L"NA",
  /*2+22*/   L"NAN",
  /*2+23*/   L"any",
  /*2+24*/   L"NL_opt",
  /*2+25*/   L"more_Ts",
  /*2+26*/   L"T",
  /*2+27*/   L"simple_type",
  /*2+28*/   L"routine_or_predicate",
  /*2+29*/   L"fn_or_map",
  /*2+30*/   L"OWN_or_CONST",
  /*2+31*/   L"EXTERNAL",
  /*2+32*/   L"EXTERNAL_opt",
  /*2+33*/   L"COMP",
  /*2+34*/   L"ACOMP",
  /*2+35*/   L"exit_or_continue",
  /*2+36*/   L"on_event",
  /*2+37*/   L"BACK",
  /*2+38*/   L"ALIAS_opt",
  /*2+39*/   L"Rt_Pred_FPP",
  /*2+40*/   L"INDEF",
  /*2+41*/   L"INDEF_or_IEXP",
  /*2+42*/   L"bracketed_INDEF_or_IEXP",
  /*2+43*/   L"optional_initialiser_repeat_count",
  /*2+44*/   L"initialiser_item_with_optional_repeat_count",
  /*2+45*/   L"L",
  /*2+46*/   L"SWID",
  /*2+47*/   L"rest_of_SWIDS",
  /*2+48*/   L"SWIDS",
  /*2+49*/   L"rest_of_SWDEFS",
  /*2+50*/   L"SWDEFS",
  /*2+51*/   L"SWDEF",
  /*2+52*/   L"simple_label",
  /*2+53*/   L"switch_label",
  /*2+54*/   L"S",
  /*2+55*/   L"jump_destination",
  /*2+56*/   L"Star_or_IEXP",
  /*2+57*/   L"FM_or_Star",
  /*2+58*/   L"result_types",
  /*2+59*/   L"scalar_declaration_types",
  /*2+60*/   L"name_declaration_types",
  /*2+61*/   L"Rt_Fn_Map_Pred_DECL",
  /*2+62*/   L"SPEC_opt",
  /*2+63*/   L"ARRAYNAME",
  /*2+64*/   L"Proc_Declaration",
  /*2+65*/   L"External_Name_Array_Name_Declaration",
  /*2+66*/   L"External_Array_Name_Declaration",
  /*2+67*/   L"External_Array_Declaration",
  /*2+68*/   L"External_Name_Array_Declaration",
  /*2+69*/   L"External_Scalar_Name_Declaration",
  /*2+70*/   L"External_Scalar_Declaration",
  /*2+71*/   L"OWN_or_CONST_Name_Array_Name_Declaration",
  /*2+72*/   L"OWN_or_CONST_Array_Name_Declaration",
  /*2+73*/   L"OWN_or_CONST_Array_Declaration",
  /*2+74*/   L"OWN_or_CONST_Name_Array_Declaration",
  /*2+75*/   L"OWN_or_CONST_Scalar_Name_Declaration",
  /*2+76*/   L"OWN_or_CONST_Scalar_Declaration",
  /*2+77*/   L"AUTO_Name_Array_Name_Declaration",
  /*2+78*/   L"AUTO_Array_Name_Declaration",
  /*2+79*/   L"AUTO_Array_Declaration",
  /*2+80*/   L"AUTO_Name_Array_Declaration",
  /*2+81*/   L"AUTO_Scalar_Name_Declaration",
  /*2+82*/   L"AUTO_Scalar_Declaration",
  /*2+83*/   L"name",
  /*2+84*/   L"const_array_bounds",
  /*2+85*/   L"optional_name_assignment",
  /*2+86*/   L"name_ident_and_optional_assignment",
  /*2+87*/   L"more_name_idents_and_optional_assignments",
  /*2+88*/   L"name_idents_and_optional_assignments",
  /*2+89*/   L"name_ident",
  /*2+90*/   L"more_name_idents",
  /*2+91*/   L"name_idents",
  /*2+92*/   L"AUTO_name_idents_and_optional_assignments",
  /*2+93*/   L"OWN_or_CONST_name_idents_and_optional_assignments",
  /*2+94*/   L"EXTERNAL_name_idents_and_optional_assignments",
  /*2+95*/   L"EXTERNAL_name_idents",
  /*2+96*/   L"name_array_idents",
  /*2+97*/   L"more_name_array_idents",
  /*2+98*/   L"EXTERNAL_name_array_idents",
  /*2+99*/   L"OWN_or_CONST_name_array_idents",
  /*2+100*/   L"more_AUTO_name_array_idents",
  /*2+101*/   L"AUTO_name_array_idents",
  /*2+102*/   L"more_external_array_idents",
  /*2+103*/   L"more_AUTO_array_idents",
  /*2+104*/   L"EXTERNAL_array_idents",
  /*2+105*/   L"AUTO_array_idents",
  /*2+106*/   L"optional_scalar_assignment",
  /*2+107*/   L"scalar_ident_and_optional_assignment",
  /*2+108*/   L"more_scalar_idents_and_optional_assignments",
  /*2+109*/   L"scalar_idents_and_optional_assignments",
  /*2+110*/   L"EXTERNAL_scalar_idents_and_optional_assignments",
  /*2+111*/   L"OWN_or_CONST_scalar_idents_and_optional_assignments",
  /*2+112*/   L"AUTO_scalar_idents_and_optional_assignments",
  /*2+113*/   L"EXTERNAL_scalar_ident",
  /*2+114*/   L"EXTERNAL_scalar_idents",
  /*2+115*/   L"more_external_scalar_idents",
  /*2+116*/   L"more_array_data",
  /*2+117*/   L"scalar_array_data",
  /*2+118*/   L"optional_array_assignment",
  /*2+119*/   L"EXTERNAL_array_ident_and_optional_assignment",
  /*2+120*/   L"OWN_or_CONST_array_ident_and_optional_assignment",
  /*2+121*/   L"Name_Array_Name_Declaration",
  /*2+122*/   L"Array_Name_Declaration",
  /*2+123*/   L"Name_Array_Declaration",
  /*2+124*/   L"Array_Declaration",
  /*2+125*/   L"Scalar_Name_Declaration",
  /*2+126*/   L"Scalar_Declaration",
  /*2+127*/   L"Data_Declaration",
  /*2+128*/   L"Declaration",
  /*2+129*/   L"optional_parameters",
  /*2+130*/   L"Rt_CALL",
  /*2+131*/   L"Fn_CALL",
  /*2+132*/   L"Map_CALL",
  /*2+133*/   L"Pred_CALL",
  /*2+134*/   L"PROC_or_PROCSPEC",
  /*2+135*/   L"ESCARRAY",
  /*2+136*/   L"ESCREC_opt",
  /*2+137*/   L"ESCREC",
  /*2+138*/   L"ESC_ARRAY_or_REC",
  /*2+139*/   L"SIGNAL",
  /*2+140*/   L"COMMENT_TEXT",
  /*2+141*/   L"COMMENT",
  /*2+142*/   L"COMMENT_T",
  /*2+143*/   L"LHS",
  /*2+144*/   L"IMP",
  /*2+145*/   L"EIMP",
  /*2+146*/   L"XIMP",
  /*2+147*/   L"FELSE_opt",
  /*2+148*/   L"if_or_unless",
  /*2+149*/   L"if_unless_XIMP",
  /*2+150*/   L"if_XIMP_opt",
  /*2+151*/   L"THEN_opt",
  /*2+152*/   L"else_start_IMP_opt",
  /*2+153*/   L"else_if_unless_XIMP_opt",
  /*2+154*/   L"else_if_XIMP_opt",
  /*2+155*/   L"else_final_IMP_opt",
  /*2+156*/   L"start_IMP",
  /*2+157*/   L"final_IMP",
  /*2+158*/   L"and_IMPS",
  /*2+159*/   L"INCL_LIST_opt",
  /*2+160*/   L"wh_for",
  /*2+161*/   L"cycle_IMP",
  /*2+162*/   L"event_list_def",
  /*2+163*/   L"iu_while_until_for_T",
  /*2+164*/   L"AddressOffsetOp",
  /*2+165*/   L"ADDOP_SEXP_opt",
  /*2+166*/   L"A_or_AN_or_NA_or_NAN",
  /*2+167*/   L"A_or_AN",
  /*2+168*/   L"NA_or_NAN",
  /*2+169*/   L"rest_of_IDENTS",
  /*2+170*/   L"IDENTS",
  /*2+171*/   L"V_or_N",
  /*2+172*/   L"extra",
  /*2+173*/   L"subevent_and_extra",
  /*2+174*/   L"IMP_ASSIGN",
  /*2+175*/   L"N_ASS",
  /*2+176*/   L"rest_of_AND_COND",
  /*2+177*/   L"AND_COND",
  /*2+178*/   L"rest_of_OR_COND",
  /*2+179*/   L"OR_COND",
  /*2+180*/   L"rest_of_COND",
  /*2+181*/   L"COND",
  /*2+182*/   L"OP0",
  /*2+183*/   L"OP1",
  /*2+184*/   L"OP2",
  /*2+185*/   L"OP3",
  /*2+186*/   L"OP0_EXP",
  /*2+187*/   L"OP1_EXP",
  /*2+188*/   L"OP2_EXP",
  /*2+189*/   L"OP3_EXP",
  /*2+190*/   L"OP0_EXPS",
  /*2+191*/   L"OP1_EXPS",
  /*2+192*/   L"OP2_EXPS",
  /*2+193*/   L"OP3_EXPS",
  /*2+194*/   L"COMP2_opt",
  /*2+195*/   L"COMP2",
  /*2+196*/   L"COMP1",
  /*2+197*/   L"COMP12_opt",
  /*2+198*/   L"COMPARISON",
  /*2+199*/   L"COMP1OS2",
  /*2+200*/   L"SCOND",
  /*2+201*/   L"SIGN_opt",
  /*2+202*/   L"UOP",
  /*2+203*/   L"UOP_opt",
  /*2+204*/   L"EXP",
  /*2+205*/   L"EXP2",
  /*2+206*/   L"EXP1",
  /*2+207*/   L"EXP0",
  /*2+208*/   L"SEXP",
  /*2+209*/   L"COP1",
  /*2+210*/   L"COP2",
  /*2+211*/   L"COP3",
  /*2+212*/   L"CSIGN",
  /*2+213*/   L"rest_of_IEXP2_EXPR",
  /*2+214*/   L"IEXP2_EXPR",
  /*2+215*/   L"COP3_IEXP2_optseq",
  /*2+216*/   L"COP2_IEXP1_optseq",
  /*2+217*/   L"COP1_IEXP0_optseq",
  /*2+218*/   L"CUOP_opt",
  /*2+219*/   L"CUOP",
  /*2+220*/   L"IEXP2",
  /*2+221*/   L"IEXP1",
  /*2+222*/   L"IEXP0",
  /*2+223*/   L"IEXP",
  /*2+224*/   L"PCONST",
  /*2+225*/   L"dq",
  /*2+226*/   L"ACONST",
  /*2+227*/   L"OCONST",
  /*2+228*/   L"SEQ",
  /*2+229*/   L"record_field_decl",
  /*2+230*/   L"OR_record_field_declarations",
  /*2+231*/   L"more_record_field_decls",
  /*2+232*/   L"record_field_declarations",
  /*2+233*/   L"CONST_BOUNDS",
  /*2+234*/   L"RCONST_BOUNDS",
  /*2+235*/   L"BOUNDS_PAIR",
  /*2+236*/   L"rest_of_BPL_LIST",
  /*2+237*/   L"BPL_LIST",
  /*2+238*/   L"BPL",
  /*2+239*/   L"parameter_type",
  /*2+240*/   L"parameter_type_decl",
  /*2+241*/   L"VDEC_or_PROC",
  /*2+242*/   L"More_FPPs",
  /*2+243*/   L"FPP",
  /*2+244*/   L"FPP0",
  /*2+245*/   L"another_FPP0",
  /*2+246*/   L"MORE_APPS",
  /*2+247*/   L"APP",
  /*2+248*/   L"rest_of_IEXP",
  /*2+249*/   L"const_event_list",
  /*2+250*/   L"RESLEFT_opt",
  /*2+251*/   L"RESRIGHT_opt",
  /*2+252*/   L"RESEXP",
  /*255+0*/   L"whitespace",
  /*255+1*/   L"Imp77_stropping",
  /*255+2*/   L"PROC",
  /*255+3*/   L"PROCSPEC",
  /*255+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"FINAL",
  /*2+2*/   L"STATEMENTS",
  /*2+3*/   L"STATEMENT",
  /*2+4*/   L"IDENT",
  /*2+5*/   L"DeepBase",
  /*2+6*/   L"Based_Const",
  /*2+7*/   L"BigCharConst",
  /*2+8*/   L"CharConst",
  /*2+9*/   L"OptExponent",
  /*2+10*/   L"OptDecimal",
  /*2+11*/   L"Base_or_Float",
  /*2+12*/   L"Num",
  /*2+13*/   L"CONST",
  /*2+14*/   L"stringchars",
  /*2+15*/   L"ALIASTEXT",
  /*2+16*/   L"V",
  /*2+17*/   L"N",
  /*2+18*/   L"FM",
  /*2+19*/   L"A",
  /*2+20*/   L"AN",
  /*2+21*/   L"NA",
  /*2+22*/   L"NAN",
  /*2+23*/   L"any",
  /*2+24*/   L"NL_opt",
  /*2+25*/   L"more_Ts",
  /*2+26*/   L"T",
  /*2+27*/   L"simple_type",
  /*2+28*/   L"routine_or_predicate",
  /*2+29*/   L"fn_or_map",
  /*2+30*/   L"OWN_or_CONST",
  /*2+31*/   L"EXTERNAL",
  /*2+32*/   L"EXTERNAL_opt",
  /*2+33*/   L"COMP",
  /*2+34*/   L"ACOMP",
  /*2+35*/   L"exit_or_continue",
  /*2+36*/   L"on_event",
  /*2+37*/   L"BACK",
  /*2+38*/   L"ALIAS_opt",
  /*2+39*/   L"Rt_Pred_FPP",
  /*2+40*/   L"INDEF",
  /*2+41*/   L"INDEF_or_IEXP",
  /*2+42*/   L"bracketed_INDEF_or_IEXP",
  /*2+43*/   L"optional_initialiser_repeat_count",
  /*2+44*/   L"initialiser_item_with_optional_repeat_count",
  /*2+45*/   L"L",
  /*2+46*/   L"SWID",
  /*2+47*/   L"rest_of_SWIDS",
  /*2+48*/   L"SWIDS",
  /*2+49*/   L"rest_of_SWDEFS",
  /*2+50*/   L"SWDEFS",
  /*2+51*/   L"SWDEF",
  /*2+52*/   L"simple_label",
  /*2+53*/   L"switch_label",
  /*2+54*/   L"S",
  /*2+55*/   L"jump_destination",
  /*2+56*/   L"Star_or_IEXP",
  /*2+57*/   L"FM_or_Star",
  /*2+58*/   L"result_types",
  /*2+59*/   L"scalar_declaration_types",
  /*2+60*/   L"name_declaration_types",
  /*2+61*/   L"Rt_Fn_Map_Pred_DECL",
  /*2+62*/   L"SPEC_opt",
  /*2+63*/   L"ARRAYNAME",
  /*2+64*/   L"Proc_Declaration",
  /*2+65*/   L"External_Name_Array_Name_Declaration",
  /*2+66*/   L"External_Array_Name_Declaration",
  /*2+67*/   L"External_Array_Declaration",
  /*2+68*/   L"External_Name_Array_Declaration",
  /*2+69*/   L"External_Scalar_Name_Declaration",
  /*2+70*/   L"External_Scalar_Declaration",
  /*2+71*/   L"OWN_or_CONST_Name_Array_Name_Declaration",
  /*2+72*/   L"OWN_or_CONST_Array_Name_Declaration",
  /*2+73*/   L"OWN_or_CONST_Array_Declaration",
  /*2+74*/   L"OWN_or_CONST_Name_Array_Declaration",
  /*2+75*/   L"OWN_or_CONST_Scalar_Name_Declaration",
  /*2+76*/   L"OWN_or_CONST_Scalar_Declaration",
  /*2+77*/   L"AUTO_Name_Array_Name_Declaration",
  /*2+78*/   L"AUTO_Array_Name_Declaration",
  /*2+79*/   L"AUTO_Array_Declaration",
  /*2+80*/   L"AUTO_Name_Array_Declaration",
  /*2+81*/   L"AUTO_Scalar_Name_Declaration",
  /*2+82*/   L"AUTO_Scalar_Declaration",
  /*2+83*/   L"name",
  /*2+84*/   L"const_array_bounds",
  /*2+85*/   L"optional_name_assignment",
  /*2+86*/   L"name_ident_and_optional_assignment",
  /*2+87*/   L"more_name_idents_and_optional_assignments",
  /*2+88*/   L"name_idents_and_optional_assignments",
  /*2+89*/   L"name_ident",
  /*2+90*/   L"more_name_idents",
  /*2+91*/   L"name_idents",
  /*2+92*/   L"AUTO_name_idents_and_optional_assignments",
  /*2+93*/   L"OWN_or_CONST_name_idents_and_optional_assignments",
  /*2+94*/   L"EXTERNAL_name_idents_and_optional_assignments",
  /*2+95*/   L"EXTERNAL_name_idents",
  /*2+96*/   L"name_array_idents",
  /*2+97*/   L"more_name_array_idents",
  /*2+98*/   L"EXTERNAL_name_array_idents",
  /*2+99*/   L"OWN_or_CONST_name_array_idents",
  /*2+100*/   L"more_AUTO_name_array_idents",
  /*2+101*/   L"AUTO_name_array_idents",
  /*2+102*/   L"more_external_array_idents",
  /*2+103*/   L"more_AUTO_array_idents",
  /*2+104*/   L"EXTERNAL_array_idents",
  /*2+105*/   L"AUTO_array_idents",
  /*2+106*/   L"optional_scalar_assignment",
  /*2+107*/   L"scalar_ident_and_optional_assignment",
  /*2+108*/   L"more_scalar_idents_and_optional_assignments",
  /*2+109*/   L"scalar_idents_and_optional_assignments",
  /*2+110*/   L"EXTERNAL_scalar_idents_and_optional_assignments",
  /*2+111*/   L"OWN_or_CONST_scalar_idents_and_optional_assignments",
  /*2+112*/   L"AUTO_scalar_idents_and_optional_assignments",
  /*2+113*/   L"EXTERNAL_scalar_ident",
  /*2+114*/   L"EXTERNAL_scalar_idents",
  /*2+115*/   L"more_external_scalar_idents",
  /*2+116*/   L"more_array_data",
  /*2+117*/   L"scalar_array_data",
  /*2+118*/   L"optional_array_assignment",
  /*2+119*/   L"EXTERNAL_array_ident_and_optional_assignment",
  /*2+120*/   L"OWN_or_CONST_array_ident_and_optional_assignment",
  /*2+121*/   L"Name_Array_Name_Declaration",
  /*2+122*/   L"Array_Name_Declaration",
  /*2+123*/   L"Name_Array_Declaration",
  /*2+124*/   L"Array_Declaration",
  /*2+125*/   L"Scalar_Name_Declaration",
  /*2+126*/   L"Scalar_Declaration",
  /*2+127*/   L"Data_Declaration",
  /*2+128*/   L"Declaration",
  /*2+129*/   L"optional_parameters",
  /*2+130*/   L"Rt_CALL",
  /*2+131*/   L"Fn_CALL",
  /*2+132*/   L"Map_CALL",
  /*2+133*/   L"Pred_CALL",
  /*2+134*/   L"PROC_or_PROCSPEC",
  /*2+135*/   L"ESCARRAY",
  /*2+136*/   L"ESCREC_opt",
  /*2+137*/   L"ESCREC",
  /*2+138*/   L"ESC_ARRAY_or_REC",
  /*2+139*/   L"SIGNAL",
  /*2+140*/   L"COMMENT_TEXT",
  /*2+141*/   L"COMMENT",
  /*2+142*/   L"COMMENT_T",
  /*2+143*/   L"LHS",
  /*2+144*/   L"IMP",
  /*2+145*/   L"EIMP",
  /*2+146*/   L"XIMP",
  /*2+147*/   L"FELSE_opt",
  /*2+148*/   L"if_or_unless",
  /*2+149*/   L"if_unless_XIMP",
  /*2+150*/   L"if_XIMP_opt",
  /*2+151*/   L"THEN_opt",
  /*2+152*/   L"else_start_IMP_opt",
  /*2+153*/   L"else_if_unless_XIMP_opt",
  /*2+154*/   L"else_if_XIMP_opt",
  /*2+155*/   L"else_final_IMP_opt",
  /*2+156*/   L"start_IMP",
  /*2+157*/   L"final_IMP",
  /*2+158*/   L"and_IMPS",
  /*2+159*/   L"INCL_LIST_opt",
  /*2+160*/   L"wh_for",
  /*2+161*/   L"cycle_IMP",
  /*2+162*/   L"event_list_def",
  /*2+163*/   L"iu_while_until_for_T",
  /*2+164*/   L"AddressOffsetOp",
  /*2+165*/   L"ADDOP_SEXP_opt",
  /*2+166*/   L"A_or_AN_or_NA_or_NAN",
  /*2+167*/   L"A_or_AN",
  /*2+168*/   L"NA_or_NAN",
  /*2+169*/   L"rest_of_IDENTS",
  /*2+170*/   L"IDENTS",
  /*2+171*/   L"V_or_N",
  /*2+172*/   L"extra",
  /*2+173*/   L"subevent_and_extra",
  /*2+174*/   L"IMP_ASSIGN",
  /*2+175*/   L"N_ASS",
  /*2+176*/   L"rest_of_AND_COND",
  /*2+177*/   L"AND_COND",
  /*2+178*/   L"rest_of_OR_COND",
  /*2+179*/   L"OR_COND",
  /*2+180*/   L"rest_of_COND",
  /*2+181*/   L"COND",
  /*2+182*/   L"OP0",
  /*2+183*/   L"OP1",
  /*2+184*/   L"OP2",
  /*2+185*/   L"OP3",
  /*2+186*/   L"OP0_EXP",
  /*2+187*/   L"OP1_EXP",
  /*2+188*/   L"OP2_EXP",
  /*2+189*/   L"OP3_EXP",
  /*2+190*/   L"OP0_EXPS",
  /*2+191*/   L"OP1_EXPS",
  /*2+192*/   L"OP2_EXPS",
  /*2+193*/   L"OP3_EXPS",
  /*2+194*/   L"COMP2_opt",
  /*2+195*/   L"COMP2",
  /*2+196*/   L"COMP1",
  /*2+197*/   L"COMP12_opt",
  /*2+198*/   L"COMPARISON",
  /*2+199*/   L"COMP1OS2",
  /*2+200*/   L"SCOND",
  /*2+201*/   L"SIGN_opt",
  /*2+202*/   L"UOP",
  /*2+203*/   L"UOP_opt",
  /*2+204*/   L"EXP",
  /*2+205*/   L"EXP2",
  /*2+206*/   L"EXP1",
  /*2+207*/   L"EXP0",
  /*2+208*/   L"SEXP",
  /*2+209*/   L"COP1",
  /*2+210*/   L"COP2",
  /*2+211*/   L"COP3",
  /*2+212*/   L"CSIGN",
  /*2+213*/   L"rest_of_IEXP2_EXPR",
  /*2+214*/   L"IEXP2_EXPR",
  /*2+215*/   L"COP3_IEXP2_optseq",
  /*2+216*/   L"COP2_IEXP1_optseq",
  /*2+217*/   L"COP1_IEXP0_optseq",
  /*2+218*/   L"CUOP_opt",
  /*2+219*/   L"CUOP",
  /*2+220*/   L"IEXP2",
  /*2+221*/   L"IEXP1",
  /*2+222*/   L"IEXP0",
  /*2+223*/   L"IEXP",
  /*2+224*/   L"PCONST",
  /*2+225*/   L"dq",
  /*2+226*/   L"ACONST",
  /*2+227*/   L"OCONST",
  /*2+228*/   L"SEQ",
  /*2+229*/   L"record_field_decl",
  /*2+230*/   L"OR_record_field_declarations",
  /*2+231*/   L"more_record_field_decls",
  /*2+232*/   L"record_field_declarations",
  /*2+233*/   L"CONST_BOUNDS",
  /*2+234*/   L"RCONST_BOUNDS",
  /*2+235*/   L"BOUNDS_PAIR",
  /*2+236*/   L"rest_of_BPL_LIST",
  /*2+237*/   L"BPL_LIST",
  /*2+238*/   L"BPL",
  /*2+239*/   L"parameter_type",
  /*2+240*/   L"parameter_type_decl",
  /*2+241*/   L"VDEC_or_PROC",
  /*2+242*/   L"More_FPPs",
  /*2+243*/   L"FPP",
  /*2+244*/   L"FPP0",
  /*2+245*/   L"another_FPP0",
  /*2+246*/   L"MORE_APPS",
  /*2+247*/   L"APP",
  /*2+248*/   L"rest_of_IEXP",
  /*2+249*/   L"const_event_list",
  /*2+250*/   L"RESLEFT_opt",
  /*2+251*/   L"RESRIGHT_opt",
  /*2+252*/   L"RESEXP",
  /*255+0*/   L"whitespace",
  /*255+1*/   L"Imp77_stropping",
  /*255+2*/   L"PROC",
  /*255+3*/   L"PROCSPEC",
  /*255+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_FINAL,  /*6*/
  G_STATEMENTS,  /*15*/
  G_STATEMENT,  /*20*/
  G_IDENT,  /*200*/
  G_DeepBase,  /*204*/
  G_Based_Const,  /*210*/
  G_BigCharConst,  /*215*/
  G_CharConst,  /*218*/
  G_OptExponent,  /*225*/
  G_OptDecimal,  /*230*/
  G_Base_or_Float,  /*235*/
  G_Num,  /*241*/
  G_CONST,  /*244*/
  G_stringchars,  /*255*/
  G_ALIASTEXT,  /*265*/
  G_V,  /*270*/
  G_N,  /*274*/
  G_FM,  /*278*/
  G_A,  /*282*/
  G_AN,  /*286*/
  G_NA,  /*290*/
  G_NAN,  /*294*/
  G_any,  /*298*/
  G_NL_opt,  /*301*/
  G_more_Ts,  /*306*/
  G_T,  /*311*/
  G_simple_type,  /*318*/
  G_routine_or_predicate,  /*337*/
  G_fn_or_map,  /*342*/
  G_OWN_or_CONST,  /*353*/
  G_EXTERNAL,  /*360*/
  G_EXTERNAL_opt,  /*371*/
  G_COMP,  /*375*/
  G_ACOMP,  /*399*/
  G_exit_or_continue,  /*406*/
  G_on_event,  /*411*/
  G_BACK,  /*416*/
  G_ALIAS_opt,  /*423*/
  G_Rt_Pred_FPP,  /*428*/
  G_INDEF,  /*434*/
  G_INDEF_or_IEXP,  /*437*/
  G_bracketed_INDEF_or_IEXP,  /*442*/
  G_optional_initialiser_repeat_count,  /*447*/
  G_initialiser_item_with_optional_repeat_count,  /*457*/
  G_L,  /*461*/
  G_SWID,  /*464*/
  G_rest_of_SWIDS,  /*467*/
  G_SWIDS,  /*474*/
  G_rest_of_SWDEFS,  /*478*/
  G_SWDEFS,  /*485*/
  G_SWDEF,  /*489*/
  G_simple_label,  /*493*/
  G_switch_label,  /*497*/
  G_S,  /*502*/
  G_jump_destination,  /*505*/
  G_Star_or_IEXP,  /*513*/
  G_FM_or_Star,  /*518*/
  G_result_types,  /*523*/
  G_scalar_declaration_types,  /*536*/
  G_name_declaration_types,  /*549*/
  G_Rt_Fn_Map_Pred_DECL,  /*565*/
  G_SPEC_opt,  /*571*/
  G_ARRAYNAME,  /*575*/
  G_Proc_Declaration,  /*585*/
  G_External_Name_Array_Name_Declaration,  /*594*/
  G_External_Array_Name_Declaration,  /*606*/
  G_External_Array_Declaration,  /*618*/
  G_External_Name_Array_Declaration,  /*630*/
  G_External_Scalar_Name_Declaration,  /*642*/
  G_External_Scalar_Declaration,  /*656*/
  G_OWN_or_CONST_Name_Array_Name_Declaration,  /*666*/
  G_OWN_or_CONST_Array_Name_Declaration,  /*672*/
  G_OWN_or_CONST_Array_Declaration,  /*678*/
  G_OWN_or_CONST_Name_Array_Declaration,  /*684*/
  G_OWN_or_CONST_Scalar_Name_Declaration,  /*690*/
  G_OWN_or_CONST_Scalar_Declaration,  /*699*/
  G_AUTO_Name_Array_Name_Declaration,  /*704*/
  G_AUTO_Array_Name_Declaration,  /*709*/
  G_AUTO_Array_Declaration,  /*714*/
  G_AUTO_Name_Array_Declaration,  /*719*/
  G_AUTO_Scalar_Name_Declaration,  /*724*/
  G_AUTO_Scalar_Declaration,  /*731*/
  G_name,  /*735*/
  G_const_array_bounds,  /*738*/
  G_optional_name_assignment,  /*741*/
  G_name_ident_and_optional_assignment,  /*751*/
  G_more_name_idents_and_optional_assignments,  /*755*/
  G_name_idents_and_optional_assignments,  /*761*/
  G_name_ident,  /*765*/
  G_more_name_idents,  /*768*/
  G_name_idents,  /*774*/
  G_AUTO_name_idents_and_optional_assignments,  /*778*/
  G_OWN_or_CONST_name_idents_and_optional_assignments,  /*781*/
  G_EXTERNAL_name_idents_and_optional_assignments,  /*784*/
  G_EXTERNAL_name_idents,  /*787*/
  G_name_array_idents,  /*790*/
  G_more_name_array_idents,  /*795*/
  G_EXTERNAL_name_array_idents,  /*801*/
  G_OWN_or_CONST_name_array_idents,  /*804*/
  G_more_AUTO_name_array_idents,  /*807*/
  G_AUTO_name_array_idents,  /*813*/
  G_more_external_array_idents,  /*818*/
  G_more_AUTO_array_idents,  /*824*/
  G_EXTERNAL_array_idents,  /*830*/
  G_AUTO_array_idents,  /*835*/
  G_optional_scalar_assignment,  /*840*/
  G_scalar_ident_and_optional_assignment,  /*845*/
  G_more_scalar_idents_and_optional_assignments,  /*849*/
  G_scalar_idents_and_optional_assignments,  /*855*/
  G_EXTERNAL_scalar_idents_and_optional_assignments,  /*859*/
  G_OWN_or_CONST_scalar_idents_and_optional_assignments,  /*862*/
  G_AUTO_scalar_idents_and_optional_assignments,  /*865*/
  G_EXTERNAL_scalar_ident,  /*868*/
  G_EXTERNAL_scalar_idents,  /*871*/
  G_more_external_scalar_idents,  /*875*/
  G_more_array_data,  /*881*/
  G_scalar_array_data,  /*887*/
  G_optional_array_assignment,  /*891*/
  G_EXTERNAL_array_ident_and_optional_assignment,  /*897*/
  G_OWN_or_CONST_array_ident_and_optional_assignment,  /*902*/
  G_Name_Array_Name_Declaration,  /*907*/
  G_Array_Name_Declaration,  /*914*/
  G_Name_Array_Declaration,  /*921*/
  G_Array_Declaration,  /*928*/
  G_Scalar_Name_Declaration,  /*935*/
  G_Scalar_Declaration,  /*942*/
  G_Data_Declaration,  /*949*/
  G_Declaration,  /*962*/
  G_optional_parameters,  /*982*/
  G_Rt_CALL,  /*988*/
  G_Fn_CALL,  /*992*/
  G_Map_CALL,  /*996*/
  G_Pred_CALL,  /*1000*/
  G_PROC_or_PROCSPEC,  /*1004*/
  G_ESCARRAY,  /*1009*/
  G_ESCREC_opt,  /*1015*/
  G_ESCREC,  /*1020*/
  G_ESC_ARRAY_or_REC,  /*1025*/
  G_SIGNAL,  /*1031*/
  G_COMMENT_TEXT,  /*1036*/
  G_COMMENT,  /*1042*/
  G_COMMENT_T,  /*1047*/
  G_LHS,  /*1052*/
  G_IMP,  /*1062*/
  G_EIMP,  /*1116*/
  G_XIMP,  /*1129*/
  G_FELSE_opt,  /*1138*/
  G_if_or_unless,  /*1143*/
  G_if_unless_XIMP,  /*1148*/
  G_if_XIMP_opt,  /*1153*/
  G_THEN_opt,  /*1158*/
  G_else_start_IMP_opt,  /*1162*/
  G_else_if_unless_XIMP_opt,  /*1167*/
  G_else_if_XIMP_opt,  /*1172*/
  G_else_final_IMP_opt,  /*1177*/
  G_start_IMP,  /*1182*/
  G_final_IMP,  /*1190*/
  G_and_IMPS,  /*1198*/
  G_INCL_LIST_opt,  /*1204*/
  G_wh_for,  /*1210*/
  G_cycle_IMP,  /*1217*/
  G_event_list_def,  /*1223*/
  G_iu_while_until_for_T,  /*1228*/
  G_AddressOffsetOp,  /*1247*/
  G_ADDOP_SEXP_opt,  /*1254*/
  G_A_or_AN_or_NA_or_NAN,  /*1259*/
  G_A_or_AN,  /*1268*/
  G_NA_or_NAN,  /*1273*/
  G_rest_of_IDENTS,  /*1278*/
  G_IDENTS,  /*1285*/
  G_V_or_N,  /*1289*/
  G_extra,  /*1303*/
  G_subevent_and_extra,  /*1309*/
  G_IMP_ASSIGN,  /*1316*/
  G_N_ASS,  /*1332*/
  G_rest_of_AND_COND,  /*1342*/
  G_AND_COND,  /*1347*/
  G_rest_of_OR_COND,  /*1353*/
  G_OR_COND,  /*1358*/
  G_rest_of_COND,  /*1364*/
  G_COND,  /*1370*/
  G_OP0,  /*1374*/
  G_OP1,  /*1377*/
  G_OP2,  /*1394*/
  G_OP3,  /*1404*/
  G_OP0_EXP,  /*1414*/
  G_OP1_EXP,  /*1418*/
  G_OP2_EXP,  /*1422*/
  G_OP3_EXP,  /*1426*/
  G_OP0_EXPS,  /*1430*/
  G_OP1_EXPS,  /*1435*/
  G_OP2_EXPS,  /*1440*/
  G_OP3_EXPS,  /*1445*/
  G_COMP2_opt,  /*1450*/
  G_COMP2,  /*1454*/
  G_COMP1,  /*1458*/
  G_COMP12_opt,  /*1462*/
  G_COMPARISON,  /*1466*/
  G_COMP1OS2,  /*1487*/
  G_SCOND,  /*1492*/
  G_SIGN_opt,  /*1526*/
  G_UOP,  /*1532*/
  G_UOP_opt,  /*1539*/
  G_EXP,  /*1543*/
  G_EXP2,  /*1561*/
  G_EXP1,  /*1567*/
  G_EXP0,  /*1572*/
  G_SEXP,  /*1576*/
  G_COP1,  /*1589*/
  G_COP2,  /*1592*/
  G_COP3,  /*1595*/
  G_CSIGN,  /*1598*/
  G_rest_of_IEXP2_EXPR,  /*1601*/
  G_IEXP2_EXPR,  /*1607*/
  G_COP3_IEXP2_optseq,  /*1611*/
  G_COP2_IEXP1_optseq,  /*1617*/
  G_COP1_IEXP0_optseq,  /*1623*/
  G_CUOP_opt,  /*1629*/
  G_CUOP,  /*1633*/
  G_IEXP2,  /*1636*/
  G_IEXP1,  /*1641*/
  G_IEXP0,  /*1645*/
  G_IEXP,  /*1656*/
  G_PCONST,  /*1666*/
  G_dq,  /*1671*/
  G_ACONST,  /*1674*/
  G_OCONST,  /*1678*/
  G_SEQ,  /*1682*/
  G_record_field_decl,  /*1692*/
  G_OR_record_field_declarations,  /*1807*/
  G_more_record_field_decls,  /*1813*/
  G_record_field_declarations,  /*1820*/
  G_CONST_BOUNDS,  /*1825*/
  G_RCONST_BOUNDS,  /*1832*/
  G_BOUNDS_PAIR,  /*1839*/
  G_rest_of_BPL_LIST,  /*1844*/
  G_BPL_LIST,  /*1850*/
  G_BPL,  /*1854*/
  G_parameter_type,  /*1859*/
  G_parameter_type_decl,  /*1872*/
  G_VDEC_or_PROC,  /*1885*/
  G_More_FPPs,  /*1894*/
  G_FPP,  /*1901*/
  G_FPP0,  /*1905*/
  G_another_FPP0,  /*1908*/
  G_MORE_APPS,  /*1914*/
  G_APP,  /*1921*/
  G_rest_of_IEXP,  /*1925*/
  G_const_event_list,  /*1930*/
  G_RESLEFT_opt,  /*1934*/
  G_RESRIGHT_opt,  /*1939*/
  G_RESEXP,  /*1944*/
};

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"
             "      // TO DO: testing seems to suggest that comments starting with '{' which extend to the\n"
             "      // end of the line with no terminating '}' are causing a syntax error.  Check & fix if\n"
             "      // necessary.\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"
             "    //  ***PROBLEM*** line reconstruction removes spaces *but not in strings and chars*,\n"
             "    //                however it doesn't know if we are in an Imp comment, so it will\n"
             "    //                still be doing line reconstruction including string preservation\n"
             "    //                which traverses newlines and '}' end of comment symbols.\n"
             "\n"
             "    //                I do remember adding a mechanism to the parser at some point that\n"
             "    //                allowed me to postpone the line reconstruction until just before\n"
             "    //                parsing the content, but it was very complicated and had a lot of\n"
             "    //                overhead in terms of needing to write extra code, and to ne honest\n"
             "    //                I have completely forgotten the details of how it worked :-(\n"
             "    //                If I do have to resurrect that mechanism, I had better document it\n"
             "    //                first!\n"
             "\n"
             "    //  Note that although '{' comments can be safely skipped at the line reconstruction\n"
             "    //  stage, \"!\" comments and \"%comment\" comments can't, because of the other uses of\n"
             "    //  '!' in Imp (OR, EXOR, and Modulus).  I suppose a much more complex line reconstruction\n"
             "    //  that uses code like in the 'uncomment-imp' utility might work, though I'm still not\n"
             "    //  sure that that code handles %comment...\n"
             "    \n"
             "    //  Worst-case example for handling during line reconstruction is where there are multiple\n"
             "    //  switch labels before a comment!  Maybe even mixed with {} comments!:\n"
             "    //\n"
             "    //  lab(12): lab{yuck!}(x): ! comment with odd ' in it\n"
             "    //  lab(12): lab{double yuck!}(x): %comment with odd ' in it %c\n"
             "    //  lab(12): lab{double yuck!}(x): %comment with odd ' in it %c ;\n"
             "    //  lab(12): lab{double yuck!}(x): %comment with odd ' in it { %c\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,
  /*222*/   NULL,
  /*223*/   NULL,
  /*224*/   NULL,
  /*225*/   NULL,
  /*226*/   NULL,
  /*227*/   NULL,
  /*228*/   NULL,
  /*229*/   NULL,
  /*230*/   NULL,
  /*231*/   NULL,
  /*232*/   NULL,
  /*233*/   NULL,
  /*234*/   NULL,
  /*235*/   NULL,
  /*236*/   NULL,
  /*237*/   NULL,
  /*238*/   NULL,
  /*239*/   NULL,
  /*240*/   NULL,
  /*241*/   NULL,
  /*242*/   NULL,
  /*243*/   NULL,
  /*244*/   NULL,
  /*245*/   NULL,
  /*246*/   NULL,
  /*247*/   NULL,
  /*248*/   NULL,
  /*249*/   NULL,
  /*250*/   NULL,
  /*251*/   NULL,
  /*252*/   NULL,
  /*253*/   NULL,
  /*254*/   NULL,
  /*255*/   NULL,
  /*256*/   NULL,
  /*257*/   NULL,
  /*258*/   NULL,
  /*259*/   NULL,
};
const wchar_t *ast_code[NUM_SIMPLE_PHRASES] = {
  /*SS*/   L"",
  /*FINAL*/   L"",
  /*STATEMENTS*/   L"",
  /*STATEMENT*/   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"  fprintf(stderr, \"[V]\");  ",
  /*N*/   L"  fprintf(stderr, \"[N]\");  ",
  /*FM*/   L"  fprintf(stderr, \"[FM]\"); ",
  /*A*/   L"  fprintf(stderr, \"[A]\");",
  /*AN*/   L"  fprintf(stderr, \"[AN]\");",
  /*NA*/   L"  fprintf(stderr, \"[NA]\");",
  /*NAN*/   L"  fprintf(stderr, \"[NAN]\");",
  /*any*/   L"",
  /*NL_opt*/   L"",
  /*more_Ts*/   L"",
  /*T*/   L"",
  /*simple_type*/   L"",
  /*routine_or_predicate*/   L" fprintf(stderr, (alt == 1) ? \"[R]\" : \"[P]\"); ",
  /*fn_or_map*/   L" fprintf(stderr, (alt <= 2) ? \"[F]\" : \"[M]\"); ",
  /*OWN_or_CONST*/   L"",
  /*EXTERNAL*/   L"",
  /*EXTERNAL_opt*/   L"",
  /*COMP*/   L"",
  /*ACOMP*/   L"",
  /*exit_or_continue*/   L"",
  /*on_event*/   L"",
  /*BACK*/   L"",
  /*ALIAS_opt*/   L"",
  /*Rt_Pred_FPP*/   L"",
  /*INDEF*/   L"",
  /*INDEF_or_IEXP*/   L"",
  /*bracketed_INDEF_or_IEXP*/   L"",
  /*optional_initialiser_repeat_count*/   L"",
  /*initialiser_item_with_optional_repeat_count*/   L"",
  /*L*/   L"",
  /*SWID*/   L"",
  /*rest_of_SWIDS*/   L"",
  /*SWIDS*/   L"",
  /*rest_of_SWDEFS*/   L"",
  /*SWDEFS*/   L"",
  /*SWDEF*/   L"",
  /*simple_label*/   L"",
  /*switch_label*/   L"",
  /*S*/   L"",
  /*jump_destination*/   L"",
  /*Star_or_IEXP*/   L"",
  /*FM_or_Star*/   L"",
  /*result_types*/   L"",
  /*scalar_declaration_types*/   L"",
  /*name_declaration_types*/   L"",
  /*Rt_Fn_Map_Pred_DECL*/   L"",
  /*SPEC_opt*/   L"",
  /*ARRAYNAME*/   L"",
  /*Proc_Declaration*/   L"",
  /*External_Name_Array_Name_Declaration*/   L"",
  /*External_Array_Name_Declaration*/   L"",
  /*External_Array_Declaration*/   L"",
  /*External_Name_Array_Declaration*/   L"",
  /*External_Scalar_Name_Declaration*/   L"",
  /*External_Scalar_Declaration*/   L"",
  /*OWN_or_CONST_Name_Array_Name_Declaration*/   L"",
  /*OWN_or_CONST_Array_Name_Declaration*/   L"",
  /*OWN_or_CONST_Array_Declaration*/   L"",
  /*OWN_or_CONST_Name_Array_Declaration*/   L"",
  /*OWN_or_CONST_Scalar_Name_Declaration*/   L"",
  /*OWN_or_CONST_Scalar_Declaration*/   L"",
  /*AUTO_Name_Array_Name_Declaration*/   L"",
  /*AUTO_Array_Name_Declaration*/   L"",
  /*AUTO_Array_Declaration*/   L"",
  /*AUTO_Name_Array_Declaration*/   L"",
  /*AUTO_Scalar_Name_Declaration*/   L"",
  /*AUTO_Scalar_Declaration*/   L"",
  /*name*/   L"",
  /*const_array_bounds*/   L"",
  /*optional_name_assignment*/   L"",
  /*name_ident_and_optional_assignment*/   L"",
  /*more_name_idents_and_optional_assignments*/   L"",
  /*name_idents_and_optional_assignments*/   L"",
  /*name_ident*/   L"",
  /*more_name_idents*/   L"",
  /*name_idents*/   L"",
  /*AUTO_name_idents_and_optional_assignments*/   L"",
  /*OWN_or_CONST_name_idents_and_optional_assignments*/   L"",
  /*EXTERNAL_name_idents_and_optional_assignments*/   L"",
  /*EXTERNAL_name_idents*/   L"",
  /*name_array_idents*/   L"",
  /*more_name_array_idents*/   L"",
  /*EXTERNAL_name_array_idents*/   L"",
  /*OWN_or_CONST_name_array_idents*/   L"",
  /*more_AUTO_name_array_idents*/   L"",
  /*AUTO_name_array_idents*/   L"",
  /*more_external_array_idents*/   L"",
  /*more_AUTO_array_idents*/   L"",
  /*EXTERNAL_array_idents*/   L"",
  /*AUTO_array_idents*/   L"",
  /*optional_scalar_assignment*/   L"",
  /*scalar_ident_and_optional_assignment*/   L"",
  /*more_scalar_idents_and_optional_assignments*/   L"",
  /*scalar_idents_and_optional_assignments*/   L"",
  /*EXTERNAL_scalar_idents_and_optional_assignments*/   L"",
  /*OWN_or_CONST_scalar_idents_and_optional_assignments*/   L"",
  /*AUTO_scalar_idents_and_optional_assignments*/   L"",
  /*EXTERNAL_scalar_ident*/   L"",
  /*EXTERNAL_scalar_idents*/   L"",
  /*more_external_scalar_idents*/   L"",
  /*more_array_data*/   L"",
  /*scalar_array_data*/   L"",
  /*optional_array_assignment*/   L"",
  /*EXTERNAL_array_ident_and_optional_assignment*/   L"",
  /*OWN_or_CONST_array_ident_and_optional_assignment*/   L"",
  /*Name_Array_Name_Declaration*/   L"",
  /*Array_Name_Declaration*/   L"",
  /*Name_Array_Declaration*/   L"",
  /*Array_Declaration*/   L"",
  /*Scalar_Name_Declaration*/   L"",
  /*Scalar_Declaration*/   L"",
  /*Data_Declaration*/   L"",
  /*Declaration*/   L"",
  /*optional_parameters*/   L"",
  /*Rt_CALL*/   L"",
  /*Fn_CALL*/   L"",
  /*Map_CALL*/   L"",
  /*Pred_CALL*/   L"",
  /*PROC_or_PROCSPEC*/   L"",
  /*ESCARRAY*/   L"",
  /*ESCREC_opt*/   L"",
  /*ESCREC*/   L"",
  /*ESC_ARRAY_or_REC*/   L"",
  /*SIGNAL*/   L"",
  /*COMMENT_TEXT*/   L"",
  /*COMMENT*/   L"",
  /*COMMENT_T*/   L" return -1; ",
  /*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"",
  /*and_IMPS*/   L"",
  /*INCL_LIST_opt*/   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"",
  /*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"",
  /*OP0*/   L"",
  /*OP1*/   L"",
  /*OP2*/   L"",
  /*OP3*/   L"",
  /*OP0_EXP*/   L"",
  /*OP1_EXP*/   L"",
  /*OP2_EXP*/   L"",
  /*OP3_EXP*/   L"",
  /*OP0_EXPS*/   L"",
  /*OP1_EXPS*/   L"",
  /*OP2_EXPS*/   L"",
  /*OP3_EXPS*/   L"",
  /*COMP2_opt*/   L"",
  /*COMP2*/   L"",
  /*COMP1*/   L"",
  /*COMP12_opt*/   L"",
  /*COMPARISON*/   L"",
  /*COMP1OS2*/   L"",
  /*SCOND*/   L"",
  /*SIGN_opt*/   L"",
  /*UOP*/   L"",
  /*UOP_opt*/   L"",
  /*EXP*/   L"",
  /*EXP2*/   L"",
  /*EXP1*/   L"",
  /*EXP0*/   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"",
  /*MORE_APPS*/   L"",
  /*APP*/   L"",
  /*rest_of_IEXP*/   L"",
  /*const_event_list*/   L"",
  /*RESLEFT_opt*/   L"",
  /*RESRIGHT_opt*/   L"",
  /*RESEXP*/   L"",
};

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

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

// P<FINAL> = ...;
  /*  6*/ COUNT_OF_ALTS    | 0x000003,
  /*  7*/ COUNT_OF_PHRASES | 0x000002,
  /*  8*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /* endofprogram */
  /*  9*/ PHRASE_TYPE      | G_T,
  /* 10*/ COUNT_OF_PHRASES | 0x000002,
  /* 11*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000001,  /* endoffile */
  /* 12*/ PHRASE_TYPE      | G_T,
  /* 13*/ COUNT_OF_PHRASES | 0x000001,
  /* 14*/ BIP_TYPE         | WHITESPACE_ALLOWED | B_EOF,

// P<STATEMENTS> = ...;
  /* 15*/ COUNT_OF_ALTS    | 0x000002,
  /* 16*/ COUNT_OF_PHRASES | 0x000002,
  /* 17*/ PHRASE_TYPE      | G_STATEMENT,
  /* 18*/ PHRASE_TYPE      | G_STATEMENTS,
  /* 19*/ COUNT_OF_PHRASES | 0x000000,

// P<STATEMENT> = ...;
  /* 20*/ COUNT_OF_ALTS    | 0x000024,
  /* 21*/ COUNT_OF_PHRASES | 0x000003,
  /* 22*/ PHRASE_TYPE      | G_Declaration,
  /* 23*/ PHRASE_TYPE      | G_T,
  /* 24*/ PHRASE_TYPE      | G_STATEMENTS,
  /* 25*/ COUNT_OF_PHRASES | 0x000003,
  /* 26*/ PHRASE_TYPE      | G_simple_label,
  /* 27*/ PHRASE_TYPE      | G_T,
  /* 28*/ PHRASE_TYPE      | G_STATEMENTS,
  /* 29*/ COUNT_OF_PHRASES | 0x000002,
  /* 30*/ PHRASE_TYPE      | G_simple_label,
  /* 31*/ PHRASE_TYPE      | G_STATEMENTS,
  /* 32*/ COUNT_OF_PHRASES | 0x000003,
  /* 33*/ PHRASE_TYPE      | G_switch_label,
  /* 34*/ PHRASE_TYPE      | G_T,
  /* 35*/ PHRASE_TYPE      | G_STATEMENTS,
  /* 36*/ COUNT_OF_PHRASES | 0x000002,
  /* 37*/ PHRASE_TYPE      | G_switch_label,
  /* 38*/ PHRASE_TYPE      | G_STATEMENTS,
  /* 39*/ COUNT_OF_PHRASES | 0x000006,
  /* 40*/ PHRASE_TYPE      | G_FELSE_opt,
  /* 41*/ PHRASE_TYPE      | G_if_or_unless,
  /* 42*/ PHRASE_TYPE      | G_COND,
  /* 43*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000002,  /* start */
  /* 44*/ PHRASE_TYPE      | G_T,
  /* 45*/ PHRASE_TYPE      | G_STATEMENTS,
  /* 46*/ COUNT_OF_PHRASES | 0x000007,
  /* 47*/ PHRASE_TYPE      | G_FELSE_opt,
  /* 48*/ PHRASE_TYPE      | G_if_or_unless,
  /* 49*/ PHRASE_TYPE      | G_COND,
  /* 50*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000003,  /* then */
  /* 51*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000002,  /* start */
  /* 52*/ PHRASE_TYPE      | G_T,
  /* 53*/ PHRASE_TYPE      | G_STATEMENTS,
  /* 54*/ COUNT_OF_PHRASES | 0x000008,
  /* 55*/ PHRASE_TYPE      | G_FELSE_opt,
  /* 56*/ PHRASE_TYPE      | G_if_or_unless,
  /* 57*/ PHRASE_TYPE      | G_COND,
  /* 58*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000003,  /* then */
  /* 59*/ PHRASE_TYPE      | G_IMP,
  /* 60*/ PHRASE_TYPE      | G_else_final_IMP_opt,
  /* 61*/ PHRASE_TYPE      | G_T,
  /* 62*/ PHRASE_TYPE      | G_STATEMENTS,
  /* 63*/ COUNT_OF_PHRASES | 0x000005,
  /* 64*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000004,  /* finish */
  /* 65*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000005,  /* else */
  /* 66*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000002,  /* start */
  /* 67*/ PHRASE_TYPE      | G_T,
  /* 68*/ PHRASE_TYPE      | G_STATEMENTS,
  /* 69*/ COUNT_OF_PHRASES | 0x000005,
  /* 70*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000004,  /* finish */
  /* 71*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000005,  /* else */
  /* 72*/ PHRASE_TYPE      | G_IMP,
  /* 73*/ PHRASE_TYPE      | G_T,
  /* 74*/ PHRASE_TYPE      | G_STATEMENTS,
  /* 75*/ COUNT_OF_PHRASES | 0x000003,
  /* 76*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000005,  /* else */
  /* 77*/ PHRASE_TYPE      | G_T,
  /* 78*/ PHRASE_TYPE      | G_STATEMENTS,
  /* 79*/ COUNT_OF_PHRASES | 0x000005,
  /* 80*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000005,  /* else */
  /* 81*/ PHRASE_TYPE      | G_if_or_unless,
  /* 82*/ PHRASE_TYPE      | G_COND,
  /* 83*/ PHRASE_TYPE      | G_T,
  /* 84*/ PHRASE_TYPE      | G_STATEMENTS,
  /* 85*/ COUNT_OF_PHRASES | 0x000008,
  /* 86*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000005,  /* else */
  /* 87*/ PHRASE_TYPE      | G_if_or_unless,
  /* 88*/ PHRASE_TYPE      | G_COND,
  /* 89*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000003,  /* then */
  /* 90*/ PHRASE_TYPE      | G_IMP,
  /* 91*/ PHRASE_TYPE      | G_else_if_unless_XIMP_opt,
  /* 92*/ PHRASE_TYPE      | G_T,
  /* 93*/ PHRASE_TYPE      | G_STATEMENTS,
  /* 94*/ COUNT_OF_PHRASES | 0x000003,
  /* 95*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000004,  /* finish */
  /* 96*/ PHRASE_TYPE      | G_T,
  /* 97*/ PHRASE_TYPE      | G_STATEMENTS,
  /* 98*/ COUNT_OF_PHRASES | 0x000003,
  /* 99*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000006,  /* begin */
  /*100*/ PHRASE_TYPE      | G_T,
  /*101*/ PHRASE_TYPE      | G_STATEMENTS,
  /*102*/ COUNT_OF_PHRASES | 0x000004,
  /*103*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000007,  /* program */
  /*104*/ PHRASE_TYPE      | G_IDENT,
  /*105*/ PHRASE_TYPE      | G_T,
  /*106*/ PHRASE_TYPE      | G_STATEMENTS,
  /*107*/ COUNT_OF_PHRASES | 0x000003,
  /*108*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000008,  /* list */
  /*109*/ PHRASE_TYPE      | G_T,
  /*110*/ PHRASE_TYPE      | G_STATEMENTS,
  /*111*/ COUNT_OF_PHRASES | 0x000003,
  /*112*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000009,  /* endofperm */
  /*113*/ PHRASE_TYPE      | G_T,
  /*114*/ PHRASE_TYPE      | G_STATEMENTS,
  /*115*/ COUNT_OF_PHRASES | 0x000003,
  /*116*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00000a,  /* endoflist */
  /*117*/ PHRASE_TYPE      | G_T,
  /*118*/ PHRASE_TYPE      | G_STATEMENTS,
  /*119*/ COUNT_OF_PHRASES | 0x000003,
  /*120*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00000b,  /* end */
  /*121*/ PHRASE_TYPE      | G_T,
  /*122*/ PHRASE_TYPE      | G_STATEMENTS,
  /*123*/ COUNT_OF_PHRASES | 0x000003,
  /*124*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00000c,  /* cycle */
  /*125*/ PHRASE_TYPE      | G_T,
  /*126*/ PHRASE_TYPE      | G_STATEMENTS,
  /*127*/ COUNT_OF_PHRASES | 0x000004,
  /*128*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00000c,  /* cycle */
  /*129*/ PHRASE_TYPE      | G_SEQ,
  /*130*/ PHRASE_TYPE      | G_T,
  /*131*/ PHRASE_TYPE      | G_STATEMENTS,
  /*132*/ COUNT_OF_PHRASES | 0x000004,
  /*133*/ PHRASE_TYPE      | G_wh_for,
  /*134*/ PHRASE_TYPE      | G_cycle_IMP,
  /*135*/ PHRASE_TYPE      | G_T,
  /*136*/ PHRASE_TYPE      | G_STATEMENTS,
  /*137*/ COUNT_OF_PHRASES | 0x000003,
  /*138*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00000d,  /* repeat */
  /*139*/ PHRASE_TYPE      | G_T,
  /*140*/ PHRASE_TYPE      | G_STATEMENTS,
  /*141*/ COUNT_OF_PHRASES | 0x000005,
  /*142*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00000d,  /* repeat */
  /*143*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00000e,  /* until */
  /*144*/ PHRASE_TYPE      | G_COND,
  /*145*/ PHRASE_TYPE      | G_T,
  /*146*/ PHRASE_TYPE      | G_STATEMENTS,
  /*147*/ COUNT_OF_PHRASES | 0x000005,
  /*148*/ PHRASE_TYPE      | G_on_event,
  /*149*/ PHRASE_TYPE      | G_event_list_def,
  /*150*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000002,  /* start */
  /*151*/ PHRASE_TYPE      | G_T,
  /*152*/ PHRASE_TYPE      | G_STATEMENTS,
  /*153*/ COUNT_OF_PHRASES | 0x000004,
  /*154*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00000f,  /* control */
  /*155*/ PHRASE_TYPE      | G_IEXP,
  /*156*/ PHRASE_TYPE      | G_T,
  /*157*/ PHRASE_TYPE      | G_STATEMENTS,
  /*158*/ COUNT_OF_PHRASES | 0x000004,
  /*159*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000010,  /* diagnose */
  /*160*/ PHRASE_TYPE      | G_IEXP,
  /*161*/ PHRASE_TYPE      | G_T,
  /*162*/ PHRASE_TYPE      | G_STATEMENTS,
  /*163*/ COUNT_OF_PHRASES | 0x000005,
  /*164*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002a,  /* '*' */
  /*165*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*166*/ PHRASE_TYPE      | G_IEXP,
  /*167*/ PHRASE_TYPE      | G_T,
  /*168*/ PHRASE_TYPE      | G_STATEMENTS,
  /*169*/ COUNT_OF_PHRASES | 0x000003,
  /*170*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002a,  /* '*' */
  /*171*/ PHRASE_TYPE      | G_T,
  /*172*/ PHRASE_TYPE      | G_STATEMENTS,
  /*173*/ COUNT_OF_PHRASES | 0x000006,
  /*174*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000011,  /* include */
  /*175*/ PHRASE_TYPE      | GUARD_PHRASE       | G_dq,
  /*176*/ PHRASE_TYPE      | G_CONST,
  /*177*/ PHRASE_TYPE      | G_INCL_LIST_opt,
  /*178*/ PHRASE_TYPE      | G_T,
  /*179*/ PHRASE_TYPE      | G_STATEMENTS,
  /*180*/ COUNT_OF_PHRASES | 0x000003,
  /*181*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000012,  /* realslong */
  /*182*/ PHRASE_TYPE      | G_T,
  /*183*/ PHRASE_TYPE      | G_STATEMENTS,
  /*184*/ COUNT_OF_PHRASES | 0x000003,
  /*185*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000013,  /* realsnormal */
  /*186*/ PHRASE_TYPE      | G_T,
  /*187*/ PHRASE_TYPE      | G_STATEMENTS,
  /*188*/ COUNT_OF_PHRASES | 0x000004,
  /*189*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000014,  /* option */
  /*190*/ PHRASE_TYPE      | G_OCONST,
  /*191*/ PHRASE_TYPE      | G_T,
  /*192*/ PHRASE_TYPE      | G_STATEMENTS,
  /*193*/ COUNT_OF_PHRASES | 0x000003,
  /*194*/ PHRASE_TYPE      | G_IMP,
  /*195*/ PHRASE_TYPE      | G_iu_while_until_for_T,
  /*196*/ PHRASE_TYPE      | G_STATEMENTS,
  /*197*/ COUNT_OF_PHRASES | 0x000002,
  /*198*/ PHRASE_TYPE      | G_COMMENT_T,
  /*199*/ PHRASE_TYPE      | G_STATEMENTS,

// P<IDENT> = ...;
  /*200*/ COUNT_OF_ALTS    | 0x000001,
  /*201*/ COUNT_OF_PHRASES | 0x000002,
  /*202*/ PHRASE_TYPE      | NEGATED_PHRASE     | G_CONST,
  /*203*/ REGEXP_TYPE      | WHITESPACE_ALLOWED | 0x000000,  /* ^[A-Z][A-Z0-9 ]* */

// P<DeepBase> = ...;
  /*204*/ COUNT_OF_ALTS    | 0x000002,
  /*205*/ COUNT_OF_PHRASES | 0x000003,
  /*206*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00005f,  /* '_' */
  /*207*/ REGEXP_TYPE      | WHITESPACE_ALLOWED | 0x000001,  /* ^[0-9A-Z][0-9A-Z ]* */
  /*208*/ PHRASE_TYPE      | G_DeepBase,
  /*209*/ COUNT_OF_PHRASES | 0x000000,

// P<Based_Const> = ...;
  /*210*/ COUNT_OF_ALTS    | 0x000001,
  /*211*/ COUNT_OF_PHRASES | 0x000003,
  /*212*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00005f,  /* '_' */
  /*213*/ REGEXP_TYPE      | WHITESPACE_ALLOWED | 0x000001,  /* ^[0-9A-Z][0-9A-Z ]* */
  /*214*/ PHRASE_TYPE      | G_DeepBase,

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

// P<CharConst> = ...;
  /*218*/ COUNT_OF_ALTS    | 0x000003,
  /*219*/ COUNT_OF_PHRASES | 0x000001,
  /*220*/ REGEXP_TYPE      | WHITESPACE_ALLOWED | 0x000003,  /* ^'''' */
  /*221*/ COUNT_OF_PHRASES | 0x000001,
  /*222*/ REGEXP_TYPE      | WHITESPACE_ALLOWED | 0x000004,  /* ^'' */
  /*223*/ COUNT_OF_PHRASES | 0x000001,
  /*224*/ REGEXP_TYPE      | WHITESPACE_ALLOWED | 0x000005,  /* ^'.' */

// P<OptExponent> = ...;
  /*225*/ COUNT_OF_ALTS    | 0x000002,
  /*226*/ COUNT_OF_PHRASES | 0x000002,
  /*227*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000040,  /* '@' */
  /*228*/ PHRASE_TYPE      | G_Num,
  /*229*/ COUNT_OF_PHRASES | 0x000000,

// P<OptDecimal> = ...;
  /*230*/ COUNT_OF_ALTS    | 0x000002,
  /*231*/ COUNT_OF_PHRASES | 0x000002,
  /*232*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002e,  /* '.' */
  /*233*/ PHRASE_TYPE      | G_Num,
  /*234*/ COUNT_OF_PHRASES | 0x000000,

// P<Base_or_Float> = ...;
  /*235*/ COUNT_OF_ALTS    | 0x000002,
  /*236*/ COUNT_OF_PHRASES | 0x000001,
  /*237*/ PHRASE_TYPE      | G_Based_Const,
  /*238*/ COUNT_OF_PHRASES | 0x000002,
  /*239*/ PHRASE_TYPE      | G_OptDecimal,
  /*240*/ PHRASE_TYPE      | G_OptExponent,

// P<Num> = ...;
  /*241*/ COUNT_OF_ALTS    | 0x000001,
  /*242*/ COUNT_OF_PHRASES | 0x000001,
  /*243*/ REGEXP_TYPE      | WHITESPACE_ALLOWED | 0x000006,  /* ^[0-9][0-9 ]* */

// P<CONST> = ...;
  /*244*/ COUNT_OF_ALTS    | 0x000004,
  /*245*/ COUNT_OF_PHRASES | 0x000002,
  /*246*/ PHRASE_TYPE      | G_Num,
  /*247*/ PHRASE_TYPE      | G_Base_or_Float,
  /*248*/ COUNT_OF_PHRASES | 0x000001,
  /*249*/ PHRASE_TYPE      | G_CharConst,
  /*250*/ COUNT_OF_PHRASES | 0x000001,
  /*251*/ PHRASE_TYPE      | G_ALIASTEXT,
  /*252*/ COUNT_OF_PHRASES | 0x000002,
  /*253*/ REGEXP_TYPE      | WHITESPACE_ALLOWED | 0x000007,  /* ^[MBKXR] */
  /*254*/ PHRASE_TYPE      | G_BigCharConst,

// P<stringchars> = ...;
  /*255*/ COUNT_OF_ALTS    | 0x000003,
  /*256*/ COUNT_OF_PHRASES | 0x000003,
  /*257*/ PHRASE_TYPE      | G_dq,
  /*258*/ PHRASE_TYPE      | G_dq,
  /*259*/ PHRASE_TYPE      | G_stringchars,
  /*260*/ COUNT_OF_PHRASES | 0x000003,
  /*261*/ PHRASE_TYPE      | NEGATED_PHRASE     | G_dq,
  /*262*/ PHRASE_TYPE      | G_any,
  /*263*/ PHRASE_TYPE      | G_stringchars,
  /*264*/ COUNT_OF_PHRASES | 0x000000,

// P<ALIASTEXT> = ...;
  /*265*/ COUNT_OF_ALTS    | 0x000001,
  /*266*/ COUNT_OF_PHRASES | 0x000003,
  /*267*/ PHRASE_TYPE      | G_dq,
  /*268*/ PHRASE_TYPE      | G_stringchars,
  /*269*/ PHRASE_TYPE      | G_dq,

// P<V> = ...;
  /*270*/ COUNT_OF_ALTS    | 0x000001,
  /*271*/ COUNT_OF_PHRASES | 0x000002,
  /*272*/ PHRASE_TYPE      | G_IDENT,
  /*273*/ PHRASE_TYPE      | G_ESC_ARRAY_or_REC,

// P<N> = ...;
  /*274*/ COUNT_OF_ALTS    | 0x000001,
  /*275*/ COUNT_OF_PHRASES | 0x000002,
  /*276*/ PHRASE_TYPE      | G_IDENT,
  /*277*/ PHRASE_TYPE      | G_ESC_ARRAY_or_REC,

// P<FM> = ...;
  /*278*/ COUNT_OF_ALTS    | 0x000001,
  /*279*/ COUNT_OF_PHRASES | 0x000002,
  /*280*/ PHRASE_TYPE      | G_IDENT,
  /*281*/ PHRASE_TYPE      | G_ESC_ARRAY_or_REC,

// P<A> = ...;
  /*282*/ COUNT_OF_ALTS    | 0x000001,
  /*283*/ COUNT_OF_PHRASES | 0x000002,
  /*284*/ PHRASE_TYPE      | G_IDENT,
  /*285*/ PHRASE_TYPE      | G_ESC_ARRAY_or_REC,

// P<AN> = ...;
  /*286*/ COUNT_OF_ALTS    | 0x000001,
  /*287*/ COUNT_OF_PHRASES | 0x000002,
  /*288*/ PHRASE_TYPE      | G_IDENT,
  /*289*/ PHRASE_TYPE      | G_ESC_ARRAY_or_REC,

// P<NA> = ...;
  /*290*/ COUNT_OF_ALTS    | 0x000001,
  /*291*/ COUNT_OF_PHRASES | 0x000002,
  /*292*/ PHRASE_TYPE      | G_IDENT,
  /*293*/ PHRASE_TYPE      | G_ESC_ARRAY_or_REC,

// P<NAN> = ...;
  /*294*/ COUNT_OF_ALTS    | 0x000001,
  /*295*/ COUNT_OF_PHRASES | 0x000002,
  /*296*/ PHRASE_TYPE      | G_IDENT,
  /*297*/ PHRASE_TYPE      | G_ESC_ARRAY_or_REC,

// P<any> = ...;
  /*298*/ COUNT_OF_ALTS    | 0x000001,
  /*299*/ COUNT_OF_PHRASES | 0x000001,
  /*300*/ REGEXP_TYPE      | WHITESPACE_ALLOWED | 0x000008,  /* ^. */

// P<NL_opt> = ...;
  /*301*/ COUNT_OF_ALTS    | 0x000002,
  /*302*/ COUNT_OF_PHRASES | 0x000002,
  /*303*/ BIP_TYPE         | B_NL,
  /*304*/ PHRASE_TYPE      | G_NL_opt,
  /*305*/ COUNT_OF_PHRASES | 0x000000,

// P<more_Ts> = ...;
  /*306*/ COUNT_OF_ALTS    | 0x000002,
  /*307*/ COUNT_OF_PHRASES | 0x000002,
  /*308*/ PHRASE_TYPE      | G_T,
  /*309*/ PHRASE_TYPE      | G_more_Ts,
  /*310*/ COUNT_OF_PHRASES | 0x000000,

// P<T> = ...;
  /*311*/ COUNT_OF_ALTS    | 0x000002,
  /*312*/ COUNT_OF_PHRASES | 0x000002,
  /*313*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003b,  /* ';' */
  /*314*/ PHRASE_TYPE      | G_more_Ts,
  /*315*/ COUNT_OF_PHRASES | 0x000002,
  /*316*/ BIP_TYPE         | B_NL,
  /*317*/ PHRASE_TYPE      | G_more_Ts,

// P<simple_type> = ...;
  /*318*/ COUNT_OF_ALTS    | 0x000009,
  /*319*/ COUNT_OF_PHRASES | 0x000001,
  /*320*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000015,  /* integer */
  /*321*/ COUNT_OF_PHRASES | 0x000001,
  /*322*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000016,  /* real */
  /*323*/ COUNT_OF_PHRASES | 0x000001,
  /*324*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000017,  /* byteinteger */
  /*325*/ COUNT_OF_PHRASES | 0x000001,
  /*326*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000018,  /* byte */
  /*327*/ COUNT_OF_PHRASES | 0x000001,
  /*328*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000019,  /* shortinteger */
  /*329*/ COUNT_OF_PHRASES | 0x000001,
  /*330*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00001a,  /* short */
  /*331*/ COUNT_OF_PHRASES | 0x000001,
  /*332*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00001b,  /* longinteger */
  /*333*/ COUNT_OF_PHRASES | 0x000001,
  /*334*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00001c,  /* longreal */
  /*335*/ COUNT_OF_PHRASES | 0x000001,
  /*336*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00001d,  /* long */

// P<routine_or_predicate> = ...;
  /*337*/ COUNT_OF_ALTS    | 0x000002,
  /*338*/ COUNT_OF_PHRASES | 0x000001,
  /*339*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00001e,  /* routine */
  /*340*/ COUNT_OF_PHRASES | 0x000001,
  /*341*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00001f,  /* predicate */

// P<fn_or_map> = ...;
  /*342*/ COUNT_OF_ALTS    | 0x000005,
  /*343*/ COUNT_OF_PHRASES | 0x000001,
  /*344*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000020,  /* function */
  /*345*/ COUNT_OF_PHRASES | 0x000001,
  /*346*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000021,  /* fn */
  /*347*/ COUNT_OF_PHRASES | 0x000001,
  /*348*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000022,  /* map */
  /*349*/ COUNT_OF_PHRASES | 0x000001,
  /*350*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000023,  /* namefn */
  /*351*/ COUNT_OF_PHRASES | 0x000001,
  /*352*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000024,  /* namefunction */

// P<OWN_or_CONST> = ...;
  /*353*/ COUNT_OF_ALTS    | 0x000003,
  /*354*/ COUNT_OF_PHRASES | 0x000001,
  /*355*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000025,  /* own */
  /*356*/ COUNT_OF_PHRASES | 0x000001,
  /*357*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000026,  /* constant */
  /*358*/ COUNT_OF_PHRASES | 0x000001,
  /*359*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000027,  /* const */

// P<EXTERNAL> = ...;
  /*360*/ COUNT_OF_ALTS    | 0x000005,
  /*361*/ COUNT_OF_PHRASES | 0x000001,
  /*362*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000028,  /* external */
  /*363*/ COUNT_OF_PHRASES | 0x000001,
  /*364*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000029,  /* system */
  /*365*/ COUNT_OF_PHRASES | 0x000001,
  /*366*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002a,  /* dynamic */
  /*367*/ COUNT_OF_PHRASES | 0x000001,
  /*368*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002b,  /* prim */
  /*369*/ COUNT_OF_PHRASES | 0x000001,
  /*370*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002c,  /* perm */

// P<EXTERNAL_opt> = ...;
  /*371*/ COUNT_OF_ALTS    | 0x000002,
  /*372*/ COUNT_OF_PHRASES | 0x000001,
  /*373*/ PHRASE_TYPE      | G_EXTERNAL,
  /*374*/ COUNT_OF_PHRASES | 0x000000,

// P<COMP> = ...;
  /*375*/ COUNT_OF_ALTS    | 0x000009,
  /*376*/ COUNT_OF_PHRASES | 0x000001,
  /*377*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*378*/ COUNT_OF_PHRASES | 0x000002,
  /*379*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003e,  /* '>' */
  /*380*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*381*/ COUNT_OF_PHRASES | 0x000001,
  /*382*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003e,  /* '>' */
  /*383*/ COUNT_OF_PHRASES | 0x000002,
  /*384*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003c,  /* '<' */
  /*385*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*386*/ COUNT_OF_PHRASES | 0x000001,
  /*387*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003c,  /* '<' */
  /*388*/ COUNT_OF_PHRASES | 0x000001,
  /*389*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000023,  /* '#' */
  /*390*/ COUNT_OF_PHRASES | 0x000002,
  /*391*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00005c,  /* '\' */
  /*392*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*393*/ COUNT_OF_PHRASES | 0x000002,
  /*394*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003c,  /* '<' */
  /*395*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003e,  /* '>' */
  /*396*/ COUNT_OF_PHRASES | 0x000002,
  /*397*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00007e,  /* '~' */
  /*398*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */

// P<ACOMP> = ...;
  /*399*/ COUNT_OF_ALTS    | 0x000002,
  /*400*/ COUNT_OF_PHRASES | 0x000002,
  /*401*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*402*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*403*/ COUNT_OF_PHRASES | 0x000002,
  /*404*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000023,  /* '#' */
  /*405*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000023,  /* '#' */

// P<exit_or_continue> = ...;
  /*406*/ COUNT_OF_ALTS    | 0x000002,
  /*407*/ COUNT_OF_PHRASES | 0x000001,
  /*408*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002d,  /* exit */
  /*409*/ COUNT_OF_PHRASES | 0x000001,
  /*410*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002e,  /* continue */

// P<on_event> = ...;
  /*411*/ COUNT_OF_ALTS    | 0x000002,
  /*412*/ COUNT_OF_PHRASES | 0x000001,
  /*413*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002f,  /* onevent */
  /*414*/ COUNT_OF_PHRASES | 0x000001,
  /*415*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* on */

// P<BACK> = ...;
  /*416*/ COUNT_OF_ALTS    | 0x000003,
  /*417*/ COUNT_OF_PHRASES | 0x000001,
  /*418*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000031,  /* return */
  /*419*/ COUNT_OF_PHRASES | 0x000001,
  /*420*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* true */
  /*421*/ COUNT_OF_PHRASES | 0x000001,
  /*422*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000033,  /* false */

// P<ALIAS_opt> = ...;
  /*423*/ COUNT_OF_ALTS    | 0x000002,
  /*424*/ COUNT_OF_PHRASES | 0x000002,
  /*425*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000034,  /* alias */
  /*426*/ PHRASE_TYPE      | G_ACONST,
  /*427*/ COUNT_OF_PHRASES | 0x000000,

// P<Rt_Pred_FPP> = ...;
  /*428*/ COUNT_OF_ALTS    | 0x000002,
  /*429*/ COUNT_OF_PHRASES | 0x000003,
  /*430*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*431*/ PHRASE_TYPE      | G_FPP,
  /*432*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*433*/ COUNT_OF_PHRASES | 0x000000,

// P<INDEF> = ...;
  /*434*/ COUNT_OF_ALTS    | 0x000001,
  /*435*/ COUNT_OF_PHRASES | 0x000001,
  /*436*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002a,  /* '*' */

// P<INDEF_or_IEXP> = ...;
  /*437*/ COUNT_OF_ALTS    | 0x000002,
  /*438*/ COUNT_OF_PHRASES | 0x000001,
  /*439*/ PHRASE_TYPE      | G_INDEF,
  /*440*/ COUNT_OF_PHRASES | 0x000001,
  /*441*/ PHRASE_TYPE      | G_IEXP,

// P<bracketed_INDEF_or_IEXP> = ...;
  /*442*/ COUNT_OF_ALTS    | 0x000001,
  /*443*/ COUNT_OF_PHRASES | 0x000003,
  /*444*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*445*/ PHRASE_TYPE      | G_INDEF_or_IEXP,
  /*446*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */

// P<optional_initialiser_repeat_count> = ...;
  /*447*/ COUNT_OF_ALTS    | 0x000003,
  /*448*/ COUNT_OF_PHRASES | 0x000003,
  /*449*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*450*/ PHRASE_TYPE      | G_IEXP,
  /*451*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*452*/ COUNT_OF_PHRASES | 0x000003,
  /*453*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*454*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002a,  /* '*' */
  /*455*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*456*/ COUNT_OF_PHRASES | 0x000000,

// P<initialiser_item_with_optional_repeat_count> = ...;
  /*457*/ COUNT_OF_ALTS    | 0x000001,
  /*458*/ COUNT_OF_PHRASES | 0x000002,
  /*459*/ PHRASE_TYPE      | G_IEXP,
  /*460*/ PHRASE_TYPE      | G_optional_initialiser_repeat_count,

// P<L> = ...;
  /*461*/ COUNT_OF_ALTS    | 0x000001,
  /*462*/ COUNT_OF_PHRASES | 0x000001,
  /*463*/ PHRASE_TYPE      | G_IDENT,

// P<SWID> = ...;
  /*464*/ COUNT_OF_ALTS    | 0x000001,
  /*465*/ COUNT_OF_PHRASES | 0x000001,
  /*466*/ PHRASE_TYPE      | G_IDENT,

// P<rest_of_SWIDS> = ...;
  /*467*/ COUNT_OF_ALTS    | 0x000002,
  /*468*/ COUNT_OF_PHRASES | 0x000004,
  /*469*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*470*/ PHRASE_TYPE      | G_NL_opt,
  /*471*/ PHRASE_TYPE      | G_SWID,
  /*472*/ PHRASE_TYPE      | G_rest_of_SWIDS,
  /*473*/ COUNT_OF_PHRASES | 0x000000,

// P<SWIDS> = ...;
  /*474*/ COUNT_OF_ALTS    | 0x000001,
  /*475*/ COUNT_OF_PHRASES | 0x000002,
  /*476*/ PHRASE_TYPE      | G_SWID,
  /*477*/ PHRASE_TYPE      | G_rest_of_SWIDS,

// P<rest_of_SWDEFS> = ...;
  /*478*/ COUNT_OF_ALTS    | 0x000002,
  /*479*/ COUNT_OF_PHRASES | 0x000004,
  /*480*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*481*/ PHRASE_TYPE      | G_NL_opt,
  /*482*/ PHRASE_TYPE      | G_SWDEFS,
  /*483*/ PHRASE_TYPE      | G_rest_of_SWDEFS,
  /*484*/ COUNT_OF_PHRASES | 0x000000,

// P<SWDEFS> = ...;
  /*485*/ COUNT_OF_ALTS    | 0x000001,
  /*486*/ COUNT_OF_PHRASES | 0x000002,
  /*487*/ PHRASE_TYPE      | G_SWDEF,
  /*488*/ PHRASE_TYPE      | G_rest_of_SWDEFS,

// P<SWDEF> = ...;
  /*489*/ COUNT_OF_ALTS    | 0x000001,
  /*490*/ COUNT_OF_PHRASES | 0x000002,
  /*491*/ PHRASE_TYPE      | G_SWIDS,
  /*492*/ PHRASE_TYPE      | G_CONST_BOUNDS,

// P<simple_label> = ...;
  /*493*/ COUNT_OF_ALTS    | 0x000001,
  /*494*/ COUNT_OF_PHRASES | 0x000002,
  /*495*/ PHRASE_TYPE      | G_L,
  /*496*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003a,  /* ':' */

// P<switch_label> = ...;
  /*497*/ COUNT_OF_ALTS    | 0x000001,
  /*498*/ COUNT_OF_PHRASES | 0x000003,
  /*499*/ PHRASE_TYPE      | G_S,
  /*500*/ PHRASE_TYPE      | G_bracketed_INDEF_or_IEXP,
  /*501*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003a,  /* ':' */

// P<S> = ...;
  /*502*/ COUNT_OF_ALTS    | 0x000001,
  /*503*/ COUNT_OF_PHRASES | 0x000001,
  /*504*/ PHRASE_TYPE      | G_IDENT,

// P<jump_destination> = ...;
  /*505*/ COUNT_OF_ALTS    | 0x000002,
  /*506*/ COUNT_OF_PHRASES | 0x000004,
  /*507*/ PHRASE_TYPE      | G_S,
  /*508*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*509*/ PHRASE_TYPE      | G_EXP,
  /*510*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*511*/ COUNT_OF_PHRASES | 0x000001,
  /*512*/ PHRASE_TYPE      | G_L,

// P<Star_or_IEXP> = ...;
  /*513*/ COUNT_OF_ALTS    | 0x000002,
  /*514*/ COUNT_OF_PHRASES | 0x000001,
  /*515*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002a,  /* '*' */
  /*516*/ COUNT_OF_PHRASES | 0x000001,
  /*517*/ PHRASE_TYPE      | G_IEXP,

// P<FM_or_Star> = ...;
  /*518*/ COUNT_OF_ALTS    | 0x000002,
  /*519*/ COUNT_OF_PHRASES | 0x000001,
  /*520*/ PHRASE_TYPE      | G_FM,
  /*521*/ COUNT_OF_PHRASES | 0x000001,
  /*522*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002a,  /* '*' */

// P<result_types> = ...;
  /*523*/ COUNT_OF_ALTS    | 0x000003,
  /*524*/ COUNT_OF_PHRASES | 0x000001,
  /*525*/ PHRASE_TYPE      | G_simple_type,
  /*526*/ COUNT_OF_PHRASES | 0x000004,
  /*527*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000035,  /* string */
  /*528*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*529*/ PHRASE_TYPE      | G_Star_or_IEXP,
  /*530*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*531*/ COUNT_OF_PHRASES | 0x000004,
  /*532*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000036,  /* record */
  /*533*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*534*/ PHRASE_TYPE      | G_FM_or_Star,
  /*535*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */

// P<scalar_declaration_types> = ...;
  /*536*/ COUNT_OF_ALTS    | 0x000003,
  /*537*/ COUNT_OF_PHRASES | 0x000001,
  /*538*/ PHRASE_TYPE      | G_simple_type,
  /*539*/ COUNT_OF_PHRASES | 0x000004,
  /*540*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000035,  /* string */
  /*541*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*542*/ PHRASE_TYPE      | G_IEXP,
  /*543*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*544*/ COUNT_OF_PHRASES | 0x000004,
  /*545*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000036,  /* record */
  /*546*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*547*/ PHRASE_TYPE      | G_FM,
  /*548*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */

// P<name_declaration_types> = ...;
  /*549*/ COUNT_OF_ALTS    | 0x000003,
  /*550*/ COUNT_OF_PHRASES | 0x000002,
  /*551*/ PHRASE_TYPE      | G_simple_type,
  /*552*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000037,  /* name */
  /*553*/ COUNT_OF_PHRASES | 0x000005,
  /*554*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000035,  /* string */
  /*555*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*556*/ PHRASE_TYPE      | G_Star_or_IEXP,
  /*557*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*558*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000037,  /* name */
  /*559*/ COUNT_OF_PHRASES | 0x000005,
  /*560*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000036,  /* record */
  /*561*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*562*/ PHRASE_TYPE      | G_FM_or_Star,
  /*563*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*564*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000037,  /* name */

// P<Rt_Fn_Map_Pred_DECL> = ...;
  /*565*/ COUNT_OF_ALTS    | 0x000002,
  /*566*/ COUNT_OF_PHRASES | 0x000001,
  /*567*/ PHRASE_TYPE      | G_routine_or_predicate,
  /*568*/ COUNT_OF_PHRASES | 0x000002,
  /*569*/ PHRASE_TYPE      | G_result_types,
  /*570*/ PHRASE_TYPE      | G_fn_or_map,

// P<SPEC_opt> = ...;
  /*571*/ COUNT_OF_ALTS    | 0x000002,
  /*572*/ COUNT_OF_PHRASES | 0x000001,
  /*573*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000038,  /* spec */
  /*574*/ COUNT_OF_PHRASES | 0x000000,

// P<ARRAYNAME> = ...;
  /*575*/ COUNT_OF_ALTS    | 0x000002,
  /*576*/ COUNT_OF_PHRASES | 0x000002,
  /*577*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000039,  /* array */
  /*578*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000037,  /* name */
  /*579*/ COUNT_OF_PHRASES | 0x000005,
  /*580*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000039,  /* array */
  /*581*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*582*/ PHRASE_TYPE      | G_IEXP,
  /*583*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*584*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000037,  /* name */

// P<Proc_Declaration> = ...;
  /*585*/ COUNT_OF_ALTS    | 0x000001,
  /*586*/ COUNT_OF_PHRASES | 0x000007,
  /*587*/ PHRASE_TYPE      | G_EXTERNAL_opt,
  /*588*/ PHRASE_TYPE      | G_Rt_Fn_Map_Pred_DECL,
  /*589*/ PHRASE_TYPE      | G_SPEC_opt,
  /*590*/ PHRASE_TYPE      | G_PROC_or_PROCSPEC,
  /*591*/ PHRASE_TYPE      | G_IDENT,
  /*592*/ PHRASE_TYPE      | G_ALIAS_opt,
  /*593*/ PHRASE_TYPE      | G_Rt_Pred_FPP,

// P<External_Name_Array_Name_Declaration> = ...;
  /*594*/ COUNT_OF_ALTS    | 0x000002,
  /*595*/ COUNT_OF_PHRASES | 0x000005,
  /*596*/ PHRASE_TYPE      | G_EXTERNAL,
  /*597*/ PHRASE_TYPE      | G_name_declaration_types,
  /*598*/ PHRASE_TYPE      | G_ARRAYNAME,
  /*599*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000038,  /* spec */
  /*600*/ PHRASE_TYPE      | G_IDENTS,
  /*601*/ COUNT_OF_PHRASES | 0x000004,
  /*602*/ PHRASE_TYPE      | G_EXTERNAL,
  /*603*/ PHRASE_TYPE      | G_name_declaration_types,
  /*604*/ PHRASE_TYPE      | G_ARRAYNAME,
  /*605*/ PHRASE_TYPE      | G_IDENTS,

// P<External_Array_Name_Declaration> = ...;
  /*606*/ COUNT_OF_ALTS    | 0x000002,
  /*607*/ COUNT_OF_PHRASES | 0x000005,
  /*608*/ PHRASE_TYPE      | G_EXTERNAL,
  /*609*/ PHRASE_TYPE      | G_scalar_declaration_types,
  /*610*/ PHRASE_TYPE      | G_ARRAYNAME,
  /*611*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000038,  /* spec */
  /*612*/ PHRASE_TYPE      | G_IDENTS,
  /*613*/ COUNT_OF_PHRASES | 0x000004,
  /*614*/ PHRASE_TYPE      | G_EXTERNAL,
  /*615*/ PHRASE_TYPE      | G_scalar_declaration_types,
  /*616*/ PHRASE_TYPE      | G_ARRAYNAME,
  /*617*/ PHRASE_TYPE      | G_IDENTS,

// P<External_Array_Declaration> = ...;
  /*618*/ COUNT_OF_ALTS    | 0x000002,
  /*619*/ COUNT_OF_PHRASES | 0x000005,
  /*620*/ PHRASE_TYPE      | G_EXTERNAL,
  /*621*/ PHRASE_TYPE      | G_scalar_declaration_types,
  /*622*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000039,  /* array */
  /*623*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000038,  /* spec */
  /*624*/ PHRASE_TYPE      | G_EXTERNAL_array_idents,
  /*625*/ COUNT_OF_PHRASES | 0x000004,
  /*626*/ PHRASE_TYPE      | G_EXTERNAL,
  /*627*/ PHRASE_TYPE      | G_scalar_declaration_types,
  /*628*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000039,  /* array */
  /*629*/ PHRASE_TYPE      | G_EXTERNAL_array_ident_and_optional_assignment,

// P<External_Name_Array_Declaration> = ...;
  /*630*/ COUNT_OF_ALTS    | 0x000002,
  /*631*/ COUNT_OF_PHRASES | 0x000005,
  /*632*/ PHRASE_TYPE      | G_EXTERNAL,
  /*633*/ PHRASE_TYPE      | G_name_declaration_types,
  /*634*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000039,  /* array */
  /*635*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000038,  /* spec */
  /*636*/ PHRASE_TYPE      | G_EXTERNAL_name_array_idents,
  /*637*/ COUNT_OF_PHRASES | 0x000004,
  /*638*/ PHRASE_TYPE      | G_EXTERNAL,
  /*639*/ PHRASE_TYPE      | G_name_declaration_types,
  /*640*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000039,  /* array */
  /*641*/ PHRASE_TYPE      | G_EXTERNAL_name_array_idents,

// P<External_Scalar_Name_Declaration> = ...;
  /*642*/ COUNT_OF_ALTS    | 0x000003,
  /*643*/ COUNT_OF_PHRASES | 0x000004,
  /*644*/ PHRASE_TYPE      | G_EXTERNAL,
  /*645*/ PHRASE_TYPE      | G_name_declaration_types,
  /*646*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000038,  /* spec */
  /*647*/ PHRASE_TYPE      | G_EXTERNAL_name_idents,
  /*648*/ COUNT_OF_PHRASES | 0x000003,
  /*649*/ PHRASE_TYPE      | G_EXTERNAL,
  /*650*/ PHRASE_TYPE      | G_name_declaration_types,
  /*651*/ PHRASE_TYPE      | G_EXTERNAL_name_idents_and_optional_assignments,
  /*652*/ COUNT_OF_PHRASES | 0x000003,
  /*653*/ PHRASE_TYPE      | G_EXTERNAL,
  /*654*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000037,  /* name */
  /*655*/ PHRASE_TYPE      | G_EXTERNAL_name_idents_and_optional_assignments,

// P<External_Scalar_Declaration> = ...;
  /*656*/ COUNT_OF_ALTS    | 0x000002,
  /*657*/ COUNT_OF_PHRASES | 0x000004,
  /*658*/ PHRASE_TYPE      | G_EXTERNAL,
  /*659*/ PHRASE_TYPE      | G_scalar_declaration_types,
  /*660*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000038,  /* spec */
  /*661*/ PHRASE_TYPE      | G_EXTERNAL_scalar_idents,
  /*662*/ COUNT_OF_PHRASES | 0x000003,
  /*663*/ PHRASE_TYPE      | G_EXTERNAL,
  /*664*/ PHRASE_TYPE      | G_scalar_declaration_types,
  /*665*/ PHRASE_TYPE      | G_EXTERNAL_scalar_idents_and_optional_assignments,

// P<OWN_or_CONST_Name_Array_Name_Declaration> = ...;
  /*666*/ COUNT_OF_ALTS    | 0x000001,
  /*667*/ COUNT_OF_PHRASES | 0x000004,
  /*668*/ PHRASE_TYPE      | G_OWN_or_CONST,
  /*669*/ PHRASE_TYPE      | G_name_declaration_types,
  /*670*/ PHRASE_TYPE      | G_ARRAYNAME,
  /*671*/ PHRASE_TYPE      | G_IDENTS,

// P<OWN_or_CONST_Array_Name_Declaration> = ...;
  /*672*/ COUNT_OF_ALTS    | 0x000001,
  /*673*/ COUNT_OF_PHRASES | 0x000004,
  /*674*/ PHRASE_TYPE      | G_OWN_or_CONST,
  /*675*/ PHRASE_TYPE      | G_scalar_declaration_types,
  /*676*/ PHRASE_TYPE      | G_ARRAYNAME,
  /*677*/ PHRASE_TYPE      | G_IDENTS,

// P<OWN_or_CONST_Array_Declaration> = ...;
  /*678*/ COUNT_OF_ALTS    | 0x000001,
  /*679*/ COUNT_OF_PHRASES | 0x000004,
  /*680*/ PHRASE_TYPE      | G_OWN_or_CONST,
  /*681*/ PHRASE_TYPE      | G_scalar_declaration_types,
  /*682*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000039,  /* array */
  /*683*/ PHRASE_TYPE      | G_OWN_or_CONST_array_ident_and_optional_assignment,

// P<OWN_or_CONST_Name_Array_Declaration> = ...;
  /*684*/ COUNT_OF_ALTS    | 0x000001,
  /*685*/ COUNT_OF_PHRASES | 0x000004,
  /*686*/ PHRASE_TYPE      | G_OWN_or_CONST,
  /*687*/ PHRASE_TYPE      | G_name_declaration_types,
  /*688*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000039,  /* array */
  /*689*/ PHRASE_TYPE      | G_OWN_or_CONST_name_array_idents,

// P<OWN_or_CONST_Scalar_Name_Declaration> = ...;
  /*690*/ COUNT_OF_ALTS    | 0x000002,
  /*691*/ COUNT_OF_PHRASES | 0x000003,
  /*692*/ PHRASE_TYPE      | G_OWN_or_CONST,
  /*693*/ PHRASE_TYPE      | G_name_declaration_types,
  /*694*/ PHRASE_TYPE      | G_OWN_or_CONST_name_idents_and_optional_assignments,
  /*695*/ COUNT_OF_PHRASES | 0x000003,
  /*696*/ PHRASE_TYPE      | G_OWN_or_CONST,
  /*697*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000037,  /* name */
  /*698*/ PHRASE_TYPE      | G_OWN_or_CONST_name_idents_and_optional_assignments,

// P<OWN_or_CONST_Scalar_Declaration> = ...;
  /*699*/ COUNT_OF_ALTS    | 0x000001,
  /*700*/ COUNT_OF_PHRASES | 0x000003,
  /*701*/ PHRASE_TYPE      | G_OWN_or_CONST,
  /*702*/ PHRASE_TYPE      | G_scalar_declaration_types,
  /*703*/ PHRASE_TYPE      | G_OWN_or_CONST_scalar_idents_and_optional_assignments,

// P<AUTO_Name_Array_Name_Declaration> = ...;
  /*704*/ COUNT_OF_ALTS    | 0x000001,
  /*705*/ COUNT_OF_PHRASES | 0x000003,
  /*706*/ PHRASE_TYPE      | G_name_declaration_types,
  /*707*/ PHRASE_TYPE      | G_ARRAYNAME,
  /*708*/ PHRASE_TYPE      | G_IDENTS,

// P<AUTO_Array_Name_Declaration> = ...;
  /*709*/ COUNT_OF_ALTS    | 0x000001,
  /*710*/ COUNT_OF_PHRASES | 0x000003,
  /*711*/ PHRASE_TYPE      | G_scalar_declaration_types,
  /*712*/ PHRASE_TYPE      | G_ARRAYNAME,
  /*713*/ PHRASE_TYPE      | G_IDENTS,

// P<AUTO_Array_Declaration> = ...;
  /*714*/ COUNT_OF_ALTS    | 0x000001,
  /*715*/ COUNT_OF_PHRASES | 0x000003,
  /*716*/ PHRASE_TYPE      | G_scalar_declaration_types,
  /*717*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000039,  /* array */
  /*718*/ PHRASE_TYPE      | G_AUTO_array_idents,

// P<AUTO_Name_Array_Declaration> = ...;
  /*719*/ COUNT_OF_ALTS    | 0x000001,
  /*720*/ COUNT_OF_PHRASES | 0x000003,
  /*721*/ PHRASE_TYPE      | G_name_declaration_types,
  /*722*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000039,  /* array */
  /*723*/ PHRASE_TYPE      | G_AUTO_name_array_idents,

// P<AUTO_Scalar_Name_Declaration> = ...;
  /*724*/ COUNT_OF_ALTS    | 0x000002,
  /*725*/ COUNT_OF_PHRASES | 0x000002,
  /*726*/ PHRASE_TYPE      | G_name_declaration_types,
  /*727*/ PHRASE_TYPE      | G_AUTO_name_idents_and_optional_assignments,
  /*728*/ COUNT_OF_PHRASES | 0x000002,
  /*729*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000037,  /* name */
  /*730*/ PHRASE_TYPE      | G_AUTO_name_idents_and_optional_assignments,

// P<AUTO_Scalar_Declaration> = ...;
  /*731*/ COUNT_OF_ALTS    | 0x000001,
  /*732*/ COUNT_OF_PHRASES | 0x000002,
  /*733*/ PHRASE_TYPE      | G_scalar_declaration_types,
  /*734*/ PHRASE_TYPE      | G_AUTO_scalar_idents_and_optional_assignments,

// P<name> = ...;
  /*735*/ COUNT_OF_ALTS    | 0x000001,
  /*736*/ COUNT_OF_PHRASES | 0x000001,
  /*737*/ PHRASE_TYPE      | G_N,

// P<const_array_bounds> = ...;
  /*738*/ COUNT_OF_ALTS    | 0x000001,
  /*739*/ COUNT_OF_PHRASES | 0x000001,
  /*740*/ PHRASE_TYPE      | G_CONST_BOUNDS,

// P<optional_name_assignment> = ...;
  /*741*/ COUNT_OF_ALTS    | 0x000003,
  /*742*/ COUNT_OF_PHRASES | 0x000003,
  /*743*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*744*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*745*/ PHRASE_TYPE      | G_name,
  /*746*/ COUNT_OF_PHRASES | 0x000003,
  /*747*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*748*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*749*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000030,  /* '0' */
  /*750*/ COUNT_OF_PHRASES | 0x000000,

// P<name_ident_and_optional_assignment> = ...;
  /*751*/ COUNT_OF_ALTS    | 0x000001,
  /*752*/ COUNT_OF_PHRASES | 0x000002,
  /*753*/ PHRASE_TYPE      | G_IDENT,
  /*754*/ PHRASE_TYPE      | G_optional_name_assignment,

// P<more_name_idents_and_optional_assignments> = ...;
  /*755*/ COUNT_OF_ALTS    | 0x000002,
  /*756*/ COUNT_OF_PHRASES | 0x000003,
  /*757*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*758*/ PHRASE_TYPE      | G_NL_opt,
  /*759*/ PHRASE_TYPE      | G_name_idents_and_optional_assignments,
  /*760*/ COUNT_OF_PHRASES | 0x000000,

// P<name_idents_and_optional_assignments> = ...;
  /*761*/ COUNT_OF_ALTS    | 0x000001,
  /*762*/ COUNT_OF_PHRASES | 0x000002,
  /*763*/ PHRASE_TYPE      | G_name_ident_and_optional_assignment,
  /*764*/ PHRASE_TYPE      | G_more_name_idents_and_optional_assignments,

// P<name_ident> = ...;
  /*765*/ COUNT_OF_ALTS    | 0x000001,
  /*766*/ COUNT_OF_PHRASES | 0x000001,
  /*767*/ PHRASE_TYPE      | G_IDENT,

// P<more_name_idents> = ...;
  /*768*/ COUNT_OF_ALTS    | 0x000002,
  /*769*/ COUNT_OF_PHRASES | 0x000003,
  /*770*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*771*/ PHRASE_TYPE      | G_name_ident,
  /*772*/ PHRASE_TYPE      | G_more_name_idents,
  /*773*/ COUNT_OF_PHRASES | 0x000000,

// P<name_idents> = ...;
  /*774*/ COUNT_OF_ALTS    | 0x000001,
  /*775*/ COUNT_OF_PHRASES | 0x000002,
  /*776*/ PHRASE_TYPE      | G_name_ident,
  /*777*/ PHRASE_TYPE      | G_more_name_idents,

// P<AUTO_name_idents_and_optional_assignments> = ...;
  /*778*/ COUNT_OF_ALTS    | 0x000001,
  /*779*/ COUNT_OF_PHRASES | 0x000001,
  /*780*/ PHRASE_TYPE      | G_name_idents_and_optional_assignments,

// P<OWN_or_CONST_name_idents_and_optional_assignments> = ...;
  /*781*/ COUNT_OF_ALTS    | 0x000001,
  /*782*/ COUNT_OF_PHRASES | 0x000001,
  /*783*/ PHRASE_TYPE      | G_name_idents_and_optional_assignments,

// P<EXTERNAL_name_idents_and_optional_assignments> = ...;
  /*784*/ COUNT_OF_ALTS    | 0x000001,
  /*785*/ COUNT_OF_PHRASES | 0x000001,
  /*786*/ PHRASE_TYPE      | G_name_idents_and_optional_assignments,

// P<EXTERNAL_name_idents> = ...;
  /*787*/ COUNT_OF_ALTS    | 0x000001,
  /*788*/ COUNT_OF_PHRASES | 0x000001,
  /*789*/ PHRASE_TYPE      | G_name_idents,

// P<name_array_idents> = ...;
  /*790*/ COUNT_OF_ALTS    | 0x000001,
  /*791*/ COUNT_OF_PHRASES | 0x000003,
  /*792*/ PHRASE_TYPE      | G_IDENTS,
  /*793*/ PHRASE_TYPE      | G_const_array_bounds,
  /*794*/ PHRASE_TYPE      | G_more_name_array_idents,

// P<more_name_array_idents> = ...;
  /*795*/ COUNT_OF_ALTS    | 0x000002,
  /*796*/ COUNT_OF_PHRASES | 0x000003,
  /*797*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*798*/ PHRASE_TYPE      | G_NL_opt,
  /*799*/ PHRASE_TYPE      | G_name_array_idents,
  /*800*/ COUNT_OF_PHRASES | 0x000000,

// P<EXTERNAL_name_array_idents> = ...;
  /*801*/ COUNT_OF_ALTS    | 0x000001,
  /*802*/ COUNT_OF_PHRASES | 0x000001,
  /*803*/ PHRASE_TYPE      | G_name_array_idents,

// P<OWN_or_CONST_name_array_idents> = ...;
  /*804*/ COUNT_OF_ALTS    | 0x000001,
  /*805*/ COUNT_OF_PHRASES | 0x000001,
  /*806*/ PHRASE_TYPE      | G_name_array_idents,

// P<more_AUTO_name_array_idents> = ...;
  /*807*/ COUNT_OF_ALTS    | 0x000002,
  /*808*/ COUNT_OF_PHRASES | 0x000003,
  /*809*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*810*/ PHRASE_TYPE      | G_NL_opt,
  /*811*/ PHRASE_TYPE      | G_AUTO_name_array_idents,
  /*812*/ COUNT_OF_PHRASES | 0x000000,

// P<AUTO_name_array_idents> = ...;
  /*813*/ COUNT_OF_ALTS    | 0x000001,
  /*814*/ COUNT_OF_PHRASES | 0x000003,
  /*815*/ PHRASE_TYPE      | G_IDENTS,
  /*816*/ PHRASE_TYPE      | G_BPL,
  /*817*/ PHRASE_TYPE      | G_more_AUTO_name_array_idents,

// P<more_external_array_idents> = ...;
  /*818*/ COUNT_OF_ALTS    | 0x000002,
  /*819*/ COUNT_OF_PHRASES | 0x000003,
  /*820*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*821*/ PHRASE_TYPE      | G_NL_opt,
  /*822*/ PHRASE_TYPE      | G_EXTERNAL_array_idents,
  /*823*/ COUNT_OF_PHRASES | 0x000000,

// P<more_AUTO_array_idents> = ...;
  /*824*/ COUNT_OF_ALTS    | 0x000002,
  /*825*/ COUNT_OF_PHRASES | 0x000003,
  /*826*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*827*/ PHRASE_TYPE      | G_NL_opt,
  /*828*/ PHRASE_TYPE      | G_AUTO_array_idents,
  /*829*/ COUNT_OF_PHRASES | 0x000000,

// P<EXTERNAL_array_idents> = ...;
  /*830*/ COUNT_OF_ALTS    | 0x000001,
  /*831*/ COUNT_OF_PHRASES | 0x000003,
  /*832*/ PHRASE_TYPE      | G_IDENTS,
  /*833*/ PHRASE_TYPE      | G_const_array_bounds,
  /*834*/ PHRASE_TYPE      | G_more_external_array_idents,

// P<AUTO_array_idents> = ...;
  /*835*/ COUNT_OF_ALTS    | 0x000001,
  /*836*/ COUNT_OF_PHRASES | 0x000003,
  /*837*/ PHRASE_TYPE      | G_IDENTS,
  /*838*/ PHRASE_TYPE      | G_BPL,
  /*839*/ PHRASE_TYPE      | G_more_AUTO_array_idents,

// P<optional_scalar_assignment> = ...;
  /*840*/ COUNT_OF_ALTS    | 0x000002,
  /*841*/ COUNT_OF_PHRASES | 0x000002,
  /*842*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*843*/ PHRASE_TYPE      | G_IEXP,
  /*844*/ COUNT_OF_PHRASES | 0x000000,

// P<scalar_ident_and_optional_assignment> = ...;
  /*845*/ COUNT_OF_ALTS    | 0x000001,
  /*846*/ COUNT_OF_PHRASES | 0x000002,
  /*847*/ PHRASE_TYPE      | G_IDENT,
  /*848*/ PHRASE_TYPE      | G_optional_scalar_assignment,

// P<more_scalar_idents_and_optional_assignments> = ...;
  /*849*/ COUNT_OF_ALTS    | 0x000002,
  /*850*/ COUNT_OF_PHRASES | 0x000003,
  /*851*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*852*/ PHRASE_TYPE      | G_NL_opt,
  /*853*/ PHRASE_TYPE      | G_scalar_idents_and_optional_assignments,
  /*854*/ COUNT_OF_PHRASES | 0x000000,

// P<scalar_idents_and_optional_assignments> = ...;
  /*855*/ COUNT_OF_ALTS    | 0x000001,
  /*856*/ COUNT_OF_PHRASES | 0x000002,
  /*857*/ PHRASE_TYPE      | G_scalar_ident_and_optional_assignment,
  /*858*/ PHRASE_TYPE      | G_more_scalar_idents_and_optional_assignments,

// P<EXTERNAL_scalar_idents_and_optional_assignments> = ...;
  /*859*/ COUNT_OF_ALTS    | 0x000001,
  /*860*/ COUNT_OF_PHRASES | 0x000001,
  /*861*/ PHRASE_TYPE      | G_scalar_idents_and_optional_assignments,

// P<OWN_or_CONST_scalar_idents_and_optional_assignments> = ...;
  /*862*/ COUNT_OF_ALTS    | 0x000001,
  /*863*/ COUNT_OF_PHRASES | 0x000001,
  /*864*/ PHRASE_TYPE      | G_scalar_idents_and_optional_assignments,

// P<AUTO_scalar_idents_and_optional_assignments> = ...;
  /*865*/ COUNT_OF_ALTS    | 0x000001,
  /*866*/ COUNT_OF_PHRASES | 0x000001,
  /*867*/ PHRASE_TYPE      | G_scalar_idents_and_optional_assignments,

// P<EXTERNAL_scalar_ident> = ...;
  /*868*/ COUNT_OF_ALTS    | 0x000001,
  /*869*/ COUNT_OF_PHRASES | 0x000001,
  /*870*/ PHRASE_TYPE      | G_IDENT,

// P<EXTERNAL_scalar_idents> = ...;
  /*871*/ COUNT_OF_ALTS    | 0x000001,
  /*872*/ COUNT_OF_PHRASES | 0x000002,
  /*873*/ PHRASE_TYPE      | G_EXTERNAL_scalar_ident,
  /*874*/ PHRASE_TYPE      | G_more_external_scalar_idents,

// P<more_external_scalar_idents> = ...;
  /*875*/ COUNT_OF_ALTS    | 0x000002,
  /*876*/ COUNT_OF_PHRASES | 0x000003,
  /*877*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*878*/ PHRASE_TYPE      | G_NL_opt,
  /*879*/ PHRASE_TYPE      | G_EXTERNAL_scalar_idents,
  /*880*/ COUNT_OF_PHRASES | 0x000000,

// P<more_array_data> = ...;
  /*881*/ COUNT_OF_ALTS    | 0x000002,
  /*882*/ COUNT_OF_PHRASES | 0x000003,
  /*883*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*884*/ PHRASE_TYPE      | G_NL_opt,
  /*885*/ PHRASE_TYPE      | G_scalar_array_data,
  /*886*/ COUNT_OF_PHRASES | 0x000000,

// P<scalar_array_data> = ...;
  /*887*/ COUNT_OF_ALTS    | 0x000001,
  /*888*/ COUNT_OF_PHRASES | 0x000002,
  /*889*/ PHRASE_TYPE      | G_initialiser_item_with_optional_repeat_count,
  /*890*/ PHRASE_TYPE      | G_more_array_data,

// P<optional_array_assignment> = ...;
  /*891*/ COUNT_OF_ALTS    | 0x000002,
  /*892*/ COUNT_OF_PHRASES | 0x000003,
  /*893*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*894*/ PHRASE_TYPE      | G_NL_opt,
  /*895*/ PHRASE_TYPE      | G_scalar_array_data,
  /*896*/ COUNT_OF_PHRASES | 0x000000,

// P<EXTERNAL_array_ident_and_optional_assignment> = ...;
  /*897*/ COUNT_OF_ALTS    | 0x000001,
  /*898*/ COUNT_OF_PHRASES | 0x000003,
  /*899*/ PHRASE_TYPE      | G_IDENT,
  /*900*/ PHRASE_TYPE      | G_const_array_bounds,
  /*901*/ PHRASE_TYPE      | G_optional_array_assignment,

// P<OWN_or_CONST_array_ident_and_optional_assignment> = ...;
  /*902*/ COUNT_OF_ALTS    | 0x000001,
  /*903*/ COUNT_OF_PHRASES | 0x000003,
  /*904*/ PHRASE_TYPE      | G_IDENT,
  /*905*/ PHRASE_TYPE      | G_const_array_bounds,
  /*906*/ PHRASE_TYPE      | G_optional_array_assignment,

// P<Name_Array_Name_Declaration> = ...;
  /*907*/ COUNT_OF_ALTS    | 0x000003,
  /*908*/ COUNT_OF_PHRASES | 0x000001,
  /*909*/ PHRASE_TYPE      | G_External_Name_Array_Name_Declaration,
  /*910*/ COUNT_OF_PHRASES | 0x000001,
  /*911*/ PHRASE_TYPE      | G_OWN_or_CONST_Name_Array_Name_Declaration,
  /*912*/ COUNT_OF_PHRASES | 0x000001,
  /*913*/ PHRASE_TYPE      | G_AUTO_Name_Array_Name_Declaration,

// P<Array_Name_Declaration> = ...;
  /*914*/ COUNT_OF_ALTS    | 0x000003,
  /*915*/ COUNT_OF_PHRASES | 0x000001,
  /*916*/ PHRASE_TYPE      | G_External_Array_Name_Declaration,
  /*917*/ COUNT_OF_PHRASES | 0x000001,
  /*918*/ PHRASE_TYPE      | G_OWN_or_CONST_Array_Name_Declaration,
  /*919*/ COUNT_OF_PHRASES | 0x000001,
  /*920*/ PHRASE_TYPE      | G_AUTO_Array_Name_Declaration,

// P<Name_Array_Declaration> = ...;
  /*921*/ COUNT_OF_ALTS    | 0x000003,
  /*922*/ COUNT_OF_PHRASES | 0x000001,
  /*923*/ PHRASE_TYPE      | G_External_Name_Array_Declaration,
  /*924*/ COUNT_OF_PHRASES | 0x000001,
  /*925*/ PHRASE_TYPE      | G_OWN_or_CONST_Name_Array_Declaration,
  /*926*/ COUNT_OF_PHRASES | 0x000001,
  /*927*/ PHRASE_TYPE      | G_AUTO_Name_Array_Declaration,

// P<Array_Declaration> = ...;
  /*928*/ COUNT_OF_ALTS    | 0x000003,
  /*929*/ COUNT_OF_PHRASES | 0x000001,
  /*930*/ PHRASE_TYPE      | G_External_Array_Declaration,
  /*931*/ COUNT_OF_PHRASES | 0x000001,
  /*932*/ PHRASE_TYPE      | G_OWN_or_CONST_Array_Declaration,
  /*933*/ COUNT_OF_PHRASES | 0x000001,
  /*934*/ PHRASE_TYPE      | G_AUTO_Array_Declaration,

// P<Scalar_Name_Declaration> = ...;
  /*935*/ COUNT_OF_ALTS    | 0x000003,
  /*936*/ COUNT_OF_PHRASES | 0x000001,
  /*937*/ PHRASE_TYPE      | G_External_Scalar_Name_Declaration,
  /*938*/ COUNT_OF_PHRASES | 0x000001,
  /*939*/ PHRASE_TYPE      | G_OWN_or_CONST_Scalar_Name_Declaration,
  /*940*/ COUNT_OF_PHRASES | 0x000001,
  /*941*/ PHRASE_TYPE      | G_AUTO_Scalar_Name_Declaration,

// P<Scalar_Declaration> = ...;
  /*942*/ COUNT_OF_ALTS    | 0x000003,
  /*943*/ COUNT_OF_PHRASES | 0x000001,
  /*944*/ PHRASE_TYPE      | G_External_Scalar_Declaration,
  /*945*/ COUNT_OF_PHRASES | 0x000001,
  /*946*/ PHRASE_TYPE      | G_OWN_or_CONST_Scalar_Declaration,
  /*947*/ COUNT_OF_PHRASES | 0x000001,
  /*948*/ PHRASE_TYPE      | G_AUTO_Scalar_Declaration,

// P<Data_Declaration> = ...;
  /*949*/ COUNT_OF_ALTS    | 0x000006,
  /*950*/ COUNT_OF_PHRASES | 0x000001,
  /*951*/ PHRASE_TYPE      | G_Name_Array_Name_Declaration,
  /*952*/ COUNT_OF_PHRASES | 0x000001,
  /*953*/ PHRASE_TYPE      | G_Array_Name_Declaration,
  /*954*/ COUNT_OF_PHRASES | 0x000001,
  /*955*/ PHRASE_TYPE      | G_Name_Array_Declaration,
  /*956*/ COUNT_OF_PHRASES | 0x000001,
  /*957*/ PHRASE_TYPE      | G_Array_Declaration,
  /*958*/ COUNT_OF_PHRASES | 0x000001,
  /*959*/ PHRASE_TYPE      | G_Scalar_Name_Declaration,
  /*960*/ COUNT_OF_PHRASES | 0x000001,
  /*961*/ PHRASE_TYPE      | G_Scalar_Declaration,

// P<Declaration> = ...;
  /*962*/ COUNT_OF_ALTS    | 0x000006,
  /*963*/ COUNT_OF_PHRASES | 0x000001,
  /*964*/ PHRASE_TYPE      | G_Proc_Declaration,
  /*965*/ COUNT_OF_PHRASES | 0x000001,
  /*966*/ PHRASE_TYPE      | G_Data_Declaration,
  /*967*/ COUNT_OF_PHRASES | 0x000002,
  /*968*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00003a,  /* recordformatspec */
  /*969*/ PHRASE_TYPE      | G_IDENT,
  /*970*/ COUNT_OF_PHRASES | 0x000005,
  /*971*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00003b,  /* recordformat */
  /*972*/ PHRASE_TYPE      | G_IDENT,
  /*973*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*974*/ PHRASE_TYPE      | G_record_field_declarations,
  /*975*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*976*/ COUNT_OF_PHRASES | 0x000002,
  /*977*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00003c,  /* switch */
  /*978*/ PHRASE_TYPE      | G_SWDEFS,
  /*979*/ COUNT_OF_PHRASES | 0x000002,
  /*980*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00003d,  /* label */
  /*981*/ PHRASE_TYPE      | G_IDENTS,

// P<optional_parameters> = ...;
  /*982*/ COUNT_OF_ALTS    | 0x000002,
  /*983*/ COUNT_OF_PHRASES | 0x000003,
  /*984*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*985*/ PHRASE_TYPE      | G_APP,
  /*986*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*987*/ COUNT_OF_PHRASES | 0x000000,

// P<Rt_CALL> = ...;
  /*988*/ COUNT_OF_ALTS    | 0x000001,
  /*989*/ COUNT_OF_PHRASES | 0x000002,
  /*990*/ PHRASE_TYPE      | G_IDENT,
  /*991*/ PHRASE_TYPE      | G_optional_parameters,

// P<Fn_CALL> = ...;
  /*992*/ COUNT_OF_ALTS    | 0x000001,
  /*993*/ COUNT_OF_PHRASES | 0x000002,
  /*994*/ PHRASE_TYPE      | G_IDENT,
  /*995*/ PHRASE_TYPE      | G_optional_parameters,

// P<Map_CALL> = ...;
  /*996*/ COUNT_OF_ALTS    | 0x000001,
  /*997*/ COUNT_OF_PHRASES | 0x000002,
  /*998*/ PHRASE_TYPE      | G_IDENT,
  /*999*/ PHRASE_TYPE      | G_optional_parameters,

// P<Pred_CALL> = ...;
  /*1000*/ COUNT_OF_ALTS    | 0x000001,
  /*1001*/ COUNT_OF_PHRASES | 0x000002,
  /*1002*/ PHRASE_TYPE      | G_IDENT,
  /*1003*/ PHRASE_TYPE      | G_optional_parameters,

// P<PROC_or_PROCSPEC> = ...;
  /*1004*/ COUNT_OF_ALTS    | 0x000002,
  /*1005*/ COUNT_OF_PHRASES | 0x000001,
  /*1006*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_PROC,
  /*1007*/ COUNT_OF_PHRASES | 0x000001,
  /*1008*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_PROCSPEC,

// P<ESCARRAY> = ...;
  /*1009*/ COUNT_OF_ALTS    | 0x000001,
  /*1010*/ COUNT_OF_PHRASES | 0x000004,
  /*1011*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*1012*/ PHRASE_TYPE      | G_APP,
  /*1013*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*1014*/ PHRASE_TYPE      | G_ESCREC_opt,

// P<ESCREC_opt> = ...;
  /*1015*/ COUNT_OF_ALTS    | 0x000002,
  /*1016*/ COUNT_OF_PHRASES | 0x000002,
  /*1017*/ PHRASE_TYPE      | G_ESCREC,
  /*1018*/ PHRASE_TYPE      | G_ESC_ARRAY_or_REC,
  /*1019*/ COUNT_OF_PHRASES | 0x000000,

// P<ESCREC> = ...;
  /*1020*/ COUNT_OF_ALTS    | 0x000001,
  /*1021*/ COUNT_OF_PHRASES | 0x000003,
  /*1022*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00005f,  /* '_' */
  /*1023*/ PHRASE_TYPE      | G_IDENT,
  /*1024*/ PHRASE_TYPE      | G_ESC_ARRAY_or_REC,

// P<ESC_ARRAY_or_REC> = ...;
  /*1025*/ COUNT_OF_ALTS    | 0x000003,
  /*1026*/ COUNT_OF_PHRASES | 0x000001,
  /*1027*/ PHRASE_TYPE      | G_ESCARRAY,
  /*1028*/ COUNT_OF_PHRASES | 0x000001,
  /*1029*/ PHRASE_TYPE      | G_ESCREC,
  /*1030*/ COUNT_OF_PHRASES | 0x000000,

// P<SIGNAL> = ...;
  /*1031*/ COUNT_OF_ALTS    | 0x000002,
  /*1032*/ COUNT_OF_PHRASES | 0x000001,
  /*1033*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00003e,  /* signalevent */
  /*1034*/ COUNT_OF_PHRASES | 0x000001,
  /*1035*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00003f,  /* signal */

// P<COMMENT_TEXT> = ...;
  /*1036*/ COUNT_OF_ALTS    | 0x000002,
  /*1037*/ COUNT_OF_PHRASES | 0x000003,
  /*1038*/ BIP_TYPE         | NEGATED_PHRASE     | B_NL,
  /*1039*/ PHRASE_TYPE      | G_any,
  /*1040*/ PHRASE_TYPE      | G_COMMENT_TEXT,
  /*1041*/ COUNT_OF_PHRASES | 0x000000,

// P<COMMENT> = ...;
  /*1042*/ COUNT_OF_ALTS    | 0x000002,
  /*1043*/ COUNT_OF_PHRASES | 0x000001,
  /*1044*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000040,  /* comment */
  /*1045*/ COUNT_OF_PHRASES | 0x000001,
  /*1046*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000021,  /* '!' */

// P<COMMENT_T> = ...;
  /*1047*/ COUNT_OF_ALTS    | 0x000001,
  /*1048*/ COUNT_OF_PHRASES | 0x000003,
  /*1049*/ PHRASE_TYPE      | G_COMMENT,
  /*1050*/ PHRASE_TYPE      | G_COMMENT_TEXT,
  /*1051*/ PHRASE_TYPE      | G_T,

// P<LHS> = ...;
  /*1052*/ COUNT_OF_ALTS    | 0x000003,
  /*1053*/ COUNT_OF_PHRASES | 0x000002,
  /*1054*/ PHRASE_TYPE      | G_V,
  /*1055*/ PHRASE_TYPE      | G_ESC_ARRAY_or_REC,
  /*1056*/ COUNT_OF_PHRASES | 0x000002,
  /*1057*/ PHRASE_TYPE      | G_N,
  /*1058*/ PHRASE_TYPE      | G_ESC_ARRAY_or_REC,
  /*1059*/ COUNT_OF_PHRASES | 0x000002,
  /*1060*/ PHRASE_TYPE      | G_Map_CALL,
  /*1061*/ PHRASE_TYPE      | G_ESCREC,

// P<IMP> = ...;
  /*1062*/ COUNT_OF_ALTS    | 0x00000d,
  /*1063*/ COUNT_OF_PHRASES | 0x000003,
  /*1064*/ PHRASE_TYPE      | G_LHS,
  /*1065*/ PHRASE_TYPE      | G_IMP_ASSIGN,
  /*1066*/ PHRASE_TYPE      | G_and_IMPS,
  /*1067*/ COUNT_OF_PHRASES | 0x000003,
  /*1068*/ PHRASE_TYPE      | G_N,
  /*1069*/ PHRASE_TYPE      | G_N_ASS,
  /*1070*/ PHRASE_TYPE      | G_and_IMPS,
  /*1071*/ COUNT_OF_PHRASES | 0x000002,
  /*1072*/ PHRASE_TYPE      | G_Rt_CALL,
  /*1073*/ PHRASE_TYPE      | G_and_IMPS,
  /*1074*/ COUNT_OF_PHRASES | 0x000001,
  /*1075*/ PHRASE_TYPE      | G_BACK,
  /*1076*/ COUNT_OF_PHRASES | 0x000005,
  /*1077*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000041,  /* result */
  /*1078*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*1079*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*1080*/ PHRASE_TYPE      | G_NL_opt,
  /*1081*/ PHRASE_TYPE      | G_V_or_N,
  /*1082*/ COUNT_OF_PHRASES | 0x000004,
  /*1083*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000041,  /* result */
  /*1084*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*1085*/ PHRASE_TYPE      | G_NL_opt,
  /*1086*/ PHRASE_TYPE      | G_EXP,
  /*1087*/ COUNT_OF_PHRASES | 0x000001,
  /*1088*/ PHRASE_TYPE      | G_exit_or_continue,
  /*1089*/ COUNT_OF_PHRASES | 0x000006,
  /*1090*/ PHRASE_TYPE      | G_AN,
  /*1091*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*1092*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*1093*/ PHRASE_TYPE      | G_NL_opt,
  /*1094*/ PHRASE_TYPE      | G_A_or_AN,
  /*1095*/ PHRASE_TYPE      | G_and_IMPS,
  /*1096*/ COUNT_OF_PHRASES | 0x000006,
  /*1097*/ PHRASE_TYPE      | G_NAN,
  /*1098*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*1099*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*1100*/ PHRASE_TYPE      | G_NL_opt,
  /*1101*/ PHRASE_TYPE      | G_NA_or_NAN,
  /*1102*/ PHRASE_TYPE      | G_and_IMPS,
  /*1103*/ COUNT_OF_PHRASES | 0x000001,
  /*1104*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000042,  /* stop */
  /*1105*/ COUNT_OF_PHRASES | 0x000002,
  /*1106*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000043,  /* monitor */
  /*1107*/ PHRASE_TYPE      | G_and_IMPS,
  /*1108*/ COUNT_OF_PHRASES | 0x000003,
  /*1109*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002d,  /* '-' */
  /*1110*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003e,  /* '>' */
  /*1111*/ PHRASE_TYPE      | G_jump_destination,
  /*1112*/ COUNT_OF_PHRASES | 0x000003,
  /*1113*/ PHRASE_TYPE      | G_SIGNAL,
  /*1114*/ PHRASE_TYPE      | G_IEXP,
  /*1115*/ PHRASE_TYPE      | G_subevent_and_extra,

// P<EIMP> = ...;
  /*1116*/ COUNT_OF_ALTS    | 0x000003,
  /*1117*/ COUNT_OF_PHRASES | 0x000002,
  /*1118*/ PHRASE_TYPE      | G_COND,
  /*1119*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000002,  /* start */
  /*1120*/ COUNT_OF_PHRASES | 0x000003,
  /*1121*/ PHRASE_TYPE      | G_COND,
  /*1122*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000003,  /* then */
  /*1123*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000002,  /* start */
  /*1124*/ COUNT_OF_PHRASES | 0x000004,
  /*1125*/ PHRASE_TYPE      | G_COND,
  /*1126*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000003,  /* then */
  /*1127*/ PHRASE_TYPE      | G_IMP,
  /*1128*/ PHRASE_TYPE      | G_else_start_IMP_opt,

// P<XIMP> = ...;
  /*1129*/ COUNT_OF_ALTS    | 0x000002,
  /*1130*/ COUNT_OF_PHRASES | 0x000004,
  /*1131*/ PHRASE_TYPE      | G_COND,
  /*1132*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000003,  /* then */
  /*1133*/ PHRASE_TYPE      | G_IMP,
  /*1134*/ PHRASE_TYPE      | G_else_if_XIMP_opt,
  /*1135*/ COUNT_OF_PHRASES | 0x000002,
  /*1136*/ PHRASE_TYPE      | G_COND,
  /*1137*/ PHRASE_TYPE      | G_THEN_opt,

// P<FELSE_opt> = ...;
  /*1138*/ COUNT_OF_ALTS    | 0x000002,
  /*1139*/ COUNT_OF_PHRASES | 0x000002,
  /*1140*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000004,  /* finish */
  /*1141*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000005,  /* else */
  /*1142*/ COUNT_OF_PHRASES | 0x000000,

// P<if_or_unless> = ...;
  /*1143*/ COUNT_OF_ALTS    | 0x000002,
  /*1144*/ COUNT_OF_PHRASES | 0x000001,
  /*1145*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000044,  /* if */
  /*1146*/ COUNT_OF_PHRASES | 0x000001,
  /*1147*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000045,  /* unless */

// P<if_unless_XIMP> = ...;
  /*1148*/ COUNT_OF_ALTS    | 0x000002,
  /*1149*/ COUNT_OF_PHRASES | 0x000002,
  /*1150*/ PHRASE_TYPE      | G_if_or_unless,
  /*1151*/ PHRASE_TYPE      | G_XIMP,
  /*1152*/ COUNT_OF_PHRASES | 0x000000,

// P<if_XIMP_opt> = ...;
  /*1153*/ COUNT_OF_ALTS    | 0x000002,
  /*1154*/ COUNT_OF_PHRASES | 0x000002,
  /*1155*/ PHRASE_TYPE      | G_if_or_unless,
  /*1156*/ PHRASE_TYPE      | G_XIMP,
  /*1157*/ COUNT_OF_PHRASES | 0x000000,

// P<THEN_opt> = ...;
  /*1158*/ COUNT_OF_ALTS    | 0x000002,
  /*1159*/ COUNT_OF_PHRASES | 0x000001,
  /*1160*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000003,  /* then */
  /*1161*/ COUNT_OF_PHRASES | 0x000000,

// P<else_start_IMP_opt> = ...;
  /*1162*/ COUNT_OF_ALTS    | 0x000002,
  /*1163*/ COUNT_OF_PHRASES | 0x000002,
  /*1164*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000005,  /* else */
  /*1165*/ PHRASE_TYPE      | G_start_IMP,
  /*1166*/ COUNT_OF_PHRASES | 0x000000,

// P<else_if_unless_XIMP_opt> = ...;
  /*1167*/ COUNT_OF_ALTS    | 0x000002,
  /*1168*/ COUNT_OF_PHRASES | 0x000002,
  /*1169*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000005,  /* else */
  /*1170*/ PHRASE_TYPE      | G_if_unless_XIMP,
  /*1171*/ COUNT_OF_PHRASES | 0x000000,

// P<else_if_XIMP_opt> = ...;
  /*1172*/ COUNT_OF_ALTS    | 0x000002,
  /*1173*/ COUNT_OF_PHRASES | 0x000002,
  /*1174*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000005,  /* else */
  /*1175*/ PHRASE_TYPE      | G_if_XIMP_opt,
  /*1176*/ COUNT_OF_PHRASES | 0x000000,

// P<else_final_IMP_opt> = ...;
  /*1177*/ COUNT_OF_ALTS    | 0x000002,
  /*1178*/ COUNT_OF_PHRASES | 0x000002,
  /*1179*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000005,  /* else */
  /*1180*/ PHRASE_TYPE      | G_final_IMP,
  /*1181*/ COUNT_OF_PHRASES | 0x000000,

// P<start_IMP> = ...;
  /*1182*/ COUNT_OF_ALTS    | 0x000003,
  /*1183*/ COUNT_OF_PHRASES | 0x000001,
  /*1184*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000002,  /* start */
  /*1185*/ COUNT_OF_PHRASES | 0x000002,
  /*1186*/ PHRASE_TYPE      | G_if_or_unless,
  /*1187*/ PHRASE_TYPE      | G_EIMP,
  /*1188*/ COUNT_OF_PHRASES | 0x000001,
  /*1189*/ PHRASE_TYPE      | G_IMP,

// P<final_IMP> = ...;
  /*1190*/ COUNT_OF_ALTS    | 0x000003,
  /*1191*/ COUNT_OF_PHRASES | 0x000001,
  /*1192*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000002,  /* start */
  /*1193*/ COUNT_OF_PHRASES | 0x000002,
  /*1194*/ PHRASE_TYPE      | G_if_or_unless,
  /*1195*/ PHRASE_TYPE      | G_EIMP,
  /*1196*/ COUNT_OF_PHRASES | 0x000001,
  /*1197*/ PHRASE_TYPE      | G_IMP,

// P<and_IMPS> = ...;
  /*1198*/ COUNT_OF_ALTS    | 0x000002,
  /*1199*/ COUNT_OF_PHRASES | 0x000003,
  /*1200*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000046,  /* and */
  /*1201*/ PHRASE_TYPE      | G_NL_opt,
  /*1202*/ PHRASE_TYPE      | G_IMP,
  /*1203*/ COUNT_OF_PHRASES | 0x000000,

// P<INCL_LIST_opt> = ...;
  /*1204*/ COUNT_OF_ALTS    | 0x000003,
  /*1205*/ COUNT_OF_PHRASES | 0x000001,
  /*1206*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000008,  /* list */
  /*1207*/ COUNT_OF_PHRASES | 0x000001,
  /*1208*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00000a,  /* endoflist */
  /*1209*/ COUNT_OF_PHRASES | 0x000000,

// P<wh_for> = ...;
  /*1210*/ COUNT_OF_ALTS    | 0x000002,
  /*1211*/ COUNT_OF_PHRASES | 0x000002,
  /*1212*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000047,  /* while */
  /*1213*/ PHRASE_TYPE      | G_COND,
  /*1214*/ COUNT_OF_PHRASES | 0x000002,
  /*1215*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000048,  /* for */
  /*1216*/ PHRASE_TYPE      | G_SEQ,

// P<cycle_IMP> = ...;
  /*1217*/ COUNT_OF_ALTS    | 0x000002,
  /*1218*/ COUNT_OF_PHRASES | 0x000001,
  /*1219*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00000c,  /* cycle */
  /*1220*/ COUNT_OF_PHRASES | 0x000002,
  /*1221*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000003,  /* then */
  /*1222*/ PHRASE_TYPE      | G_IMP,

// P<event_list_def> = ...;
  /*1223*/ COUNT_OF_ALTS    | 0x000002,
  /*1224*/ COUNT_OF_PHRASES | 0x000001,
  /*1225*/ PHRASE_TYPE      | G_const_event_list,
  /*1226*/ COUNT_OF_PHRASES | 0x000001,
  /*1227*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002a,  /* '*' */

// P<iu_while_until_for_T> = ...;
  /*1228*/ COUNT_OF_ALTS    | 0x000005,
  /*1229*/ COUNT_OF_PHRASES | 0x000003,
  /*1230*/ PHRASE_TYPE      | G_if_or_unless,
  /*1231*/ PHRASE_TYPE      | G_COND,
  /*1232*/ PHRASE_TYPE      | G_T,
  /*1233*/ COUNT_OF_PHRASES | 0x000003,
  /*1234*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000047,  /* while */
  /*1235*/ PHRASE_TYPE      | G_COND,
  /*1236*/ PHRASE_TYPE      | G_T,
  /*1237*/ COUNT_OF_PHRASES | 0x000003,
  /*1238*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00000e,  /* until */
  /*1239*/ PHRASE_TYPE      | G_COND,
  /*1240*/ PHRASE_TYPE      | G_T,
  /*1241*/ COUNT_OF_PHRASES | 0x000003,
  /*1242*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000048,  /* for */
  /*1243*/ PHRASE_TYPE      | G_SEQ,
  /*1244*/ PHRASE_TYPE      | G_T,
  /*1245*/ COUNT_OF_PHRASES | 0x000001,
  /*1246*/ PHRASE_TYPE      | G_T,

// P<AddressOffsetOp> = ...;
  /*1247*/ COUNT_OF_ALTS    | 0x000002,
  /*1248*/ COUNT_OF_PHRASES | 0x000002,
  /*1249*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002b,  /* '+' */
  /*1250*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002b,  /* '+' */
  /*1251*/ COUNT_OF_PHRASES | 0x000002,
  /*1252*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002d,  /* '-' */
  /*1253*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002d,  /* '-' */

// P<ADDOP_SEXP_opt> = ...;
  /*1254*/ COUNT_OF_ALTS    | 0x000002,
  /*1255*/ COUNT_OF_PHRASES | 0x000002,
  /*1256*/ PHRASE_TYPE      | G_AddressOffsetOp,
  /*1257*/ PHRASE_TYPE      | G_SEXP,
  /*1258*/ COUNT_OF_PHRASES | 0x000000,

// P<A_or_AN_or_NA_or_NAN> = ...;
  /*1259*/ COUNT_OF_ALTS    | 0x000004,
  /*1260*/ COUNT_OF_PHRASES | 0x000001,
  /*1261*/ PHRASE_TYPE      | G_A,
  /*1262*/ COUNT_OF_PHRASES | 0x000001,
  /*1263*/ PHRASE_TYPE      | G_AN,
  /*1264*/ COUNT_OF_PHRASES | 0x000001,
  /*1265*/ PHRASE_TYPE      | G_NA,
  /*1266*/ COUNT_OF_PHRASES | 0x000001,
  /*1267*/ PHRASE_TYPE      | G_NAN,

// P<A_or_AN> = ...;
  /*1268*/ COUNT_OF_ALTS    | 0x000002,
  /*1269*/ COUNT_OF_PHRASES | 0x000001,
  /*1270*/ PHRASE_TYPE      | G_A,
  /*1271*/ COUNT_OF_PHRASES | 0x000001,
  /*1272*/ PHRASE_TYPE      | G_AN,

// P<NA_or_NAN> = ...;
  /*1273*/ COUNT_OF_ALTS    | 0x000002,
  /*1274*/ COUNT_OF_PHRASES | 0x000001,
  /*1275*/ PHRASE_TYPE      | G_NA,
  /*1276*/ COUNT_OF_PHRASES | 0x000001,
  /*1277*/ PHRASE_TYPE      | G_NAN,

// P<rest_of_IDENTS> = ...;
  /*1278*/ COUNT_OF_ALTS    | 0x000002,
  /*1279*/ COUNT_OF_PHRASES | 0x000004,
  /*1280*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*1281*/ PHRASE_TYPE      | G_NL_opt,
  /*1282*/ PHRASE_TYPE      | G_IDENT,
  /*1283*/ PHRASE_TYPE      | G_rest_of_IDENTS,
  /*1284*/ COUNT_OF_PHRASES | 0x000000,

// P<IDENTS> = ...;
  /*1285*/ COUNT_OF_ALTS    | 0x000001,
  /*1286*/ COUNT_OF_PHRASES | 0x000002,
  /*1287*/ PHRASE_TYPE      | G_IDENT,
  /*1288*/ PHRASE_TYPE      | G_rest_of_IDENTS,

// P<V_or_N> = ...;
  /*1289*/ COUNT_OF_ALTS    | 0x000005,
  /*1290*/ COUNT_OF_PHRASES | 0x000002,
  /*1291*/ PHRASE_TYPE      | G_V,
  /*1292*/ PHRASE_TYPE      | G_ESC_ARRAY_or_REC,
  /*1293*/ COUNT_OF_PHRASES | 0x000002,
  /*1294*/ PHRASE_TYPE      | G_N,
  /*1295*/ PHRASE_TYPE      | G_ESC_ARRAY_or_REC,
  /*1296*/ COUNT_OF_PHRASES | 0x000001,
  /*1297*/ PHRASE_TYPE      | G_Fn_CALL,
  /*1298*/ COUNT_OF_PHRASES | 0x000002,
  /*1299*/ PHRASE_TYPE      | G_Map_CALL,
  /*1300*/ PHRASE_TYPE      | G_ESCREC,
  /*1301*/ COUNT_OF_PHRASES | 0x000001,
  /*1302*/ PHRASE_TYPE      | G_CONST,

// P<extra> = ...;
  /*1303*/ COUNT_OF_ALTS    | 0x000002,
  /*1304*/ COUNT_OF_PHRASES | 0x000003,
  /*1305*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*1306*/ PHRASE_TYPE      | G_NL_opt,
  /*1307*/ PHRASE_TYPE      | G_EXP,
  /*1308*/ COUNT_OF_PHRASES | 0x000000,

// P<subevent_and_extra> = ...;
  /*1309*/ COUNT_OF_ALTS    | 0x000002,
  /*1310*/ COUNT_OF_PHRASES | 0x000004,
  /*1311*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*1312*/ PHRASE_TYPE      | G_NL_opt,
  /*1313*/ PHRASE_TYPE      | G_EXP,
  /*1314*/ PHRASE_TYPE      | G_extra,
  /*1315*/ COUNT_OF_PHRASES | 0x000000,

// P<IMP_ASSIGN> = ...;
  /*1316*/ COUNT_OF_ALTS    | 0x000003,
  /*1317*/ COUNT_OF_PHRASES | 0x000003,
  /*1318*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*1319*/ PHRASE_TYPE      | G_NL_opt,
  /*1320*/ PHRASE_TYPE      | G_EXP,
  /*1321*/ COUNT_OF_PHRASES | 0x000005,
  /*1322*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003c,  /* '<' */
  /*1323*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002d,  /* '-' */
  /*1324*/ PHRASE_TYPE      | G_NL_opt,
  /*1325*/ PHRASE_TYPE      | G_SIGN_opt,
  /*1326*/ PHRASE_TYPE      | G_EXP,
  /*1327*/ COUNT_OF_PHRASES | 0x000004,
  /*1328*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002d,  /* '-' */
  /*1329*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003e,  /* '>' */
  /*1330*/ PHRASE_TYPE      | G_NL_opt,
  /*1331*/ PHRASE_TYPE      | G_RESEXP,

// P<N_ASS> = ...;
  /*1332*/ COUNT_OF_ALTS    | 0x000002,
  /*1333*/ COUNT_OF_PHRASES | 0x000002,
  /*1334*/ PHRASE_TYPE      | G_ADDOP_SEXP_opt,
  /*1335*/ PHRASE_TYPE      | G_IMP_ASSIGN,
  /*1336*/ COUNT_OF_PHRASES | 0x000005,
  /*1337*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*1338*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*1339*/ PHRASE_TYPE      | G_NL_opt,
  /*1340*/ PHRASE_TYPE      | G_V_or_N,
  /*1341*/ PHRASE_TYPE      | G_ADDOP_SEXP_opt,

// P<rest_of_AND_COND> = ...;
  /*1342*/ COUNT_OF_ALTS    | 0x000002,
  /*1343*/ COUNT_OF_PHRASES | 0x000002,
  /*1344*/ PHRASE_TYPE      | G_AND_COND,
  /*1345*/ PHRASE_TYPE      | G_rest_of_AND_COND,
  /*1346*/ COUNT_OF_PHRASES | 0x000000,

// P<AND_COND> = ...;
  /*1347*/ COUNT_OF_ALTS    | 0x000001,
  /*1348*/ COUNT_OF_PHRASES | 0x000004,
  /*1349*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000046,  /* and */
  /*1350*/ PHRASE_TYPE      | G_NL_opt,
  /*1351*/ PHRASE_TYPE      | G_SCOND,
  /*1352*/ PHRASE_TYPE      | G_rest_of_AND_COND,

// P<rest_of_OR_COND> = ...;
  /*1353*/ COUNT_OF_ALTS    | 0x000002,
  /*1354*/ COUNT_OF_PHRASES | 0x000002,
  /*1355*/ PHRASE_TYPE      | G_OR_COND,
  /*1356*/ PHRASE_TYPE      | G_rest_of_OR_COND,
  /*1357*/ COUNT_OF_PHRASES | 0x000000,

// P<OR_COND> = ...;
  /*1358*/ COUNT_OF_ALTS    | 0x000001,
  /*1359*/ COUNT_OF_PHRASES | 0x000004,
  /*1360*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000049,  /* or */
  /*1361*/ PHRASE_TYPE      | G_NL_opt,
  /*1362*/ PHRASE_TYPE      | G_SCOND,
  /*1363*/ PHRASE_TYPE      | G_rest_of_OR_COND,

// P<rest_of_COND> = ...;
  /*1364*/ COUNT_OF_ALTS    | 0x000003,
  /*1365*/ COUNT_OF_PHRASES | 0x000001,
  /*1366*/ PHRASE_TYPE      | G_AND_COND,
  /*1367*/ COUNT_OF_PHRASES | 0x000001,
  /*1368*/ PHRASE_TYPE      | G_OR_COND,
  /*1369*/ COUNT_OF_PHRASES | 0x000000,

// P<COND> = ...;
  /*1370*/ COUNT_OF_ALTS    | 0x000001,
  /*1371*/ COUNT_OF_PHRASES | 0x000002,
  /*1372*/ PHRASE_TYPE      | G_SCOND,
  /*1373*/ PHRASE_TYPE      | G_rest_of_COND,

// P<OP0> = ...;
  /*1374*/ COUNT_OF_ALTS    | 0x000001,
  /*1375*/ COUNT_OF_PHRASES | 0x000001,
  /*1376*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002e,  /* '.' */

// P<OP1> = ...;
  /*1377*/ COUNT_OF_ALTS    | 0x000006,
  /*1378*/ COUNT_OF_PHRASES | 0x000002,
  /*1379*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003c,  /* '<' */
  /*1380*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003c,  /* '<' */
  /*1381*/ COUNT_OF_PHRASES | 0x000002,
  /*1382*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003e,  /* '>' */
  /*1383*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003e,  /* '>' */
  /*1384*/ COUNT_OF_PHRASES | 0x000002,
  /*1385*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00005e,  /* '^' */
  /*1386*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00005e,  /* '^' */
  /*1387*/ COUNT_OF_PHRASES | 0x000001,
  /*1388*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00005e,  /* '^' */
  /*1389*/ COUNT_OF_PHRASES | 0x000002,
  /*1390*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00005c,  /* '\' */
  /*1391*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00005c,  /* '\' */
  /*1392*/ COUNT_OF_PHRASES | 0x000001,
  /*1393*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00005c,  /* '\' */

// P<OP2> = ...;
  /*1394*/ COUNT_OF_ALTS    | 0x000004,
  /*1395*/ COUNT_OF_PHRASES | 0x000001,
  /*1396*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000026,  /* '&' */
  /*1397*/ COUNT_OF_PHRASES | 0x000001,
  /*1398*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002a,  /* '*' */
  /*1399*/ COUNT_OF_PHRASES | 0x000002,
  /*1400*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002f,  /* '/' */
  /*1401*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002f,  /* '/' */
  /*1402*/ COUNT_OF_PHRASES | 0x000001,
  /*1403*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002f,  /* '/' */

// P<OP3> = ...;
  /*1404*/ COUNT_OF_ALTS    | 0x000004,
  /*1405*/ COUNT_OF_PHRASES | 0x000001,
  /*1406*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002b,  /* '+' */
  /*1407*/ COUNT_OF_PHRASES | 0x000001,
  /*1408*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002d,  /* '-' */
  /*1409*/ COUNT_OF_PHRASES | 0x000002,
  /*1410*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000021,  /* '!' */
  /*1411*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000021,  /* '!' */
  /*1412*/ COUNT_OF_PHRASES | 0x000001,
  /*1413*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000021,  /* '!' */

// P<OP0_EXP> = ...;
  /*1414*/ COUNT_OF_ALTS    | 0x000001,
  /*1415*/ COUNT_OF_PHRASES | 0x000002,
  /*1416*/ PHRASE_TYPE      | G_OP0,
  /*1417*/ PHRASE_TYPE      | G_SEXP,

// P<OP1_EXP> = ...;
  /*1418*/ COUNT_OF_ALTS    | 0x000001,
  /*1419*/ COUNT_OF_PHRASES | 0x000002,
  /*1420*/ PHRASE_TYPE      | G_OP1,
  /*1421*/ PHRASE_TYPE      | G_EXP0,

// P<OP2_EXP> = ...;
  /*1422*/ COUNT_OF_ALTS    | 0x000001,
  /*1423*/ COUNT_OF_PHRASES | 0x000002,
  /*1424*/ PHRASE_TYPE      | G_OP2,
  /*1425*/ PHRASE_TYPE      | G_EXP1,

// P<OP3_EXP> = ...;
  /*1426*/ COUNT_OF_ALTS    | 0x000001,
  /*1427*/ COUNT_OF_PHRASES | 0x000002,
  /*1428*/ PHRASE_TYPE      | G_OP3,
  /*1429*/ PHRASE_TYPE      | G_EXP2,

// P<OP0_EXPS> = ...;
  /*1430*/ COUNT_OF_ALTS    | 0x000002,
  /*1431*/ COUNT_OF_PHRASES | 0x000002,
  /*1432*/ PHRASE_TYPE      | G_OP0_EXP,
  /*1433*/ PHRASE_TYPE      | G_OP0_EXPS,
  /*1434*/ COUNT_OF_PHRASES | 0x000000,

// P<OP1_EXPS> = ...;
  /*1435*/ COUNT_OF_ALTS    | 0x000002,
  /*1436*/ COUNT_OF_PHRASES | 0x000002,
  /*1437*/ PHRASE_TYPE      | G_OP1_EXP,
  /*1438*/ PHRASE_TYPE      | G_OP1_EXPS,
  /*1439*/ COUNT_OF_PHRASES | 0x000000,

// P<OP2_EXPS> = ...;
  /*1440*/ COUNT_OF_ALTS    | 0x000002,
  /*1441*/ COUNT_OF_PHRASES | 0x000002,
  /*1442*/ PHRASE_TYPE      | G_OP2_EXP,
  /*1443*/ PHRASE_TYPE      | G_OP2_EXPS,
  /*1444*/ COUNT_OF_PHRASES | 0x000000,

// P<OP3_EXPS> = ...;
  /*1445*/ COUNT_OF_ALTS    | 0x000002,
  /*1446*/ COUNT_OF_PHRASES | 0x000002,
  /*1447*/ PHRASE_TYPE      | G_OP3_EXP,
  /*1448*/ PHRASE_TYPE      | G_OP3_EXPS,
  /*1449*/ COUNT_OF_PHRASES | 0x000000,

// P<COMP2_opt> = ...;
  /*1450*/ COUNT_OF_ALTS    | 0x000002,
  /*1451*/ COUNT_OF_PHRASES | 0x000001,
  /*1452*/ PHRASE_TYPE      | G_COMP2,
  /*1453*/ COUNT_OF_PHRASES | 0x000000,

// P<COMP2> = ...;
  /*1454*/ COUNT_OF_ALTS    | 0x000001,
  /*1455*/ COUNT_OF_PHRASES | 0x000002,
  /*1456*/ PHRASE_TYPE      | G_COMP,
  /*1457*/ PHRASE_TYPE      | G_EXP,

// P<COMP1> = ...;
  /*1458*/ COUNT_OF_ALTS    | 0x000001,
  /*1459*/ COUNT_OF_PHRASES | 0x000002,
  /*1460*/ PHRASE_TYPE      | G_COMP,
  /*1461*/ PHRASE_TYPE      | G_EXP,

// P<COMP12_opt> = ...;
  /*1462*/ COUNT_OF_ALTS    | 0x000001,
  /*1463*/ COUNT_OF_PHRASES | 0x000002,
  /*1464*/ PHRASE_TYPE      | G_COMP1,
  /*1465*/ PHRASE_TYPE      | G_COMP2_opt,

// P<COMPARISON> = ...;
  /*1466*/ COUNT_OF_ALTS    | 0x000005,
  /*1467*/ COUNT_OF_PHRASES | 0x000002,
  /*1468*/ PHRASE_TYPE      | G_COMP1,
  /*1469*/ PHRASE_TYPE      | G_COMP2_opt,
  /*1470*/ COUNT_OF_PHRASES | 0x000002,
  /*1471*/ PHRASE_TYPE      | G_ACOMP,
  /*1472*/ PHRASE_TYPE      | G_V_or_N,
  /*1473*/ COUNT_OF_PHRASES | 0x000003,
  /*1474*/ PHRASE_TYPE      | G_ACOMP,
  /*1475*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000030,  /* '0' */
  /*1476*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_ZERO,
  /*1477*/ COUNT_OF_PHRASES | 0x000003,
  /*1478*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002d,  /* '-' */
  /*1479*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003e,  /* '>' */
  /*1480*/ PHRASE_TYPE      | G_RESEXP,
  /*1481*/ COUNT_OF_PHRASES | 0x000005,
  /*1482*/ PHRASE_TYPE      | G_OP0_EXPS,
  /*1483*/ PHRASE_TYPE      | G_OP1_EXPS,
  /*1484*/ PHRASE_TYPE      | G_OP2_EXPS,
  /*1485*/ PHRASE_TYPE      | G_OP3_EXPS,
  /*1486*/ PHRASE_TYPE      | G_COMP12_opt,

// P<COMP1OS2> = ...;
  /*1487*/ COUNT_OF_ALTS    | 0x000001,
  /*1488*/ COUNT_OF_PHRASES | 0x000003,
  /*1489*/ PHRASE_TYPE      | G_COMP,
  /*1490*/ PHRASE_TYPE      | G_EXP,
  /*1491*/ PHRASE_TYPE      | G_COMP2_opt,

// P<SCOND> = ...;
  /*1492*/ COUNT_OF_ALTS    | 0x000008,
  /*1493*/ COUNT_OF_PHRASES | 0x000002,
  /*1494*/ PHRASE_TYPE      | G_V_or_N,
  /*1495*/ PHRASE_TYPE      | G_COMPARISON,
  /*1496*/ COUNT_OF_PHRASES | 0x000003,
  /*1497*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*1498*/ PHRASE_TYPE      | G_COND,
  /*1499*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*1500*/ COUNT_OF_PHRASES | 0x000002,
  /*1501*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00004a,  /* not */
  /*1502*/ PHRASE_TYPE      | G_SCOND,
  /*1503*/ COUNT_OF_PHRASES | 0x000001,
  /*1504*/ PHRASE_TYPE      | G_Pred_CALL,
  /*1505*/ COUNT_OF_PHRASES | 0x000008,
  /*1506*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*1507*/ PHRASE_TYPE      | G_EXP,
  /*1508*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*1509*/ PHRASE_TYPE      | G_OP0_EXPS,
  /*1510*/ PHRASE_TYPE      | G_OP1_EXPS,
  /*1511*/ PHRASE_TYPE      | G_OP2_EXPS,
  /*1512*/ PHRASE_TYPE      | G_OP3_EXPS,
  /*1513*/ PHRASE_TYPE      | G_COMP1OS2,
  /*1514*/ COUNT_OF_PHRASES | 0x000003,
  /*1515*/ PHRASE_TYPE      | G_A_or_AN_or_NA_or_NAN,
  /*1516*/ PHRASE_TYPE      | G_ACOMP,
  /*1517*/ PHRASE_TYPE      | G_A_or_AN_or_NA_or_NAN,
  /*1518*/ COUNT_OF_PHRASES | 0x000004,
  /*1519*/ PHRASE_TYPE      | G_A_or_AN_or_NA_or_NAN,
  /*1520*/ PHRASE_TYPE      | G_ACOMP,
  /*1521*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000030,  /* '0' */
  /*1522*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_ZERO,
  /*1523*/ COUNT_OF_PHRASES | 0x000002,
  /*1524*/ PHRASE_TYPE      | G_EXP,
  /*1525*/ PHRASE_TYPE      | G_COMP12_opt,

// P<SIGN_opt> = ...;
  /*1526*/ COUNT_OF_ALTS    | 0x000003,
  /*1527*/ COUNT_OF_PHRASES | 0x000001,
  /*1528*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002b,  /* '+' */
  /*1529*/ COUNT_OF_PHRASES | 0x000001,
  /*1530*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002d,  /* '-' */
  /*1531*/ COUNT_OF_PHRASES | 0x000000,

// P<UOP> = ...;
  /*1532*/ COUNT_OF_ALTS    | 0x000003,
  /*1533*/ COUNT_OF_PHRASES | 0x000001,
  /*1534*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00005c,  /* '\' */
  /*1535*/ COUNT_OF_PHRASES | 0x000001,
  /*1536*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00005e,  /* '^' */
  /*1537*/ COUNT_OF_PHRASES | 0x000001,
  /*1538*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00007e,  /* '~' */

// P<UOP_opt> = ...;
  /*1539*/ COUNT_OF_ALTS    | 0x000002,
  /*1540*/ COUNT_OF_PHRASES | 0x000001,
  /*1541*/ PHRASE_TYPE      | G_UOP,
  /*1542*/ COUNT_OF_PHRASES | 0x000000,

// P<EXP> = ...;
  /*1543*/ COUNT_OF_ALTS    | 0x000003,
  /*1544*/ COUNT_OF_PHRASES | 0x000005,
  /*1545*/ PHRASE_TYPE      | G_V_or_N,
  /*1546*/ PHRASE_TYPE      | G_OP0_EXPS,
  /*1547*/ PHRASE_TYPE      | G_OP1_EXPS,
  /*1548*/ PHRASE_TYPE      | G_OP2_EXPS,
  /*1549*/ PHRASE_TYPE      | G_OP3_EXPS,
  /*1550*/ COUNT_OF_PHRASES | 0x000006,
  /*1551*/ PHRASE_TYPE      | G_UOP_opt,
  /*1552*/ PHRASE_TYPE      | G_SEXP,
  /*1553*/ PHRASE_TYPE      | G_OP0_EXPS,
  /*1554*/ PHRASE_TYPE      | G_OP1_EXPS,
  /*1555*/ PHRASE_TYPE      | G_OP2_EXPS,
  /*1556*/ PHRASE_TYPE      | G_OP3_EXPS,
  /*1557*/ COUNT_OF_PHRASES | 0x000003,
  /*1558*/ PHRASE_TYPE      | G_SIGN_opt,
  /*1559*/ PHRASE_TYPE      | G_EXP2,
  /*1560*/ PHRASE_TYPE      | G_OP3_EXPS,

// P<EXP2> = ...;
  /*1561*/ COUNT_OF_ALTS    | 0x000001,
  /*1562*/ COUNT_OF_PHRASES | 0x000004,
  /*1563*/ PHRASE_TYPE      | G_SEXP,
  /*1564*/ PHRASE_TYPE      | G_OP0_EXPS,
  /*1565*/ PHRASE_TYPE      | G_OP1_EXPS,
  /*1566*/ PHRASE_TYPE      | G_OP2_EXPS,

// P<EXP1> = ...;
  /*1567*/ COUNT_OF_ALTS    | 0x000001,
  /*1568*/ COUNT_OF_PHRASES | 0x000003,
  /*1569*/ PHRASE_TYPE      | G_SEXP,
  /*1570*/ PHRASE_TYPE      | G_OP0_EXPS,
  /*1571*/ PHRASE_TYPE      | G_OP1_EXPS,

// P<EXP0> = ...;
  /*1572*/ COUNT_OF_ALTS    | 0x000001,
  /*1573*/ COUNT_OF_PHRASES | 0x000002,
  /*1574*/ PHRASE_TYPE      | G_SEXP,
  /*1575*/ PHRASE_TYPE      | G_OP0_EXPS,

// P<SEXP> = ...;
  /*1576*/ COUNT_OF_ALTS    | 0x000004,
  /*1577*/ COUNT_OF_PHRASES | 0x000001,
  /*1578*/ PHRASE_TYPE      | G_V_or_N,
  /*1579*/ COUNT_OF_PHRASES | 0x000003,
  /*1580*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*1581*/ PHRASE_TYPE      | G_EXP,
  /*1582*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*1583*/ COUNT_OF_PHRASES | 0x000003,
  /*1584*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00007c,  /* '|' */
  /*1585*/ PHRASE_TYPE      | G_EXP,
  /*1586*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00007c,  /* '|' */
  /*1587*/ COUNT_OF_PHRASES | 0x000001,
  /*1588*/ PHRASE_TYPE      | G_IEXP,

// P<COP1> = ...;
  /*1589*/ COUNT_OF_ALTS    | 0x000001,
  /*1590*/ COUNT_OF_PHRASES | 0x000001,
  /*1591*/ PHRASE_TYPE      | G_OP1,

// P<COP2> = ...;
  /*1592*/ COUNT_OF_ALTS    | 0x000001,
  /*1593*/ COUNT_OF_PHRASES | 0x000001,
  /*1594*/ PHRASE_TYPE      | G_OP2,

// P<COP3> = ...;
  /*1595*/ COUNT_OF_ALTS    | 0x000001,
  /*1596*/ COUNT_OF_PHRASES | 0x000001,
  /*1597*/ PHRASE_TYPE      | G_OP3,

// P<CSIGN> = ...;
  /*1598*/ COUNT_OF_ALTS    | 0x000001,
  /*1599*/ COUNT_OF_PHRASES | 0x000001,
  /*1600*/ PHRASE_TYPE      | G_SIGN_opt,

// P<rest_of_IEXP2_EXPR> = ...;
  /*1601*/ COUNT_OF_ALTS    | 0x000002,
  /*1602*/ COUNT_OF_PHRASES | 0x000003,
  /*1603*/ PHRASE_TYPE      | G_COP3,
  /*1604*/ PHRASE_TYPE      | G_IEXP2,
  /*1605*/ PHRASE_TYPE      | G_rest_of_IEXP2_EXPR,
  /*1606*/ COUNT_OF_PHRASES | 0x000000,

// P<IEXP2_EXPR> = ...;
  /*1607*/ COUNT_OF_ALTS    | 0x000001,
  /*1608*/ COUNT_OF_PHRASES | 0x000002,
  /*1609*/ PHRASE_TYPE      | G_IEXP2,
  /*1610*/ PHRASE_TYPE      | G_rest_of_IEXP2_EXPR,

// P<COP3_IEXP2_optseq> = ...;
  /*1611*/ COUNT_OF_ALTS    | 0x000002,
  /*1612*/ COUNT_OF_PHRASES | 0x000003,
  /*1613*/ PHRASE_TYPE      | G_COP3,
  /*1614*/ PHRASE_TYPE      | G_IEXP2,
  /*1615*/ PHRASE_TYPE      | G_COP3_IEXP2_optseq,
  /*1616*/ COUNT_OF_PHRASES | 0x000000,

// P<COP2_IEXP1_optseq> = ...;
  /*1617*/ COUNT_OF_ALTS    | 0x000002,
  /*1618*/ COUNT_OF_PHRASES | 0x000003,
  /*1619*/ PHRASE_TYPE      | G_COP2,
  /*1620*/ PHRASE_TYPE      | G_IEXP1,
  /*1621*/ PHRASE_TYPE      | G_COP2_IEXP1_optseq,
  /*1622*/ COUNT_OF_PHRASES | 0x000000,

// P<COP1_IEXP0_optseq> = ...;
  /*1623*/ COUNT_OF_ALTS    | 0x000002,
  /*1624*/ COUNT_OF_PHRASES | 0x000003,
  /*1625*/ PHRASE_TYPE      | G_COP1,
  /*1626*/ PHRASE_TYPE      | G_IEXP0,
  /*1627*/ PHRASE_TYPE      | G_COP1_IEXP0_optseq,
  /*1628*/ COUNT_OF_PHRASES | 0x000000,

// P<CUOP_opt> = ...;
  /*1629*/ COUNT_OF_ALTS    | 0x000002,
  /*1630*/ COUNT_OF_PHRASES | 0x000001,
  /*1631*/ PHRASE_TYPE      | G_CUOP,
  /*1632*/ COUNT_OF_PHRASES | 0x000000,

// P<CUOP> = ...;
  /*1633*/ COUNT_OF_ALTS    | 0x000001,
  /*1634*/ COUNT_OF_PHRASES | 0x000001,
  /*1635*/ PHRASE_TYPE      | G_UOP,

// P<IEXP2> = ...;
  /*1636*/ COUNT_OF_ALTS    | 0x000001,
  /*1637*/ COUNT_OF_PHRASES | 0x000003,
  /*1638*/ PHRASE_TYPE      | G_IEXP0,
  /*1639*/ PHRASE_TYPE      | G_COP1_IEXP0_optseq,
  /*1640*/ PHRASE_TYPE      | G_COP2_IEXP1_optseq,

// P<IEXP1> = ...;
  /*1641*/ COUNT_OF_ALTS    | 0x000001,
  /*1642*/ COUNT_OF_PHRASES | 0x000002,
  /*1643*/ PHRASE_TYPE      | G_IEXP0,
  /*1644*/ PHRASE_TYPE      | G_COP1_IEXP0_optseq,

// P<IEXP0> = ...;
  /*1645*/ COUNT_OF_ALTS    | 0x000003,
  /*1646*/ COUNT_OF_PHRASES | 0x000001,
  /*1647*/ PHRASE_TYPE      | G_PCONST,
  /*1648*/ COUNT_OF_PHRASES | 0x000003,
  /*1649*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*1650*/ PHRASE_TYPE      | G_IEXP,
  /*1651*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*1652*/ COUNT_OF_PHRASES | 0x000003,
  /*1653*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00007c,  /* '|' */
  /*1654*/ PHRASE_TYPE      | G_IEXP,
  /*1655*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00007c,  /* '|' */

// P<IEXP> = ...;
  /*1656*/ COUNT_OF_ALTS    | 0x000002,
  /*1657*/ COUNT_OF_PHRASES | 0x000005,
  /*1658*/ PHRASE_TYPE      | G_CUOP_opt,
  /*1659*/ PHRASE_TYPE      | G_IEXP0,
  /*1660*/ PHRASE_TYPE      | G_COP1_IEXP0_optseq,
  /*1661*/ PHRASE_TYPE      | G_COP2_IEXP1_optseq,
  /*1662*/ PHRASE_TYPE      | G_COP3_IEXP2_optseq,
  /*1663*/ COUNT_OF_PHRASES | 0x000002,
  /*1664*/ PHRASE_TYPE      | G_CSIGN,
  /*1665*/ PHRASE_TYPE      | G_IEXP2_EXPR,

// P<PCONST> = ...;
  /*1666*/ COUNT_OF_ALTS    | 0x000002,
  /*1667*/ COUNT_OF_PHRASES | 0x000001,
  /*1668*/ PHRASE_TYPE      | G_CONST,
  /*1669*/ COUNT_OF_PHRASES | 0x000001,
  /*1670*/ PHRASE_TYPE      | G_V,

// P<dq> = ...;
  /*1671*/ COUNT_OF_ALTS    | 0x000001,
  /*1672*/ COUNT_OF_PHRASES | 0x000001,
  /*1673*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000022,  /* '"' */

// P<ACONST> = ...;
  /*1674*/ COUNT_OF_ALTS    | 0x000001,
  /*1675*/ COUNT_OF_PHRASES | 0x000002,
  /*1676*/ PHRASE_TYPE      | GUARD_PHRASE       | G_dq,
  /*1677*/ PHRASE_TYPE      | G_CONST,

// P<OCONST> = ...;
  /*1678*/ COUNT_OF_ALTS    | 0x000001,
  /*1679*/ COUNT_OF_PHRASES | 0x000002,
  /*1680*/ PHRASE_TYPE      | GUARD_PHRASE       | G_dq,
  /*1681*/ PHRASE_TYPE      | G_CONST,

// P<SEQ> = ...;
  /*1682*/ COUNT_OF_ALTS    | 0x000001,
  /*1683*/ COUNT_OF_PHRASES | 0x000008,
  /*1684*/ PHRASE_TYPE      | G_V_or_N,
  /*1685*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003d,  /* '=' */
  /*1686*/ PHRASE_TYPE      | G_NL_opt,
  /*1687*/ PHRASE_TYPE      | G_EXP,
  /*1688*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*1689*/ PHRASE_TYPE      | G_EXP,
  /*1690*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*1691*/ PHRASE_TYPE      | G_EXP,

// P<record_field_decl> = ...;
  /*1692*/ COUNT_OF_ALTS    | 0x000011,
  /*1693*/ COUNT_OF_PHRASES | 0x000003,
  /*1694*/ PHRASE_TYPE      | G_simple_type,
  /*1695*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000037,  /* name */
  /*1696*/ PHRASE_TYPE      | G_IDENTS,
  /*1697*/ COUNT_OF_PHRASES | 0x000004,
  /*1698*/ PHRASE_TYPE      | G_simple_type,
  /*1699*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000039,  /* array */
  /*1700*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000037,  /* name */
  /*1701*/ PHRASE_TYPE      | G_IDENTS,
  /*1702*/ COUNT_OF_PHRASES | 0x000004,
  /*1703*/ PHRASE_TYPE      | G_simple_type,
  /*1704*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000039,  /* array */
  /*1705*/ PHRASE_TYPE      | G_IDENTS,
  /*1706*/ PHRASE_TYPE      | G_RCONST_BOUNDS,
  /*1707*/ COUNT_OF_PHRASES | 0x000005,
  /*1708*/ PHRASE_TYPE      | G_simple_type,
  /*1709*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000037,  /* name */
  /*1710*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000039,  /* array */
  /*1711*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000037,  /* name */
  /*1712*/ PHRASE_TYPE      | G_IDENTS,
  /*1713*/ COUNT_OF_PHRASES | 0x000002,
  /*1714*/ PHRASE_TYPE      | G_simple_type,
  /*1715*/ PHRASE_TYPE      | G_IDENTS,
  /*1716*/ COUNT_OF_PHRASES | 0x000006,
  /*1717*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000035,  /* string */
  /*1718*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*1719*/ PHRASE_TYPE      | G_Star_or_IEXP,
  /*1720*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*1721*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000037,  /* name */
  /*1722*/ PHRASE_TYPE      | G_IDENTS,
  /*1723*/ COUNT_OF_PHRASES | 0x000007,
  /*1724*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000035,  /* string */
  /*1725*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*1726*/ PHRASE_TYPE      | G_Star_or_IEXP,
  /*1727*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*1728*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000039,  /* array */
  /*1729*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000037,  /* name */
  /*1730*/ PHRASE_TYPE      | G_IDENTS,
  /*1731*/ COUNT_OF_PHRASES | 0x000007,
  /*1732*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000035,  /* string */
  /*1733*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*1734*/ PHRASE_TYPE      | G_IEXP,
  /*1735*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*1736*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000039,  /* array */
  /*1737*/ PHRASE_TYPE      | G_IDENTS,
  /*1738*/ PHRASE_TYPE      | G_RCONST_BOUNDS,
  /*1739*/ COUNT_OF_PHRASES | 0x000008,
  /*1740*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000035,  /* string */
  /*1741*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*1742*/ PHRASE_TYPE      | G_Star_or_IEXP,
  /*1743*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*1744*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000037,  /* name */
  /*1745*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000039,  /* array */
  /*1746*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000037,  /* name */
  /*1747*/ PHRASE_TYPE      | G_IDENTS,
  /*1748*/ COUNT_OF_PHRASES | 0x000008,
  /*1749*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000035,  /* string */
  /*1750*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*1751*/ PHRASE_TYPE      | G_Star_or_IEXP,
  /*1752*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*1753*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000037,  /* name */
  /*1754*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000039,  /* array */
  /*1755*/ PHRASE_TYPE      | G_IDENTS,
  /*1756*/ PHRASE_TYPE      | G_RCONST_BOUNDS,
  /*1757*/ COUNT_OF_PHRASES | 0x000005,
  /*1758*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000035,  /* string */
  /*1759*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*1760*/ PHRASE_TYPE      | G_IEXP,
  /*1761*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*1762*/ PHRASE_TYPE      | G_IDENTS,
  /*1763*/ COUNT_OF_PHRASES | 0x000008,
  /*1764*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000036,  /* record */
  /*1765*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*1766*/ PHRASE_TYPE      | G_FM_or_Star,
  /*1767*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*1768*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000037,  /* name */
  /*1769*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000039,  /* array */
  /*1770*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000037,  /* name */
  /*1771*/ PHRASE_TYPE      | G_IDENTS,
  /*1772*/ COUNT_OF_PHRASES | 0x000008,
  /*1773*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000036,  /* record */
  /*1774*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*1775*/ PHRASE_TYPE      | G_FM_or_Star,
  /*1776*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*1777*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000037,  /* name */
  /*1778*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000039,  /* array */
  /*1779*/ PHRASE_TYPE      | G_IDENTS,
  /*1780*/ PHRASE_TYPE      | G_RCONST_BOUNDS,
  /*1781*/ COUNT_OF_PHRASES | 0x000006,
  /*1782*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000036,  /* record */
  /*1783*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*1784*/ PHRASE_TYPE      | G_FM_or_Star,
  /*1785*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*1786*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000037,  /* name */
  /*1787*/ PHRASE_TYPE      | G_IDENTS,
  /*1788*/ COUNT_OF_PHRASES | 0x000007,
  /*1789*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000036,  /* record */
  /*1790*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*1791*/ PHRASE_TYPE      | G_IDENT,
  /*1792*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*1793*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000039,  /* array */
  /*1794*/ PHRASE_TYPE      | G_IDENTS,
  /*1795*/ PHRASE_TYPE      | G_RCONST_BOUNDS,
  /*1796*/ COUNT_OF_PHRASES | 0x000005,
  /*1797*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000036,  /* record */
  /*1798*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*1799*/ PHRASE_TYPE      | G_IDENT,
  /*1800*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*1801*/ PHRASE_TYPE      | G_IDENTS,
  /*1802*/ COUNT_OF_PHRASES | 0x000004,
  /*1803*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*1804*/ PHRASE_TYPE      | G_record_field_declarations,
  /*1805*/ PHRASE_TYPE      | G_OR_record_field_declarations,
  /*1806*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */

// P<OR_record_field_declarations> = ...;
  /*1807*/ COUNT_OF_ALTS    | 0x000002,
  /*1808*/ COUNT_OF_PHRASES | 0x000003,
  /*1809*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000049,  /* or */
  /*1810*/ PHRASE_TYPE      | G_record_field_declarations,
  /*1811*/ PHRASE_TYPE      | G_OR_record_field_declarations,
  /*1812*/ COUNT_OF_PHRASES | 0x000000,

// P<more_record_field_decls> = ...;
  /*1813*/ COUNT_OF_ALTS    | 0x000002,
  /*1814*/ COUNT_OF_PHRASES | 0x000004,
  /*1815*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*1816*/ PHRASE_TYPE      | G_NL_opt,
  /*1817*/ PHRASE_TYPE      | G_record_field_decl,
  /*1818*/ PHRASE_TYPE      | G_more_record_field_decls,
  /*1819*/ COUNT_OF_PHRASES | 0x000000,

// P<record_field_declarations> = ...;
  /*1820*/ COUNT_OF_ALTS    | 0x000001,
  /*1821*/ COUNT_OF_PHRASES | 0x000003,
  /*1822*/ PHRASE_TYPE      | G_NL_opt,
  /*1823*/ PHRASE_TYPE      | G_record_field_decl,
  /*1824*/ PHRASE_TYPE      | G_more_record_field_decls,

// P<CONST_BOUNDS> = ...;
  /*1825*/ COUNT_OF_ALTS    | 0x000001,
  /*1826*/ COUNT_OF_PHRASES | 0x000005,
  /*1827*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*1828*/ PHRASE_TYPE      | G_IEXP,
  /*1829*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003a,  /* ':' */
  /*1830*/ PHRASE_TYPE      | G_IEXP,
  /*1831*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */

// P<RCONST_BOUNDS> = ...;
  /*1832*/ COUNT_OF_ALTS    | 0x000001,
  /*1833*/ COUNT_OF_PHRASES | 0x000005,
  /*1834*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*1835*/ PHRASE_TYPE      | G_IEXP,
  /*1836*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003a,  /* ':' */
  /*1837*/ PHRASE_TYPE      | G_IEXP,
  /*1838*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */

// P<BOUNDS_PAIR> = ...;
  /*1839*/ COUNT_OF_ALTS    | 0x000001,
  /*1840*/ COUNT_OF_PHRASES | 0x000003,
  /*1841*/ PHRASE_TYPE      | G_EXP,
  /*1842*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00003a,  /* ':' */
  /*1843*/ PHRASE_TYPE      | G_EXP,

// P<rest_of_BPL_LIST> = ...;
  /*1844*/ COUNT_OF_ALTS    | 0x000002,
  /*1845*/ COUNT_OF_PHRASES | 0x000003,
  /*1846*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*1847*/ PHRASE_TYPE      | G_BOUNDS_PAIR,
  /*1848*/ PHRASE_TYPE      | G_rest_of_BPL_LIST,
  /*1849*/ COUNT_OF_PHRASES | 0x000000,

// P<BPL_LIST> = ...;
  /*1850*/ COUNT_OF_ALTS    | 0x000001,
  /*1851*/ COUNT_OF_PHRASES | 0x000002,
  /*1852*/ PHRASE_TYPE      | G_BOUNDS_PAIR,
  /*1853*/ PHRASE_TYPE      | G_rest_of_BPL_LIST,

// P<BPL> = ...;
  /*1854*/ COUNT_OF_ALTS    | 0x000001,
  /*1855*/ COUNT_OF_PHRASES | 0x000003,
  /*1856*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*1857*/ PHRASE_TYPE      | G_BPL_LIST,
  /*1858*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */

// P<parameter_type> = ...;
  /*1859*/ COUNT_OF_ALTS    | 0x000003,
  /*1860*/ COUNT_OF_PHRASES | 0x000001,
  /*1861*/ PHRASE_TYPE      | G_simple_type,
  /*1862*/ COUNT_OF_PHRASES | 0x000004,
  /*1863*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000035,  /* string */
  /*1864*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*1865*/ PHRASE_TYPE      | G_Star_or_IEXP,
  /*1866*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*1867*/ COUNT_OF_PHRASES | 0x000004,
  /*1868*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000036,  /* record */
  /*1869*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*1870*/ PHRASE_TYPE      | G_FM_or_Star,
  /*1871*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */

// P<parameter_type_decl> = ...;
  /*1872*/ COUNT_OF_ALTS    | 0x000004,
  /*1873*/ COUNT_OF_PHRASES | 0x000003,
  /*1874*/ PHRASE_TYPE      | G_parameter_type,
  /*1875*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000037,  /* name */
  /*1876*/ PHRASE_TYPE      | G_ARRAYNAME,
  /*1877*/ COUNT_OF_PHRASES | 0x000002,
  /*1878*/ PHRASE_TYPE      | G_parameter_type,
  /*1879*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000037,  /* name */
  /*1880*/ COUNT_OF_PHRASES | 0x000002,
  /*1881*/ PHRASE_TYPE      | G_parameter_type,
  /*1882*/ PHRASE_TYPE      | G_ARRAYNAME,
  /*1883*/ COUNT_OF_PHRASES | 0x000001,
  /*1884*/ PHRASE_TYPE      | G_parameter_type,

// P<VDEC_or_PROC> = ...;
  /*1885*/ COUNT_OF_ALTS    | 0x000002,
  /*1886*/ COUNT_OF_PHRASES | 0x000003,
  /*1887*/ PHRASE_TYPE      | G_parameter_type_decl,
  /*1888*/ PHRASE_TYPE      | G_IDENTS,
  /*1889*/ PHRASE_TYPE      | G_another_FPP0,
  /*1890*/ COUNT_OF_PHRASES | 0x000003,
  /*1891*/ PHRASE_TYPE      | G_Rt_Fn_Map_Pred_DECL,
  /*1892*/ PHRASE_TYPE      | G_IDENT,
  /*1893*/ PHRASE_TYPE      | G_Rt_Pred_FPP,

// P<More_FPPs> = ...;
  /*1894*/ COUNT_OF_ALTS    | 0x000002,
  /*1895*/ COUNT_OF_PHRASES | 0x000004,
  /*1896*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*1897*/ PHRASE_TYPE      | G_NL_opt,
  /*1898*/ PHRASE_TYPE      | G_VDEC_or_PROC,
  /*1899*/ PHRASE_TYPE      | G_More_FPPs,
  /*1900*/ COUNT_OF_PHRASES | 0x000000,

// P<FPP> = ...;
  /*1901*/ COUNT_OF_ALTS    | 0x000001,
  /*1902*/ COUNT_OF_PHRASES | 0x000002,
  /*1903*/ PHRASE_TYPE      | G_VDEC_or_PROC,
  /*1904*/ PHRASE_TYPE      | G_More_FPPs,

// P<FPP0> = ...;
  /*1905*/ COUNT_OF_ALTS    | 0x000001,
  /*1906*/ COUNT_OF_PHRASES | 0x000001,
  /*1907*/ PHRASE_TYPE      | G_VDEC_or_PROC,

// P<another_FPP0> = ...;
  /*1908*/ COUNT_OF_ALTS    | 0x000002,
  /*1909*/ COUNT_OF_PHRASES | 0x000003,
  /*1910*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*1911*/ PHRASE_TYPE      | G_NL_opt,
  /*1912*/ PHRASE_TYPE      | G_FPP0,
  /*1913*/ COUNT_OF_PHRASES | 0x000000,

// P<MORE_APPS> = ...;
  /*1914*/ COUNT_OF_ALTS    | 0x000002,
  /*1915*/ COUNT_OF_PHRASES | 0x000004,
  /*1916*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*1917*/ PHRASE_TYPE      | G_NL_opt,
  /*1918*/ PHRASE_TYPE      | G_EXP,
  /*1919*/ PHRASE_TYPE      | G_MORE_APPS,
  /*1920*/ COUNT_OF_PHRASES | 0x000000,

// P<APP> = ...;
  /*1921*/ COUNT_OF_ALTS    | 0x000001,
  /*1922*/ COUNT_OF_PHRASES | 0x000002,
  /*1923*/ PHRASE_TYPE      | G_EXP,
  /*1924*/ PHRASE_TYPE      | G_MORE_APPS,

// P<rest_of_IEXP> = ...;
  /*1925*/ COUNT_OF_ALTS    | 0x000002,
  /*1926*/ COUNT_OF_PHRASES | 0x000002,
  /*1927*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002c,  /* ',' */
  /*1928*/ PHRASE_TYPE      | G_const_event_list,
  /*1929*/ COUNT_OF_PHRASES | 0x000000,

// P<const_event_list> = ...;
  /*1930*/ COUNT_OF_ALTS    | 0x000001,
  /*1931*/ COUNT_OF_PHRASES | 0x000002,
  /*1932*/ PHRASE_TYPE      | G_IEXP,
  /*1933*/ PHRASE_TYPE      | G_rest_of_IEXP,

// P<RESLEFT_opt> = ...;
  /*1934*/ COUNT_OF_ALTS    | 0x000002,
  /*1935*/ COUNT_OF_PHRASES | 0x000002,
  /*1936*/ PHRASE_TYPE      | G_V_or_N,
  /*1937*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002e,  /* '.' */
  /*1938*/ COUNT_OF_PHRASES | 0x000000,

// P<RESRIGHT_opt> = ...;
  /*1939*/ COUNT_OF_ALTS    | 0x000002,
  /*1940*/ COUNT_OF_PHRASES | 0x000002,
  /*1941*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x00002e,  /* '.' */
  /*1942*/ PHRASE_TYPE      | G_V_or_N,
  /*1943*/ COUNT_OF_PHRASES | 0x000000,

// P<RESEXP> = ...;
  /*1944*/ COUNT_OF_ALTS    | 0x000001,
  /*1945*/ COUNT_OF_PHRASES | 0x000005,
  /*1946*/ PHRASE_TYPE      | G_RESLEFT_opt,
  /*1947*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000028,  /* '(' */
  /*1948*/ PHRASE_TYPE      | G_EXP,
  /*1949*/ CHAR_TYPE        | WHITESPACE_ALLOWED | 0x000029,  /* ')' */
  /*1950*/ PHRASE_TYPE      | G_RESRIGHT_opt,
};

#ifdef INITCODE

  static char *TypeName[32] = {
    // CST
    "*ERROR(0)*", "CST:BIP_TYPE", "CST:PHRASE_TYPE", "CST:SEMANTIC_TYPE", "CST:KEYWORD_TYPE",
    "CST:CHAR_TYPE", "CST:UTF32CHAR_TYPE", "CST:STRING_TYPE", "CST:UTF32STRING_TYPE",
    "CST:REGEXP_TYPE", "CST:OPTION_TYPE", "CST:COUNT_OF_ALTS", "CST:COUNT_OF_PHRASES",
    "CST:ALT_NUMBER", "*ERROR(14)*", "*ERROR(15)*",
    // AST
    "AST:BIP", "AST:PHRASE", "AST:ATOMLIT", "AST:POOLLIT",
    "*ERROR(20)*", "*ERROR(21)*", "*ERROR(22)*", "*ERROR(23)*",
    "*ERROR(24)*", "*ERROR(25)*", "*ERROR(26)*", "*ERROR(27)*",
    "*ERROR(28)*", "*ERROR(29)*", "*ERROR(30)*", "*ERROR(31)*",
  };

  wchar_t *Decode(int Ph) { // Until Diagnose is padded out a bit...
    static wchar_t tmp[512];
    swprintf(tmp, 511, L"%s", TypeName[(Ph>>AST_type_shift)&AST_type_mask]);
    return tmp;
  }

  wchar_t *pooltowstr_inner(StrpoolIDX p, const char *file, const int line) {
    if (p == -1) {
      fprintf(stderr, "* Error: pooltowstr passed -1 (uninitialised string) from %s, line %d\n", file, line);
    } else if (P_AST_type(p) == 0) {
      fprintf(stderr, "* Error: pooltowstr passed an untagged index from %s, line %d\n", file, line);
    } else if (P_AST_type(p) == STRING_TYPE) {
      fprintf(stderr, "* Error: pooltowstr passed a STRING_TYPE rather than an AST_POOL_LIT from %s, line %d\n", file, line);
    } else if (P_AST_type(p) == AST_ATOM_LIT) {
      fprintf(stderr, "* Error: pooltowstr passed a AST_ATOM_LIT rather than an AST_POOL_LIT from %s, line %d\n", file, line);
    } else if (P_AST_type(p) != AST_POOL_LIT) {
      fprintf(stderr, "* Error: pooltowstr passed an unexpected tag type %d:", P_AST_type(p) >> AST_type_shift);
      fprintf(stderr, " %ls from %s, line %d\n", Decode(p), file, line);
    }
    p = p & AST_idx_mask;
    return &Stringpool(p);
  }

  // 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 == '{') {
      // TO DO: testing seems to suggest that comments starting with '{' which extend to the
      // end of the line with no terminating '}' are causing a syntax error.  Check & fix if
      // necessary.
      
      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;
    }

    //  ***PROBLEM*** line reconstruction removes spaces *but not in strings and chars*,
    //                however it doesn't know if we are in an Imp comment, so it will
    //                still be doing line reconstruction including string preservation
    //                which traverses newlines and '}' end of comment symbols.

    //                I do remember adding a mechanism to the parser at some point that
    //                allowed me to postpone the line reconstruction until just before
    //                parsing the content, but it was very complicated and had a lot of
    //                overhead in terms of needing to write extra code, and to ne honest
    //                I have completely forgotten the details of how it worked :-(
    //                If I do have to resurrect that mechanism, I had better document it
    //                first!

    //  Note that although '{' comments can be safely skipped at the line reconstruction
    //  stage, "!" comments and "%comment" comments can't, because of the other uses of
    //  '!' in Imp (OR, EXOR, and Modulus).  I suppose a much more complex line reconstruction
    //  that uses code like in the 'uncomment-imp' utility might work, though I'm still not
    //  sure that that code handles %comment...
    
    //  Worst-case example for handling during line reconstruction is where there are multiple
    //  switch labels before a comment!  Maybe even mixed with {} comments!:
    //
    //  lab(12): lab{yuck!}(x): ! comment with odd ' in it
    //  lab(12): lab{double yuck!}(x): %comment with odd ' in it %c
    //  lab(12): lab{double yuck!}(x): %comment with odd ' in it %c ;
    //  lab(12): lab{double yuck!}(x): %comment with odd ' in it { %c
    
    
    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_
