#ifndef _GRAMMAR_H_
#define _GRAMMAR_H_ 1

#include <wchar.h>

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

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

typedef int (*parsefn)(void);

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

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


#define BIP_BASE 0
#define PHRASE_BASE 4
#define SEMANTIC_BASE 274
#define AST_BASE 318

#define NUM_BIPS 4
#define NUM_SIMPLE_PHRASES 270
#define NUM_SEMANTIC_PHRASES 44
#define NUM_PHRASES (NUM_BIPS+NUM_SIMPLE_PHRASES+NUM_SEMANTIC_PHRASES)

#define NUM_KEYWORDS 117
#define NUM_REGEXPS 2
#define NUM_GRAMMAR 2231

#define B_EOF 0
#define B_ch 1
#define B_NL 2
#define B_junk 3
#define P_IDENT 4
#define P_V 5
#define P_N 6
#define P_FM 7
#define P_RP 8
#define P_FP 9
#define P_MP 10
#define P_PP 11
#define P_A 12
#define P_AN 13
#define P_NA 14
#define P_NAN 15
#define P_any 16
#define P_more_NLs 17
#define P_NL_opt 18
#define P_more_Ts 19
#define P_T 20
#define P_simple_type 21
#define P_routine_or_predicate 22
#define P_fn_or_map 23
#define P_OWN_opt 24
#define P_EXTERNAL_opt 25
#define P_EXTERNAL 26
#define P_COMP 27
#define P_ACOMP 28
#define P_exit_or_continue 29
#define P_on_event 30
#define P_BACK 31
#define P_PIDENT 32
#define P_CIDENT 33
#define P_OIDENT 34
#define P_FNAME 35
#define P_DOTL 36
#define P_DOTR 37
#define P_ASEP 38
#define P_CSEP 39
#define P_PSEP 40
#define P_OWNT 41
#define P_DBSEP 42
#define P_INDEF 43
#define P_ORRB 44
#define P_FMANY 45
#define P_RANGERB 46
#define P_FSID 47
#define P_INITDEC 48
#define P_IDENT_and_INITDEC 49
#define P_rest_of_IDENT_and_INITDEC 50
#define P_rest_of_ADEFN 51
#define P_OIDENT_ALIAS_opt 52
#define P_more_IDENT_ALIAS_opts 53
#define P_IDENT_ALIAS_opt 54
#define P_ALIAS_opt 55
#define P_rest_of_INITVAR 56
#define P_Rt_Pred_FPP 57
#define P_bracketed_INDEF_or_IEXP 58
#define P_optional_initialiser_repeat_count 59
#define P_initialiser_item 60
#define P_more_initialiser_items 61
#define P_initialiser_list 62
#define P_optional_initialisation_T 63
#define P_EXTA_item 64
#define P_EXTA_list_opt 65
#define P_EXTA_list 66
#define P_INDEF_or_IEXP 67
#define P_LIST_opt 68
#define P_SS 69
#define P_STATEMENTS 70
#define P_L 71
#define P_SWID 72
#define P_rest_of_SWIDS 73
#define P_SWIDS 74
#define P_rest_of_SWDEFS 75
#define P_SWDEFS 76
#define P_SWDEF 77
#define P_Star_or_IEXP 78
#define P_FM_or_Star 79
#define P_result_types 80
#define P_Rt_Fn_Map_Pred_DECL 81
#define P_NAME_opt 82
#define P_SPEC_opt 83
#define P_ARRAY_stuff 84
#define P_RECORD_DECL 85
#define P_Declaration_T 86
#define P_R 87
#define P_F 88
#define P_M 89
#define P_P 90
#define P_optional_parameters 91
#define P_Rt_CALL 92
#define P_Fn_CALL 93
#define P_Map_CALL 94
#define P_Pred_CALL 95
#define P_PROC_or_PROCSPEC 96
#define P_APP_PROT 97
#define P_ESCARRAY 98
#define P_ESCREC 99
#define P_ESCREC_opt 100
#define P_ESC_ARRAY_or_REC 101
#define P_simple_label 102
#define P_switch_label 103
#define P_MLAB 104
#define P_S 105
#define P_jump_destination 106
#define P_SIGNAL 107
#define P_COMMENT_ALLOWED 108
#define P_COMMENT 109
#define P_COMMENT_T 110
#define P_LHS 111
#define P_IMP 112
#define P_EIMP 113
#define P_XIMP 114
#define P_FELSE_opt 115
#define P_if_or_unless 116
#define P_if_unless_XIMP 117
#define P_if_XIMP_opt 118
#define P_THEN_opt 119
#define P_else_start_IMP_opt 120
#define P_else_if_unless_XIMP_opt 121
#define P_else_if_XIMP_opt 122
#define P_else_final_IMP_opt 123
#define P_start_IMP 124
#define P_final_IMP 125
#define P_more_IMPS 126
#define P_ENDPROG 127
#define P_LIST 128
#define P_REALSLN 129
#define P_CONTROL 130
#define P_STATEMENT 131
#define P_wh_for 132
#define P_cycle_IMP 133
#define P_event_list_def 134
#define P_iu_while_until_for_T 135
#define P_AddressOffsetOp 136
#define P_ADDOP_SEXP_opt 137
#define P_A_or_AN_or_NA_or_NAN 138
#define P_A_or_AN_TYPE_PROT 139
#define P_A_or_AN_TYPE 140
#define P_NA_or_NAN_TYPE 141
#define P_A_or_AN_or_NA_or_NAN_TYPE 142
#define P_VAR_ASSIGN 143
#define P_INIT_DEC_ASSIGNMENTS 144
#define P_rest_of_IDENTS 145
#define P_IDENTS 146
#define P_V_or_N 147
#define P_extra 148
#define P_subevent_and_extra 149
#define P_A_or_AN_TYPE_opt_PROT 150
#define P_NA_or_NAN_TYPE_opt_PROT 151
#define P_V_or_N_TYPE_opt_PROT 152
#define P_IMP_ASSIGN 153
#define P_N_ASS 154
#define P_rest_of_AND_COND 155
#define P_AND_COND 156
#define P_rest_of_OR_COND 157
#define P_OR_COND 158
#define P_rest_of_COND 159
#define P_COND 160
#define P_OP1 161
#define P_OP2 162
#define P_OP3 163
#define P_SIGN 164
#define P_MOD 165
#define P_OP1_EXP 166
#define P_OP2_EXP 167
#define P_OP3_EXP 168
#define P_OP1_EXPS 169
#define P_OP2_EXPS 170
#define P_OP3_EXPS 171
#define P_COMP2_opt 172
#define P_COMP2 173
#define P_COMP1 174
#define P_COMP12_opt 175
#define P_DOT_V_Ns 176
#define P_DOT_V_N 177
#define P_COMPARISON 178
#define P_COMP1OS2 179
#define P_SCOND 180
#define P_RECEXP 181
#define P_UOP 182
#define P_UOP_opt 183
#define P_dot_Vs_opt 184
#define P_dot_Vs 185
#define P_DQ 186
#define P_EXP 187
#define P_EXP2 188
#define P_EXP1 189
#define P_SEXP 190
#define P_COP1 191
#define P_COP2 192
#define P_COP3 193
#define P_CSIGN 194
#define P_CMOD 195
#define P_rest_of_IEXP2_EXPR 196
#define P_IEXP2_EXPR 197
#define P_COP3_IEXP2_optseq 198
#define P_COP2_IEXP1_optseq 199
#define P_COP1_IEXP0_optseq 200
#define P_CUOP_opt 201
#define P_CUOP 202
#define P_ISEXP_EXPR 203
#define P_IEXP2 204
#define P_IEXP1 205
#define P_IEXP0 206
#define P_IEXP 207
#define P_PCONST 208
#define P_ACONST 209
#define P_OCONST 210
#define P_SIGN_opt 211
#define P_RCONST 212
#define P_SCONST 213
#define P_SEQ 214
#define P_FDEF 215
#define P_rest_of_IDENT_or_FITEM 216
#define P_rest_of_IDENT_or_FITEMS 217
#define P_FITEM_and_rest 218
#define P_FITEM_and_more 219
#define P_FMOR_FITEMS 220
#define P_VDEC_or_ADEC 221
#define P_another_MOREA_opt 222
#define P_rest_of_MOREA 223
#define P_MOREA 224
#define P_FITEM 225
#define P_record_field_decl 226
#define P_OR_record_field_declarations 227
#define P_more_record_field_decls 228
#define P_record_field_declarations 229
#define P_CONST_BOUNDS 230
#define P_RCONST_BOUNDS 231
#define P_BOUNDS_PAIR 232
#define P_rest_of_BPL_LIST 233
#define P_BPL_LIST 234
#define P_BPL 235
#define P_another_FPP0 236
#define P_parameter_type 237
#define P_parameter_type_decl 238
#define P_VDEC_or_PROC 239
#define P_FPP 240
#define P_FPP0 241
#define P_FPP1_stuff_opt 242
#define P_FPP1_stuff 243
#define P_FPP1 244
#define P_rest_of_FPP2_opt 245
#define P_FPP2_stuff 246
#define P_FPP2 247
#define P_ADEFN 248
#define P_APP 249
#define P_BASEAPP 250
#define P_APP2 251
#define P_APP3 252
#define P_APP4 253
#define P_APP5 254
#define P_APP6 255
#define P_rest_of_IEXP 256
#define P_const_event_list 257
#define P_N_or_AN_or_NAN 258
#define P_ADDOP_IEXP_opt 259
#define P_rest_of_EQs_init 260
#define P_EQs 261
#define P_INITVAR 262
#define P_CIEXP 263
#define P_RESLEFT_opt 264
#define P_RESRIGHT_opt 265
#define P_RESEXP 266
#define P_V_or_N_or_A_or_AN_or_NA_or_NAN 267
#define P_V_or_N_or_A_or_AN_or_NA_or_NAN_OTHER 268
#define P_NLAB 269
#define P_NPARM 270
#define P_VARP 271
#define P_ARRAYP 272
#define P_NARRAYP 273
#define S_init 0
#define S_terminate 1
#define S_whitespace 2
#define S_Imp77_stropping 3
#define S_CONST 4
#define S_DUMMY 5
#define S_TYPE 6
#define S_PROT 7
#define S_SETPROT 8
#define S_PTYPE 9
#define S_GAPP 10
#define S_LOCAL 11
#define S_GUARD 12
#define S_MCODE 13
#define S_CDUMMY 14
#define S_SETTYPE 15
#define S_OPER 16
#define S_PARAM 17
#define S_BLOCK 18
#define S_OTHER 19
#define S_COMPILE 20
#define S_VDEC 21
#define S_OWNVDEC 22
#define S_EXTVSPEC 23
#define S_ADEC 24
#define S_OWNADEC 25
#define S_EXTASPEC 26
#define S_LDEC 27
#define S_MSTART 28
#define S_DUBIOUS 29
#define S_DUP 30
#define S_PIN 31
#define S_POUT 32
#define S_EDUP 33
#define S_SWDEC 34
#define S_QDECL 35
#define S_FORMDEC 36
#define S_FORMSPEC 37
#define S_APPLY 38
#define S_PROC 39
#define S_PROCSPEC 40
#define S_PRED 41
#define S_ZERO 42
#define S_CLEAR 43

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 *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_IDENT 0
#define G_V 4
#define G_N 8
#define G_FM 12
#define G_RP 16
#define G_FP 20
#define G_MP 24
#define G_PP 28
#define G_A 32
#define G_AN 36
#define G_NA 40
#define G_NAN 44
#define G_any 48
#define G_more_NLs 51
#define G_NL_opt 57
#define G_more_Ts 63
#define G_T 69
#define G_simple_type 76
#define G_routine_or_predicate 95
#define G_fn_or_map 100
#define G_OWN_opt 111
#define G_EXTERNAL_opt 120
#define G_EXTERNAL 125
#define G_COMP 136
#define G_ACOMP 155
#define G_exit_or_continue 160
#define G_on_event 165
#define G_BACK 170
#define G_PIDENT 177
#define G_CIDENT 180
#define G_OIDENT 183
#define G_FNAME 186
#define G_DOTL 189
#define G_DOTR 192
#define G_ASEP 195
#define G_CSEP 198
#define G_PSEP 201
#define G_OWNT 204
#define G_DBSEP 207
#define G_INDEF 210
#define G_ORRB 213
#define G_FMANY 216
#define G_RANGERB 219
#define G_FSID 222
#define G_INITDEC 225
#define G_IDENT_and_INITDEC 229
#define G_rest_of_IDENT_and_INITDEC 233
#define G_rest_of_ADEFN 241
#define G_OIDENT_ALIAS_opt 248
#define G_more_IDENT_ALIAS_opts 252
#define G_IDENT_ALIAS_opt 260
#define G_ALIAS_opt 264
#define G_rest_of_INITVAR 271
#define G_Rt_Pred_FPP 279
#define G_bracketed_INDEF_or_IEXP 288
#define G_optional_initialiser_repeat_count 293
#define G_initialiser_item 304
#define G_more_initialiser_items 308
#define G_initialiser_list 315
#define G_optional_initialisation_T 319
#define G_EXTA_item 327
#define G_EXTA_list_opt 331
#define G_EXTA_list 340
#define G_INDEF_or_IEXP 344
#define G_LIST_opt 349
#define G_SS 354
#define G_STATEMENTS 361
#define G_L 369
#define G_SWID 372
#define G_rest_of_SWIDS 375
#define G_SWIDS 383
#define G_rest_of_SWDEFS 387
#define G_SWDEFS 395
#define G_SWDEF 399
#define G_Star_or_IEXP 404
#define G_FM_or_Star 409
#define G_result_types 414
#define G_Rt_Fn_Map_Pred_DECL 434
#define G_NAME_opt 440
#define G_SPEC_opt 445
#define G_ARRAY_stuff 450
#define G_RECORD_DECL 460
#define G_Declaration_T 463
#define G_R 582
#define G_F 585
#define G_M 588
#define G_P 591
#define G_optional_parameters 594
#define G_Rt_CALL 601
#define G_Fn_CALL 605
#define G_Map_CALL 609
#define G_Pred_CALL 613
#define G_PROC_or_PROCSPEC 617
#define G_APP_PROT 622
#define G_ESCARRAY 629
#define G_ESCREC 636
#define G_ESCREC_opt 642
#define G_ESC_ARRAY_or_REC 648
#define G_simple_label 655
#define G_switch_label 659
#define G_MLAB 664
#define G_S 667
#define G_jump_destination 670
#define G_SIGNAL 678
#define G_COMMENT_ALLOWED 683
#define G_COMMENT 690
#define G_COMMENT_T 695
#define G_LHS 700
#define G_IMP 710
#define G_EIMP 766
#define G_XIMP 779
#define G_FELSE_opt 788
#define G_if_or_unless 794
#define G_if_unless_XIMP 799
#define G_if_XIMP_opt 805
#define G_THEN_opt 811
#define G_else_start_IMP_opt 816
#define G_else_if_unless_XIMP_opt 822
#define G_else_if_XIMP_opt 828
#define G_else_final_IMP_opt 834
#define G_start_IMP 840
#define G_final_IMP 848
#define G_more_IMPS 856
#define G_ENDPROG 863
#define G_LIST 868
#define G_REALSLN 873
#define G_CONTROL 878
#define G_STATEMENT 883
#define G_wh_for 1022
#define G_cycle_IMP 1029
#define G_event_list_def 1035
#define G_iu_while_until_for_T 1040
#define G_AddressOffsetOp 1059
#define G_ADDOP_SEXP_opt 1064
#define G_A_or_AN_or_NA_or_NAN 1070
#define G_A_or_AN_TYPE_PROT 1079
#define G_A_or_AN_TYPE 1088
#define G_NA_or_NAN_TYPE 1095
#define G_A_or_AN_or_NA_or_NAN_TYPE 1102
#define G_VAR_ASSIGN 1115
#define G_INIT_DEC_ASSIGNMENTS 1127
#define G_rest_of_IDENTS 1154
#define G_IDENTS 1162
#define G_V_or_N 1166
#define G_extra 1180
#define G_subevent_and_extra 1187
#define G_A_or_AN_TYPE_opt_PROT 1195
#define G_NA_or_NAN_TYPE_opt_PROT 1200
#define G_V_or_N_TYPE_opt_PROT 1207
#define G_IMP_ASSIGN 1216
#define G_N_ASS 1233
#define G_rest_of_AND_COND 1255
#define G_AND_COND 1261
#define G_rest_of_OR_COND 1267
#define G_OR_COND 1273
#define G_rest_of_COND 1279
#define G_COND 1286
#define G_OP1 1292
#define G_OP2 1305
#define G_OP3 1314
#define G_SIGN 1323
#define G_MOD 1328
#define G_OP1_EXP 1331
#define G_OP2_EXP 1336
#define G_OP3_EXP 1341
#define G_OP1_EXPS 1346
#define G_OP2_EXPS 1352
#define G_OP3_EXPS 1358
#define G_COMP2_opt 1364
#define G_COMP2 1369
#define G_COMP1 1374
#define G_COMP12_opt 1379
#define G_DOT_V_Ns 1383
#define G_DOT_V_N 1389
#define G_COMPARISON 1395
#define G_COMP1OS2 1419
#define G_SCOND 1426
#define G_RECEXP 1461
#define G_UOP 1469
#define G_UOP_opt 1476
#define G_dot_Vs_opt 1481
#define G_dot_Vs 1487
#define G_DQ 1492
#define G_EXP 1495
#define G_EXP2 1516
#define G_EXP1 1521
#define G_SEXP 1525
#define G_COP1 1539
#define G_COP2 1542
#define G_COP3 1545
#define G_CSIGN 1548
#define G_CMOD 1551
#define G_rest_of_IEXP2_EXPR 1554
#define G_IEXP2_EXPR 1561
#define G_COP3_IEXP2_optseq 1565
#define G_COP2_IEXP1_optseq 1572
#define G_COP1_IEXP0_optseq 1579
#define G_CUOP_opt 1586
#define G_CUOP 1591
#define G_ISEXP_EXPR 1594
#define G_IEXP2 1598
#define G_IEXP1 1603
#define G_IEXP0 1607
#define G_IEXP 1619
#define G_PCONST 1629
#define G_ACONST 1635
#define G_OCONST 1638
#define G_SIGN_opt 1641
#define G_RCONST 1646
#define G_SCONST 1651
#define G_SEQ 1655
#define G_FDEF 1668
#define G_rest_of_IDENT_or_FITEM 1674
#define G_rest_of_IDENT_or_FITEMS 1683
#define G_FITEM_and_rest 1689
#define G_FITEM_and_more 1693
#define G_FMOR_FITEMS 1697
#define G_VDEC_or_ADEC 1705
#define G_another_MOREA_opt 1714
#define G_rest_of_MOREA 1721
#define G_MOREA 1729
#define G_FITEM 1737
#define G_record_field_decl 1745
#define G_OR_record_field_declarations 1860
#define G_more_record_field_decls 1867
#define G_record_field_declarations 1875
#define G_CONST_BOUNDS 1880
#define G_RCONST_BOUNDS 1887
#define G_BOUNDS_PAIR 1894
#define G_rest_of_BPL_LIST 1899
#define G_BPL_LIST 1906
#define G_BPL 1910
#define G_another_FPP0 1915
#define G_parameter_type 1921
#define G_parameter_type_decl 1934
#define G_VDEC_or_PROC 1949
#define G_FPP 1962
#define G_FPP0 1968
#define G_FPP1_stuff_opt 1972
#define G_FPP1_stuff 1977
#define G_FPP1 1984
#define G_rest_of_FPP2_opt 1989
#define G_FPP2_stuff 1996
#define G_FPP2 2004
#define G_ADEFN 2009
#define G_APP 2014
#define G_BASEAPP 2027
#define G_APP2 2030
#define G_APP3 2036
#define G_APP4 2045
#define G_APP5 2057
#define G_APP6 2072
#define G_rest_of_IEXP 2090
#define G_const_event_list 2096
#define G_N_or_AN_or_NAN 2100
#define G_ADDOP_IEXP_opt 2109
#define G_rest_of_EQs_init 2115
#define G_EQs 2124
#define G_INITVAR 2138
#define G_CIEXP 2145
#define G_RESLEFT_opt 2149
#define G_RESRIGHT_opt 2156
#define G_RESEXP 2163
#define G_V_or_N_or_A_or_AN_or_NA_or_NAN 2170
#define G_V_or_N_or_A_or_AN_or_NA_or_NAN_OTHER 2183
#define G_NLAB 2202
#define G_NPARM 2205
#define G_VARP 2211
#define G_ARRAYP 2217
#define G_NARRAYP 2224

extern parsefn parsetime[NUM_SEMANTIC_PHRASES];
extern int parse_init(void);
extern int parse_terminate(void);
extern int parse_whitespace(void);
extern int parse_Imp77_stropping(void);
extern int parse_CONST(void);
extern int parse_DUMMY(void);
extern int parse_TYPE(void);
extern int parse_PROT(void);
extern int parse_SETPROT(void);
extern int parse_PTYPE(void);
extern int parse_GAPP(void);
extern int parse_LOCAL(void);
extern int parse_GUARD(void);
extern int parse_MCODE(void);
extern int parse_CDUMMY(void);
extern int parse_SETTYPE(void);
extern int parse_OPER(void);
extern int parse_PARAM(void);
extern int parse_BLOCK(void);
extern int parse_OTHER(void);
extern int parse_COMPILE(void);
extern int parse_VDEC(void);
extern int parse_OWNVDEC(void);
extern int parse_EXTVSPEC(void);
extern int parse_ADEC(void);
extern int parse_OWNADEC(void);
extern int parse_EXTASPEC(void);
extern int parse_LDEC(void);
extern int parse_MSTART(void);
extern int parse_DUBIOUS(void);
extern int parse_DUP(void);
extern int parse_PIN(void);
extern int parse_POUT(void);
extern int parse_EDUP(void);
extern int parse_SWDEC(void);
extern int parse_QDECL(void);
extern int parse_FORMDEC(void);
extern int parse_FORMSPEC(void);
extern int parse_APPLY(void);
extern int parse_PROC(void);
extern int parse_PROCSPEC(void);
extern int parse_PRED(void);
extern int parse_ZERO(void);
extern int parse_CLEAR(void);

#ifndef SUPPRESS_DATA
const wchar_t *phrasename[NUM_BIPS+NUM_SIMPLE_PHRASES+NUM_SEMANTIC_PHRASES] = {
  /*0+0*/   L"EOF" /*0*/,
  /*0+1*/   L"ch" /*1*/,
  /*0+2*/   L"NL" /*2*/,
  /*0+3*/   L"junk" /*3*/,
  /*4+0*/   L"IDENT",
  /*4+1*/   L"V",
  /*4+2*/   L"N",
  /*4+3*/   L"FM",
  /*4+4*/   L"RP",
  /*4+5*/   L"FP",
  /*4+6*/   L"MP",
  /*4+7*/   L"PP",
  /*4+8*/   L"A",
  /*4+9*/   L"AN",
  /*4+10*/   L"NA",
  /*4+11*/   L"NAN",
  /*4+12*/   L"any",
  /*4+13*/   L"more_NLs",
  /*4+14*/   L"NL_opt",
  /*4+15*/   L"more_Ts",
  /*4+16*/   L"T",
  /*4+17*/   L"simple_type",
  /*4+18*/   L"routine_or_predicate",
  /*4+19*/   L"fn_or_map",
  /*4+20*/   L"OWN_opt",
  /*4+21*/   L"EXTERNAL_opt",
  /*4+22*/   L"EXTERNAL",
  /*4+23*/   L"COMP",
  /*4+24*/   L"ACOMP",
  /*4+25*/   L"exit_or_continue",
  /*4+26*/   L"on_event",
  /*4+27*/   L"BACK",
  /*4+28*/   L"PIDENT",
  /*4+29*/   L"CIDENT",
  /*4+30*/   L"OIDENT",
  /*4+31*/   L"FNAME",
  /*4+32*/   L"DOTL",
  /*4+33*/   L"DOTR",
  /*4+34*/   L"ASEP",
  /*4+35*/   L"CSEP",
  /*4+36*/   L"PSEP",
  /*4+37*/   L"OWNT",
  /*4+38*/   L"DBSEP",
  /*4+39*/   L"INDEF",
  /*4+40*/   L"ORRB",
  /*4+41*/   L"FMANY",
  /*4+42*/   L"RANGERB",
  /*4+43*/   L"FSID",
  /*4+44*/   L"INITDEC",
  /*4+45*/   L"IDENT_and_INITDEC",
  /*4+46*/   L"rest_of_IDENT_and_INITDEC",
  /*4+47*/   L"rest_of_ADEFN",
  /*4+48*/   L"OIDENT_ALIAS_opt",
  /*4+49*/   L"more_IDENT_ALIAS_opts",
  /*4+50*/   L"IDENT_ALIAS_opt",
  /*4+51*/   L"ALIAS_opt",
  /*4+52*/   L"rest_of_INITVAR",
  /*4+53*/   L"Rt_Pred_FPP",
  /*4+54*/   L"bracketed_INDEF_or_IEXP",
  /*4+55*/   L"optional_initialiser_repeat_count",
  /*4+56*/   L"initialiser_item",
  /*4+57*/   L"more_initialiser_items",
  /*4+58*/   L"initialiser_list",
  /*4+59*/   L"optional_initialisation_T",
  /*4+60*/   L"EXTA_item",
  /*4+61*/   L"EXTA_list_opt",
  /*4+62*/   L"EXTA_list",
  /*4+63*/   L"INDEF_or_IEXP",
  /*4+64*/   L"LIST_opt",
  /*4+65*/   L"SS",
  /*4+66*/   L"STATEMENTS",
  /*4+67*/   L"L",
  /*4+68*/   L"SWID",
  /*4+69*/   L"rest_of_SWIDS",
  /*4+70*/   L"SWIDS",
  /*4+71*/   L"rest_of_SWDEFS",
  /*4+72*/   L"SWDEFS",
  /*4+73*/   L"SWDEF",
  /*4+74*/   L"Star_or_IEXP",
  /*4+75*/   L"FM_or_Star",
  /*4+76*/   L"result_types",
  /*4+77*/   L"Rt_Fn_Map_Pred_DECL",
  /*4+78*/   L"NAME_opt",
  /*4+79*/   L"SPEC_opt",
  /*4+80*/   L"ARRAY_stuff",
  /*4+81*/   L"RECORD_DECL",
  /*4+82*/   L"Declaration_T",
  /*4+83*/   L"R",
  /*4+84*/   L"F",
  /*4+85*/   L"M",
  /*4+86*/   L"P",
  /*4+87*/   L"optional_parameters",
  /*4+88*/   L"Rt_CALL",
  /*4+89*/   L"Fn_CALL",
  /*4+90*/   L"Map_CALL",
  /*4+91*/   L"Pred_CALL",
  /*4+92*/   L"PROC_or_PROCSPEC",
  /*4+93*/   L"APP_PROT",
  /*4+94*/   L"ESCARRAY",
  /*4+95*/   L"ESCREC",
  /*4+96*/   L"ESCREC_opt",
  /*4+97*/   L"ESC_ARRAY_or_REC",
  /*4+98*/   L"simple_label",
  /*4+99*/   L"switch_label",
  /*4+100*/   L"MLAB",
  /*4+101*/   L"S",
  /*4+102*/   L"jump_destination",
  /*4+103*/   L"SIGNAL",
  /*4+104*/   L"COMMENT_ALLOWED",
  /*4+105*/   L"COMMENT",
  /*4+106*/   L"COMMENT_T",
  /*4+107*/   L"LHS",
  /*4+108*/   L"IMP",
  /*4+109*/   L"EIMP",
  /*4+110*/   L"XIMP",
  /*4+111*/   L"FELSE_opt",
  /*4+112*/   L"if_or_unless",
  /*4+113*/   L"if_unless_XIMP",
  /*4+114*/   L"if_XIMP_opt",
  /*4+115*/   L"THEN_opt",
  /*4+116*/   L"else_start_IMP_opt",
  /*4+117*/   L"else_if_unless_XIMP_opt",
  /*4+118*/   L"else_if_XIMP_opt",
  /*4+119*/   L"else_final_IMP_opt",
  /*4+120*/   L"start_IMP",
  /*4+121*/   L"final_IMP",
  /*4+122*/   L"more_IMPS",
  /*4+123*/   L"ENDPROG",
  /*4+124*/   L"LIST",
  /*4+125*/   L"REALSLN",
  /*4+126*/   L"CONTROL",
  /*4+127*/   L"STATEMENT",
  /*4+128*/   L"wh_for",
  /*4+129*/   L"cycle_IMP",
  /*4+130*/   L"event_list_def",
  /*4+131*/   L"iu_while_until_for_T",
  /*4+132*/   L"AddressOffsetOp",
  /*4+133*/   L"ADDOP_SEXP_opt",
  /*4+134*/   L"A_or_AN_or_NA_or_NAN",
  /*4+135*/   L"A_or_AN_TYPE_PROT",
  /*4+136*/   L"A_or_AN_TYPE",
  /*4+137*/   L"NA_or_NAN_TYPE",
  /*4+138*/   L"A_or_AN_or_NA_or_NAN_TYPE",
  /*4+139*/   L"VAR_ASSIGN",
  /*4+140*/   L"INIT_DEC_ASSIGNMENTS",
  /*4+141*/   L"rest_of_IDENTS",
  /*4+142*/   L"IDENTS",
  /*4+143*/   L"V_or_N",
  /*4+144*/   L"extra",
  /*4+145*/   L"subevent_and_extra",
  /*4+146*/   L"A_or_AN_TYPE_opt_PROT",
  /*4+147*/   L"NA_or_NAN_TYPE_opt_PROT",
  /*4+148*/   L"V_or_N_TYPE_opt_PROT",
  /*4+149*/   L"IMP_ASSIGN",
  /*4+150*/   L"N_ASS",
  /*4+151*/   L"rest_of_AND_COND",
  /*4+152*/   L"AND_COND",
  /*4+153*/   L"rest_of_OR_COND",
  /*4+154*/   L"OR_COND",
  /*4+155*/   L"rest_of_COND",
  /*4+156*/   L"COND",
  /*4+157*/   L"OP1",
  /*4+158*/   L"OP2",
  /*4+159*/   L"OP3",
  /*4+160*/   L"SIGN",
  /*4+161*/   L"MOD",
  /*4+162*/   L"OP1_EXP",
  /*4+163*/   L"OP2_EXP",
  /*4+164*/   L"OP3_EXP",
  /*4+165*/   L"OP1_EXPS",
  /*4+166*/   L"OP2_EXPS",
  /*4+167*/   L"OP3_EXPS",
  /*4+168*/   L"COMP2_opt",
  /*4+169*/   L"COMP2",
  /*4+170*/   L"COMP1",
  /*4+171*/   L"COMP12_opt",
  /*4+172*/   L"DOT_V_Ns",
  /*4+173*/   L"DOT_V_N",
  /*4+174*/   L"COMPARISON",
  /*4+175*/   L"COMP1OS2",
  /*4+176*/   L"SCOND",
  /*4+177*/   L"RECEXP",
  /*4+178*/   L"UOP",
  /*4+179*/   L"UOP_opt",
  /*4+180*/   L"dot_Vs_opt",
  /*4+181*/   L"dot_Vs",
  /*4+182*/   L"DQ",
  /*4+183*/   L"EXP",
  /*4+184*/   L"EXP2",
  /*4+185*/   L"EXP1",
  /*4+186*/   L"SEXP",
  /*4+187*/   L"COP1",
  /*4+188*/   L"COP2",
  /*4+189*/   L"COP3",
  /*4+190*/   L"CSIGN",
  /*4+191*/   L"CMOD",
  /*4+192*/   L"rest_of_IEXP2_EXPR",
  /*4+193*/   L"IEXP2_EXPR",
  /*4+194*/   L"COP3_IEXP2_optseq",
  /*4+195*/   L"COP2_IEXP1_optseq",
  /*4+196*/   L"COP1_IEXP0_optseq",
  /*4+197*/   L"CUOP_opt",
  /*4+198*/   L"CUOP",
  /*4+199*/   L"ISEXP_EXPR",
  /*4+200*/   L"IEXP2",
  /*4+201*/   L"IEXP1",
  /*4+202*/   L"IEXP0",
  /*4+203*/   L"IEXP",
  /*4+204*/   L"PCONST",
  /*4+205*/   L"ACONST",
  /*4+206*/   L"OCONST",
  /*4+207*/   L"SIGN_opt",
  /*4+208*/   L"RCONST",
  /*4+209*/   L"SCONST",
  /*4+210*/   L"SEQ",
  /*4+211*/   L"FDEF",
  /*4+212*/   L"rest_of_IDENT_or_FITEM",
  /*4+213*/   L"rest_of_IDENT_or_FITEMS",
  /*4+214*/   L"FITEM_and_rest",
  /*4+215*/   L"FITEM_and_more",
  /*4+216*/   L"FMOR_FITEMS",
  /*4+217*/   L"VDEC_or_ADEC",
  /*4+218*/   L"another_MOREA_opt",
  /*4+219*/   L"rest_of_MOREA",
  /*4+220*/   L"MOREA",
  /*4+221*/   L"FITEM",
  /*4+222*/   L"record_field_decl",
  /*4+223*/   L"OR_record_field_declarations",
  /*4+224*/   L"more_record_field_decls",
  /*4+225*/   L"record_field_declarations",
  /*4+226*/   L"CONST_BOUNDS",
  /*4+227*/   L"RCONST_BOUNDS",
  /*4+228*/   L"BOUNDS_PAIR",
  /*4+229*/   L"rest_of_BPL_LIST",
  /*4+230*/   L"BPL_LIST",
  /*4+231*/   L"BPL",
  /*4+232*/   L"another_FPP0",
  /*4+233*/   L"parameter_type",
  /*4+234*/   L"parameter_type_decl",
  /*4+235*/   L"VDEC_or_PROC",
  /*4+236*/   L"FPP",
  /*4+237*/   L"FPP0",
  /*4+238*/   L"FPP1_stuff_opt",
  /*4+239*/   L"FPP1_stuff",
  /*4+240*/   L"FPP1",
  /*4+241*/   L"rest_of_FPP2_opt",
  /*4+242*/   L"FPP2_stuff",
  /*4+243*/   L"FPP2",
  /*4+244*/   L"ADEFN",
  /*4+245*/   L"APP",
  /*4+246*/   L"BASEAPP",
  /*4+247*/   L"APP2",
  /*4+248*/   L"APP3",
  /*4+249*/   L"APP4",
  /*4+250*/   L"APP5",
  /*4+251*/   L"APP6",
  /*4+252*/   L"rest_of_IEXP",
  /*4+253*/   L"const_event_list",
  /*4+254*/   L"N_or_AN_or_NAN",
  /*4+255*/   L"ADDOP_IEXP_opt",
  /*4+256*/   L"rest_of_EQs_init",
  /*4+257*/   L"EQs",
  /*4+258*/   L"INITVAR",
  /*4+259*/   L"CIEXP",
  /*4+260*/   L"RESLEFT_opt",
  /*4+261*/   L"RESRIGHT_opt",
  /*4+262*/   L"RESEXP",
  /*4+263*/   L"V_or_N_or_A_or_AN_or_NA_or_NAN",
  /*4+264*/   L"V_or_N_or_A_or_AN_or_NA_or_NAN_OTHER",
  /*4+265*/   L"NLAB",
  /*4+266*/   L"NPARM",
  /*4+267*/   L"VARP",
  /*4+268*/   L"ARRAYP",
  /*4+269*/   L"NARRAYP",
  /*274+0*/   L"init",
  /*274+1*/   L"terminate",
  /*274+2*/   L"whitespace",
  /*274+3*/   L"Imp77_stropping",
  /*274+4*/   L"CONST",
  /*274+5*/   L"DUMMY",
  /*274+6*/   L"TYPE",
  /*274+7*/   L"PROT",
  /*274+8*/   L"SETPROT",
  /*274+9*/   L"PTYPE",
  /*274+10*/   L"GAPP",
  /*274+11*/   L"LOCAL",
  /*274+12*/   L"GUARD",
  /*274+13*/   L"MCODE",
  /*274+14*/   L"CDUMMY",
  /*274+15*/   L"SETTYPE",
  /*274+16*/   L"OPER",
  /*274+17*/   L"PARAM",
  /*274+18*/   L"BLOCK",
  /*274+19*/   L"OTHER",
  /*274+20*/   L"COMPILE",
  /*274+21*/   L"VDEC",
  /*274+22*/   L"OWNVDEC",
  /*274+23*/   L"EXTVSPEC",
  /*274+24*/   L"ADEC",
  /*274+25*/   L"OWNADEC",
  /*274+26*/   L"EXTASPEC",
  /*274+27*/   L"LDEC",
  /*274+28*/   L"MSTART",
  /*274+29*/   L"DUBIOUS",
  /*274+30*/   L"DUP",
  /*274+31*/   L"PIN",
  /*274+32*/   L"POUT",
  /*274+33*/   L"EDUP",
  /*274+34*/   L"SWDEC",
  /*274+35*/   L"QDECL",
  /*274+36*/   L"FORMDEC",
  /*274+37*/   L"FORMSPEC",
  /*274+38*/   L"APPLY",
  /*274+39*/   L"PROC",
  /*274+40*/   L"PROCSPEC",
  /*274+41*/   L"PRED",
  /*274+42*/   L"ZERO",
  /*274+43*/   L"CLEAR",
};
const wchar_t *phrasename_c[NUM_BIPS+NUM_SIMPLE_PHRASES+NUM_SEMANTIC_PHRASES] = {
  /*0+0*/   L"EOF" /*0*/,
  /*0+1*/   L"ch" /*1*/,
  /*0+2*/   L"NL" /*2*/,
  /*0+3*/   L"junk" /*3*/,
  /*4+0*/   L"IDENT",
  /*4+1*/   L"V",
  /*4+2*/   L"N",
  /*4+3*/   L"FM",
  /*4+4*/   L"RP",
  /*4+5*/   L"FP",
  /*4+6*/   L"MP",
  /*4+7*/   L"PP",
  /*4+8*/   L"A",
  /*4+9*/   L"AN",
  /*4+10*/   L"NA",
  /*4+11*/   L"NAN",
  /*4+12*/   L"any",
  /*4+13*/   L"more_NLs",
  /*4+14*/   L"NL_opt",
  /*4+15*/   L"more_Ts",
  /*4+16*/   L"T",
  /*4+17*/   L"simple_type",
  /*4+18*/   L"routine_or_predicate",
  /*4+19*/   L"fn_or_map",
  /*4+20*/   L"OWN_opt",
  /*4+21*/   L"EXTERNAL_opt",
  /*4+22*/   L"EXTERNAL",
  /*4+23*/   L"COMP",
  /*4+24*/   L"ACOMP",
  /*4+25*/   L"exit_or_continue",
  /*4+26*/   L"on_event",
  /*4+27*/   L"BACK",
  /*4+28*/   L"PIDENT",
  /*4+29*/   L"CIDENT",
  /*4+30*/   L"OIDENT",
  /*4+31*/   L"FNAME",
  /*4+32*/   L"DOTL",
  /*4+33*/   L"DOTR",
  /*4+34*/   L"ASEP",
  /*4+35*/   L"CSEP",
  /*4+36*/   L"PSEP",
  /*4+37*/   L"OWNT",
  /*4+38*/   L"DBSEP",
  /*4+39*/   L"INDEF",
  /*4+40*/   L"ORRB",
  /*4+41*/   L"FMANY",
  /*4+42*/   L"RANGERB",
  /*4+43*/   L"FSID",
  /*4+44*/   L"INITDEC",
  /*4+45*/   L"IDENT_and_INITDEC",
  /*4+46*/   L"rest_of_IDENT_and_INITDEC",
  /*4+47*/   L"rest_of_ADEFN",
  /*4+48*/   L"OIDENT_ALIAS_opt",
  /*4+49*/   L"more_IDENT_ALIAS_opts",
  /*4+50*/   L"IDENT_ALIAS_opt",
  /*4+51*/   L"ALIAS_opt",
  /*4+52*/   L"rest_of_INITVAR",
  /*4+53*/   L"Rt_Pred_FPP",
  /*4+54*/   L"bracketed_INDEF_or_IEXP",
  /*4+55*/   L"optional_initialiser_repeat_count",
  /*4+56*/   L"initialiser_item",
  /*4+57*/   L"more_initialiser_items",
  /*4+58*/   L"initialiser_list",
  /*4+59*/   L"optional_initialisation_T",
  /*4+60*/   L"EXTA_item",
  /*4+61*/   L"EXTA_list_opt",
  /*4+62*/   L"EXTA_list",
  /*4+63*/   L"INDEF_or_IEXP",
  /*4+64*/   L"LIST_opt",
  /*4+65*/   L"SS",
  /*4+66*/   L"STATEMENTS",
  /*4+67*/   L"L",
  /*4+68*/   L"SWID",
  /*4+69*/   L"rest_of_SWIDS",
  /*4+70*/   L"SWIDS",
  /*4+71*/   L"rest_of_SWDEFS",
  /*4+72*/   L"SWDEFS",
  /*4+73*/   L"SWDEF",
  /*4+74*/   L"Star_or_IEXP",
  /*4+75*/   L"FM_or_Star",
  /*4+76*/   L"result_types",
  /*4+77*/   L"Rt_Fn_Map_Pred_DECL",
  /*4+78*/   L"NAME_opt",
  /*4+79*/   L"SPEC_opt",
  /*4+80*/   L"ARRAY_stuff",
  /*4+81*/   L"RECORD_DECL",
  /*4+82*/   L"Declaration_T",
  /*4+83*/   L"R",
  /*4+84*/   L"F",
  /*4+85*/   L"M",
  /*4+86*/   L"P",
  /*4+87*/   L"optional_parameters",
  /*4+88*/   L"Rt_CALL",
  /*4+89*/   L"Fn_CALL",
  /*4+90*/   L"Map_CALL",
  /*4+91*/   L"Pred_CALL",
  /*4+92*/   L"PROC_or_PROCSPEC",
  /*4+93*/   L"APP_PROT",
  /*4+94*/   L"ESCARRAY",
  /*4+95*/   L"ESCREC",
  /*4+96*/   L"ESCREC_opt",
  /*4+97*/   L"ESC_ARRAY_or_REC",
  /*4+98*/   L"simple_label",
  /*4+99*/   L"switch_label",
  /*4+100*/   L"MLAB",
  /*4+101*/   L"S",
  /*4+102*/   L"jump_destination",
  /*4+103*/   L"SIGNAL",
  /*4+104*/   L"COMMENT_ALLOWED",
  /*4+105*/   L"COMMENT",
  /*4+106*/   L"COMMENT_T",
  /*4+107*/   L"LHS",
  /*4+108*/   L"IMP",
  /*4+109*/   L"EIMP",
  /*4+110*/   L"XIMP",
  /*4+111*/   L"FELSE_opt",
  /*4+112*/   L"if_or_unless",
  /*4+113*/   L"if_unless_XIMP",
  /*4+114*/   L"if_XIMP_opt",
  /*4+115*/   L"THEN_opt",
  /*4+116*/   L"else_start_IMP_opt",
  /*4+117*/   L"else_if_unless_XIMP_opt",
  /*4+118*/   L"else_if_XIMP_opt",
  /*4+119*/   L"else_final_IMP_opt",
  /*4+120*/   L"start_IMP",
  /*4+121*/   L"final_IMP",
  /*4+122*/   L"more_IMPS",
  /*4+123*/   L"ENDPROG",
  /*4+124*/   L"LIST",
  /*4+125*/   L"REALSLN",
  /*4+126*/   L"CONTROL",
  /*4+127*/   L"STATEMENT",
  /*4+128*/   L"wh_for",
  /*4+129*/   L"cycle_IMP",
  /*4+130*/   L"event_list_def",
  /*4+131*/   L"iu_while_until_for_T",
  /*4+132*/   L"AddressOffsetOp",
  /*4+133*/   L"ADDOP_SEXP_opt",
  /*4+134*/   L"A_or_AN_or_NA_or_NAN",
  /*4+135*/   L"A_or_AN_TYPE_PROT",
  /*4+136*/   L"A_or_AN_TYPE",
  /*4+137*/   L"NA_or_NAN_TYPE",
  /*4+138*/   L"A_or_AN_or_NA_or_NAN_TYPE",
  /*4+139*/   L"VAR_ASSIGN",
  /*4+140*/   L"INIT_DEC_ASSIGNMENTS",
  /*4+141*/   L"rest_of_IDENTS",
  /*4+142*/   L"IDENTS",
  /*4+143*/   L"V_or_N",
  /*4+144*/   L"extra",
  /*4+145*/   L"subevent_and_extra",
  /*4+146*/   L"A_or_AN_TYPE_opt_PROT",
  /*4+147*/   L"NA_or_NAN_TYPE_opt_PROT",
  /*4+148*/   L"V_or_N_TYPE_opt_PROT",
  /*4+149*/   L"IMP_ASSIGN",
  /*4+150*/   L"N_ASS",
  /*4+151*/   L"rest_of_AND_COND",
  /*4+152*/   L"AND_COND",
  /*4+153*/   L"rest_of_OR_COND",
  /*4+154*/   L"OR_COND",
  /*4+155*/   L"rest_of_COND",
  /*4+156*/   L"COND",
  /*4+157*/   L"OP1",
  /*4+158*/   L"OP2",
  /*4+159*/   L"OP3",
  /*4+160*/   L"SIGN",
  /*4+161*/   L"MOD",
  /*4+162*/   L"OP1_EXP",
  /*4+163*/   L"OP2_EXP",
  /*4+164*/   L"OP3_EXP",
  /*4+165*/   L"OP1_EXPS",
  /*4+166*/   L"OP2_EXPS",
  /*4+167*/   L"OP3_EXPS",
  /*4+168*/   L"COMP2_opt",
  /*4+169*/   L"COMP2",
  /*4+170*/   L"COMP1",
  /*4+171*/   L"COMP12_opt",
  /*4+172*/   L"DOT_V_Ns",
  /*4+173*/   L"DOT_V_N",
  /*4+174*/   L"COMPARISON",
  /*4+175*/   L"COMP1OS2",
  /*4+176*/   L"SCOND",
  /*4+177*/   L"RECEXP",
  /*4+178*/   L"UOP",
  /*4+179*/   L"UOP_opt",
  /*4+180*/   L"dot_Vs_opt",
  /*4+181*/   L"dot_Vs",
  /*4+182*/   L"DQ",
  /*4+183*/   L"EXP",
  /*4+184*/   L"EXP2",
  /*4+185*/   L"EXP1",
  /*4+186*/   L"SEXP",
  /*4+187*/   L"COP1",
  /*4+188*/   L"COP2",
  /*4+189*/   L"COP3",
  /*4+190*/   L"CSIGN",
  /*4+191*/   L"CMOD",
  /*4+192*/   L"rest_of_IEXP2_EXPR",
  /*4+193*/   L"IEXP2_EXPR",
  /*4+194*/   L"COP3_IEXP2_optseq",
  /*4+195*/   L"COP2_IEXP1_optseq",
  /*4+196*/   L"COP1_IEXP0_optseq",
  /*4+197*/   L"CUOP_opt",
  /*4+198*/   L"CUOP",
  /*4+199*/   L"ISEXP_EXPR",
  /*4+200*/   L"IEXP2",
  /*4+201*/   L"IEXP1",
  /*4+202*/   L"IEXP0",
  /*4+203*/   L"IEXP",
  /*4+204*/   L"PCONST",
  /*4+205*/   L"ACONST",
  /*4+206*/   L"OCONST",
  /*4+207*/   L"SIGN_opt",
  /*4+208*/   L"RCONST",
  /*4+209*/   L"SCONST",
  /*4+210*/   L"SEQ",
  /*4+211*/   L"FDEF",
  /*4+212*/   L"rest_of_IDENT_or_FITEM",
  /*4+213*/   L"rest_of_IDENT_or_FITEMS",
  /*4+214*/   L"FITEM_and_rest",
  /*4+215*/   L"FITEM_and_more",
  /*4+216*/   L"FMOR_FITEMS",
  /*4+217*/   L"VDEC_or_ADEC",
  /*4+218*/   L"another_MOREA_opt",
  /*4+219*/   L"rest_of_MOREA",
  /*4+220*/   L"MOREA",
  /*4+221*/   L"FITEM",
  /*4+222*/   L"record_field_decl",
  /*4+223*/   L"OR_record_field_declarations",
  /*4+224*/   L"more_record_field_decls",
  /*4+225*/   L"record_field_declarations",
  /*4+226*/   L"CONST_BOUNDS",
  /*4+227*/   L"RCONST_BOUNDS",
  /*4+228*/   L"BOUNDS_PAIR",
  /*4+229*/   L"rest_of_BPL_LIST",
  /*4+230*/   L"BPL_LIST",
  /*4+231*/   L"BPL",
  /*4+232*/   L"another_FPP0",
  /*4+233*/   L"parameter_type",
  /*4+234*/   L"parameter_type_decl",
  /*4+235*/   L"VDEC_or_PROC",
  /*4+236*/   L"FPP",
  /*4+237*/   L"FPP0",
  /*4+238*/   L"FPP1_stuff_opt",
  /*4+239*/   L"FPP1_stuff",
  /*4+240*/   L"FPP1",
  /*4+241*/   L"rest_of_FPP2_opt",
  /*4+242*/   L"FPP2_stuff",
  /*4+243*/   L"FPP2",
  /*4+244*/   L"ADEFN",
  /*4+245*/   L"APP",
  /*4+246*/   L"BASEAPP",
  /*4+247*/   L"APP2",
  /*4+248*/   L"APP3",
  /*4+249*/   L"APP4",
  /*4+250*/   L"APP5",
  /*4+251*/   L"APP6",
  /*4+252*/   L"rest_of_IEXP",
  /*4+253*/   L"const_event_list",
  /*4+254*/   L"N_or_AN_or_NAN",
  /*4+255*/   L"ADDOP_IEXP_opt",
  /*4+256*/   L"rest_of_EQs_init",
  /*4+257*/   L"EQs",
  /*4+258*/   L"INITVAR",
  /*4+259*/   L"CIEXP",
  /*4+260*/   L"RESLEFT_opt",
  /*4+261*/   L"RESRIGHT_opt",
  /*4+262*/   L"RESEXP",
  /*4+263*/   L"V_or_N_or_A_or_AN_or_NA_or_NAN",
  /*4+264*/   L"V_or_N_or_A_or_AN_or_NA_or_NAN_OTHER",
  /*4+265*/   L"NLAB",
  /*4+266*/   L"NPARM",
  /*4+267*/   L"VARP",
  /*4+268*/   L"ARRAYP",
  /*4+269*/   L"NARRAYP",
  /*274+0*/   L"init",
  /*274+1*/   L"terminate",
  /*274+2*/   L"whitespace",
  /*274+3*/   L"Imp77_stropping",
  /*274+4*/   L"CONST",
  /*274+5*/   L"DUMMY",
  /*274+6*/   L"TYPE",
  /*274+7*/   L"PROT",
  /*274+8*/   L"SETPROT",
  /*274+9*/   L"PTYPE",
  /*274+10*/   L"GAPP",
  /*274+11*/   L"LOCAL",
  /*274+12*/   L"GUARD",
  /*274+13*/   L"MCODE",
  /*274+14*/   L"CDUMMY",
  /*274+15*/   L"SETTYPE",
  /*274+16*/   L"OPER",
  /*274+17*/   L"PARAM",
  /*274+18*/   L"BLOCK",
  /*274+19*/   L"OTHER",
  /*274+20*/   L"COMPILE",
  /*274+21*/   L"VDEC",
  /*274+22*/   L"OWNVDEC",
  /*274+23*/   L"EXTVSPEC",
  /*274+24*/   L"ADEC",
  /*274+25*/   L"OWNADEC",
  /*274+26*/   L"EXTASPEC",
  /*274+27*/   L"LDEC",
  /*274+28*/   L"MSTART",
  /*274+29*/   L"DUBIOUS",
  /*274+30*/   L"DUP",
  /*274+31*/   L"PIN",
  /*274+32*/   L"POUT",
  /*274+33*/   L"EDUP",
  /*274+34*/   L"SWDEC",
  /*274+35*/   L"QDECL",
  /*274+36*/   L"FORMDEC",
  /*274+37*/   L"FORMSPEC",
  /*274+38*/   L"APPLY",
  /*274+39*/   L"PROC",
  /*274+40*/   L"PROCSPEC",
  /*274+41*/   L"PRED",
  /*274+42*/   L"ZERO",
  /*274+43*/   L"CLEAR",
};
const int bip_map[NUM_BIPS] = {
  /*0*/   0,
  /*1*/   1,
  /*2*/   2,
  /*3*/   3,
};
const int sequential_phrase_no_to_grammar_index[NUM_SIMPLE_PHRASES] = {
  G_IDENT,  /*0*/
  G_V,  /*4*/
  G_N,  /*8*/
  G_FM,  /*12*/
  G_RP,  /*16*/
  G_FP,  /*20*/
  G_MP,  /*24*/
  G_PP,  /*28*/
  G_A,  /*32*/
  G_AN,  /*36*/
  G_NA,  /*40*/
  G_NAN,  /*44*/
  G_any,  /*48*/
  G_more_NLs,  /*51*/
  G_NL_opt,  /*57*/
  G_more_Ts,  /*63*/
  G_T,  /*69*/
  G_simple_type,  /*76*/
  G_routine_or_predicate,  /*95*/
  G_fn_or_map,  /*100*/
  G_OWN_opt,  /*111*/
  G_EXTERNAL_opt,  /*120*/
  G_EXTERNAL,  /*125*/
  G_COMP,  /*136*/
  G_ACOMP,  /*155*/
  G_exit_or_continue,  /*160*/
  G_on_event,  /*165*/
  G_BACK,  /*170*/
  G_PIDENT,  /*177*/
  G_CIDENT,  /*180*/
  G_OIDENT,  /*183*/
  G_FNAME,  /*186*/
  G_DOTL,  /*189*/
  G_DOTR,  /*192*/
  G_ASEP,  /*195*/
  G_CSEP,  /*198*/
  G_PSEP,  /*201*/
  G_OWNT,  /*204*/
  G_DBSEP,  /*207*/
  G_INDEF,  /*210*/
  G_ORRB,  /*213*/
  G_FMANY,  /*216*/
  G_RANGERB,  /*219*/
  G_FSID,  /*222*/
  G_INITDEC,  /*225*/
  G_IDENT_and_INITDEC,  /*229*/
  G_rest_of_IDENT_and_INITDEC,  /*233*/
  G_rest_of_ADEFN,  /*241*/
  G_OIDENT_ALIAS_opt,  /*248*/
  G_more_IDENT_ALIAS_opts,  /*252*/
  G_IDENT_ALIAS_opt,  /*260*/
  G_ALIAS_opt,  /*264*/
  G_rest_of_INITVAR,  /*271*/
  G_Rt_Pred_FPP,  /*279*/
  G_bracketed_INDEF_or_IEXP,  /*288*/
  G_optional_initialiser_repeat_count,  /*293*/
  G_initialiser_item,  /*304*/
  G_more_initialiser_items,  /*308*/
  G_initialiser_list,  /*315*/
  G_optional_initialisation_T,  /*319*/
  G_EXTA_item,  /*327*/
  G_EXTA_list_opt,  /*331*/
  G_EXTA_list,  /*340*/
  G_INDEF_or_IEXP,  /*344*/
  G_LIST_opt,  /*349*/
  G_SS,  /*354*/
  G_STATEMENTS,  /*361*/
  G_L,  /*369*/
  G_SWID,  /*372*/
  G_rest_of_SWIDS,  /*375*/
  G_SWIDS,  /*383*/
  G_rest_of_SWDEFS,  /*387*/
  G_SWDEFS,  /*395*/
  G_SWDEF,  /*399*/
  G_Star_or_IEXP,  /*404*/
  G_FM_or_Star,  /*409*/
  G_result_types,  /*414*/
  G_Rt_Fn_Map_Pred_DECL,  /*434*/
  G_NAME_opt,  /*440*/
  G_SPEC_opt,  /*445*/
  G_ARRAY_stuff,  /*450*/
  G_RECORD_DECL,  /*460*/
  G_Declaration_T,  /*463*/
  G_R,  /*582*/
  G_F,  /*585*/
  G_M,  /*588*/
  G_P,  /*591*/
  G_optional_parameters,  /*594*/
  G_Rt_CALL,  /*601*/
  G_Fn_CALL,  /*605*/
  G_Map_CALL,  /*609*/
  G_Pred_CALL,  /*613*/
  G_PROC_or_PROCSPEC,  /*617*/
  G_APP_PROT,  /*622*/
  G_ESCARRAY,  /*629*/
  G_ESCREC,  /*636*/
  G_ESCREC_opt,  /*642*/
  G_ESC_ARRAY_or_REC,  /*648*/
  G_simple_label,  /*655*/
  G_switch_label,  /*659*/
  G_MLAB,  /*664*/
  G_S,  /*667*/
  G_jump_destination,  /*670*/
  G_SIGNAL,  /*678*/
  G_COMMENT_ALLOWED,  /*683*/
  G_COMMENT,  /*690*/
  G_COMMENT_T,  /*695*/
  G_LHS,  /*700*/
  G_IMP,  /*710*/
  G_EIMP,  /*766*/
  G_XIMP,  /*779*/
  G_FELSE_opt,  /*788*/
  G_if_or_unless,  /*794*/
  G_if_unless_XIMP,  /*799*/
  G_if_XIMP_opt,  /*805*/
  G_THEN_opt,  /*811*/
  G_else_start_IMP_opt,  /*816*/
  G_else_if_unless_XIMP_opt,  /*822*/
  G_else_if_XIMP_opt,  /*828*/
  G_else_final_IMP_opt,  /*834*/
  G_start_IMP,  /*840*/
  G_final_IMP,  /*848*/
  G_more_IMPS,  /*856*/
  G_ENDPROG,  /*863*/
  G_LIST,  /*868*/
  G_REALSLN,  /*873*/
  G_CONTROL,  /*878*/
  G_STATEMENT,  /*883*/
  G_wh_for,  /*1022*/
  G_cycle_IMP,  /*1029*/
  G_event_list_def,  /*1035*/
  G_iu_while_until_for_T,  /*1040*/
  G_AddressOffsetOp,  /*1059*/
  G_ADDOP_SEXP_opt,  /*1064*/
  G_A_or_AN_or_NA_or_NAN,  /*1070*/
  G_A_or_AN_TYPE_PROT,  /*1079*/
  G_A_or_AN_TYPE,  /*1088*/
  G_NA_or_NAN_TYPE,  /*1095*/
  G_A_or_AN_or_NA_or_NAN_TYPE,  /*1102*/
  G_VAR_ASSIGN,  /*1115*/
  G_INIT_DEC_ASSIGNMENTS,  /*1127*/
  G_rest_of_IDENTS,  /*1154*/
  G_IDENTS,  /*1162*/
  G_V_or_N,  /*1166*/
  G_extra,  /*1180*/
  G_subevent_and_extra,  /*1187*/
  G_A_or_AN_TYPE_opt_PROT,  /*1195*/
  G_NA_or_NAN_TYPE_opt_PROT,  /*1200*/
  G_V_or_N_TYPE_opt_PROT,  /*1207*/
  G_IMP_ASSIGN,  /*1216*/
  G_N_ASS,  /*1233*/
  G_rest_of_AND_COND,  /*1255*/
  G_AND_COND,  /*1261*/
  G_rest_of_OR_COND,  /*1267*/
  G_OR_COND,  /*1273*/
  G_rest_of_COND,  /*1279*/
  G_COND,  /*1286*/
  G_OP1,  /*1292*/
  G_OP2,  /*1305*/
  G_OP3,  /*1314*/
  G_SIGN,  /*1323*/
  G_MOD,  /*1328*/
  G_OP1_EXP,  /*1331*/
  G_OP2_EXP,  /*1336*/
  G_OP3_EXP,  /*1341*/
  G_OP1_EXPS,  /*1346*/
  G_OP2_EXPS,  /*1352*/
  G_OP3_EXPS,  /*1358*/
  G_COMP2_opt,  /*1364*/
  G_COMP2,  /*1369*/
  G_COMP1,  /*1374*/
  G_COMP12_opt,  /*1379*/
  G_DOT_V_Ns,  /*1383*/
  G_DOT_V_N,  /*1389*/
  G_COMPARISON,  /*1395*/
  G_COMP1OS2,  /*1419*/
  G_SCOND,  /*1426*/
  G_RECEXP,  /*1461*/
  G_UOP,  /*1469*/
  G_UOP_opt,  /*1476*/
  G_dot_Vs_opt,  /*1481*/
  G_dot_Vs,  /*1487*/
  G_DQ,  /*1492*/
  G_EXP,  /*1495*/
  G_EXP2,  /*1516*/
  G_EXP1,  /*1521*/
  G_SEXP,  /*1525*/
  G_COP1,  /*1539*/
  G_COP2,  /*1542*/
  G_COP3,  /*1545*/
  G_CSIGN,  /*1548*/
  G_CMOD,  /*1551*/
  G_rest_of_IEXP2_EXPR,  /*1554*/
  G_IEXP2_EXPR,  /*1561*/
  G_COP3_IEXP2_optseq,  /*1565*/
  G_COP2_IEXP1_optseq,  /*1572*/
  G_COP1_IEXP0_optseq,  /*1579*/
  G_CUOP_opt,  /*1586*/
  G_CUOP,  /*1591*/
  G_ISEXP_EXPR,  /*1594*/
  G_IEXP2,  /*1598*/
  G_IEXP1,  /*1603*/
  G_IEXP0,  /*1607*/
  G_IEXP,  /*1619*/
  G_PCONST,  /*1629*/
  G_ACONST,  /*1635*/
  G_OCONST,  /*1638*/
  G_SIGN_opt,  /*1641*/
  G_RCONST,  /*1646*/
  G_SCONST,  /*1651*/
  G_SEQ,  /*1655*/
  G_FDEF,  /*1668*/
  G_rest_of_IDENT_or_FITEM,  /*1674*/
  G_rest_of_IDENT_or_FITEMS,  /*1683*/
  G_FITEM_and_rest,  /*1689*/
  G_FITEM_and_more,  /*1693*/
  G_FMOR_FITEMS,  /*1697*/
  G_VDEC_or_ADEC,  /*1705*/
  G_another_MOREA_opt,  /*1714*/
  G_rest_of_MOREA,  /*1721*/
  G_MOREA,  /*1729*/
  G_FITEM,  /*1737*/
  G_record_field_decl,  /*1745*/
  G_OR_record_field_declarations,  /*1860*/
  G_more_record_field_decls,  /*1867*/
  G_record_field_declarations,  /*1875*/
  G_CONST_BOUNDS,  /*1880*/
  G_RCONST_BOUNDS,  /*1887*/
  G_BOUNDS_PAIR,  /*1894*/
  G_rest_of_BPL_LIST,  /*1899*/
  G_BPL_LIST,  /*1906*/
  G_BPL,  /*1910*/
  G_another_FPP0,  /*1915*/
  G_parameter_type,  /*1921*/
  G_parameter_type_decl,  /*1934*/
  G_VDEC_or_PROC,  /*1949*/
  G_FPP,  /*1962*/
  G_FPP0,  /*1968*/
  G_FPP1_stuff_opt,  /*1972*/
  G_FPP1_stuff,  /*1977*/
  G_FPP1,  /*1984*/
  G_rest_of_FPP2_opt,  /*1989*/
  G_FPP2_stuff,  /*1996*/
  G_FPP2,  /*2004*/
  G_ADEFN,  /*2009*/
  G_APP,  /*2014*/
  G_BASEAPP,  /*2027*/
  G_APP2,  /*2030*/
  G_APP3,  /*2036*/
  G_APP4,  /*2045*/
  G_APP5,  /*2057*/
  G_APP6,  /*2072*/
  G_rest_of_IEXP,  /*2090*/
  G_const_event_list,  /*2096*/
  G_N_or_AN_or_NAN,  /*2100*/
  G_ADDOP_IEXP_opt,  /*2109*/
  G_rest_of_EQs_init,  /*2115*/
  G_EQs,  /*2124*/
  G_INITVAR,  /*2138*/
  G_CIEXP,  /*2145*/
  G_RESLEFT_opt,  /*2149*/
  G_RESRIGHT_opt,  /*2156*/
  G_RESEXP,  /*2163*/
  G_V_or_N_or_A_or_AN_or_NA_or_NAN,  /*2170*/
  G_V_or_N_or_A_or_AN_or_NA_or_NAN_OTHER,  /*2183*/
  G_NLAB,  /*2202*/
  G_NPARM,  /*2205*/
  G_VARP,  /*2211*/
  G_ARRAYP,  /*2217*/
  G_NARRAYP,  /*2224*/
};

const wchar_t *semantic_phrasename[NUM_SEMANTIC_PHRASES] = {
  /*0*/   L"init",
  /*1*/   L"terminate",
  /*2*/   L"whitespace",
  /*3*/   L"Imp77_stropping",
  /*4*/   L"CONST",
  /*5*/   L"DUMMY",
  /*6*/   L"TYPE",
  /*7*/   L"PROT",
  /*8*/   L"SETPROT",
  /*9*/   L"PTYPE",
  /*10*/   L"GAPP",
  /*11*/   L"LOCAL",
  /*12*/   L"GUARD",
  /*13*/   L"MCODE",
  /*14*/   L"CDUMMY",
  /*15*/   L"SETTYPE",
  /*16*/   L"OPER",
  /*17*/   L"PARAM",
  /*18*/   L"BLOCK",
  /*19*/   L"OTHER",
  /*20*/   L"COMPILE",
  /*21*/   L"VDEC",
  /*22*/   L"OWNVDEC",
  /*23*/   L"EXTVSPEC",
  /*24*/   L"ADEC",
  /*25*/   L"OWNADEC",
  /*26*/   L"EXTASPEC",
  /*27*/   L"LDEC",
  /*28*/   L"MSTART",
  /*29*/   L"DUBIOUS",
  /*30*/   L"DUP",
  /*31*/   L"PIN",
  /*32*/   L"POUT",
  /*33*/   L"EDUP",
  /*34*/   L"SWDEC",
  /*35*/   L"QDECL",
  /*36*/   L"FORMDEC",
  /*37*/   L"FORMSPEC",
  /*38*/   L"APPLY",
  /*39*/   L"PROC",
  /*40*/   L"PROCSPEC",
  /*41*/   L"PRED",
  /*42*/   L"ZERO",
  /*43*/   L"CLEAR",
};

const wchar_t *semantic_code[NUM_SEMANTIC_PHRASES] = {
  /*0*/   L"\n"
             "  // peform any initialisation required by the parse-time semantic routines.\n"
             "  // Note that for now, we have no way of declaring data outside of\n"
             "  // those procedures.  Obviously this will have to change.\n"
             "\n"
             "  // LINE RECONSTRUCTION GOES HERE!\n"
             "\n"
             "  return TRUE;\n",
  /*1*/   L"\n"
             "  // perform any final tidy-up required by the parse-time semantic routines.\n"
             "  return TRUE;\n",
  /*2*/   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",
  /*3*/   L"\n"
             "#ifdef IN_PARSER\n"
             "  int debug_stropping = 0;\n"
             "\n"
             "#ifdef NEVER\n"
             "  // move to parser.c ...\n"
             "  auto int wstr2pool(wchar_t *wstring) {\n"
             "    int Sp = Stringpool_nextfree; // really more of a charpool\n"
             "    for (;;) {\n"
             "      _Stringpool(Stringpool_nextfree++) = *wstring;\n"
             "      if (*wstring == 0) return Sp;\n"
             "      wstring++;\n"
             "    }\n"
             "    return Sp;\n"
             "  };\n"
             "#endif\n"
             "\n"
             "  // The source file has already been read naively into source().\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"
             "  // inclusive_start = atom(AtomPos).start;\n"
             "  // exclusive_end = atom(AtomPos).end;\n"
             "  // for (i = inclusive_start; i < exclusive_end; i++) {\n"
             "  //   wint_t c = source(i);\n"
             "  //   if (isalpha(c) && isupper(c)) c = tolower(c);\n"
             "  //   fprintf(stdout, \"%lc\", c);\n"
             "  // }\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 can be encoded as 1D400:1D419 and a:z as 1D41A:1D433 :-)\n"
             "  //\n"
             "  // These look more or less like ordinary text if they happen to be\n"
             "  // 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"
             "\n"
             "  DECLARE(SYM, reconstructed, 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"
             "  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 PARSED.\n"
             "  // uparse.c has been modified so that its implicit whitespace skipping no longer skips '\\n'.\n"
             "  // (Hopefully that did not break algol60)\n"
             "  \n"
             "  // (Whether \\n at the end of a comment is gobbled or not may have to be determined by inspection...)\n"
             "  // And God knows what Imp77 does with '!' comments which seem to be insertable in many unexpected places.\n"
             "\n"
             "  // HOW TO HANDLE ' IN A PARSED COMMENT?\n"
             "\n"
             "  // %COMMENT A ' MESSES UP!\n"
             "  // because it keeps scanning until a closing quote.\n"
             "  // However if you don't scan between quotes, 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.\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"
             "  for (;;) {\n"
             "\n"
             "\n"
             "    source(PP).end = SYM(FP).end; // Keep updated.\n"
             "    WC = SYM(FP++).ch; CHECK_EOF(WC);\n"
             "\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"
             "\n"
             "\n"
             "\n"
             "    else if (WC == '{') {\n"
             "\n"
             "      for (;;) {\n"
             "        WC = SYM(FP++).ch; CHECK_EOF(WC);\n"
             "\n"
             "        if (WC == '\\n') {\n"
             "          --FP; /* re-read the \\n as a significant character */                                                                 // _source(PP).end = SYM(FP-1).end; // point FP back to the newline\n"
             "          break;\n"
             "        }\n"
             "        if (WC == '}') {  // Not sure if \\n should be gobbled for {this style\n"
             "          break; // but still looking.\n"
             "        }\n"
             "      }\n"
             "      continue;\n"
             "    }\n"
             "\n"
             "\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"
             "          } 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"
             "\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"
             "          } else {\n"
             "            _source(PP++).ch = WC;\n"
             "            --FP; _source(PP).end = SYM(FP-1).end; // Leave Peek for later.\n"
             "            break;\n"
             "          }\n"
             "        } else {\n"
             "          _source(PP++).ch = WC;\n"
             "        }\n"
             "      }\n"
             "      continue;\n"
             "    }\n"
             "\n"
             "\n"
             "\n"
             "\n"
             "    else if (WC == ' ' || WC == '\\t' || WC == '\\f') {  // isblank(WC)? Portable Unicode version?\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') && (source(PP-1).ch == 'c')) {  // BEWARE WHEN CHANGING STROPPING ENCODING: Looking for a preceding '%C' ...\n"
             "        _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, A HACK:\n"
             "        int Lookahead = FP;\n"
             "        while (SYM(Lookahead).ch == '\\n' || SYM(Lookahead).ch == ' ' || SYM(Lookahead).ch == '\\t' || SYM(Lookahead).ch == '\\f') {\n"
             "          // No worries about  '{...}' - this behaviour seems to be identical to Imp77's\n"
             "          _SYM(Lookahead).ch = ' ';\n"
             "          Lookahead++;\n"
             "          // gobble following newlines and whitespace before next significant character.\n"
             "        }\n"
             "        continue;\n"
             "      }\n"
             "\n"
             "      if (isalpha(WC) && islower(WC)) { // Unicode equivalents?\n"
             "        WC = toupper(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"
             "    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",
  /*4*/   L"\n"
             "#ifdef IN_PARSER\n"
             "  // At the moment we're primarily interested in identifying the\n"
             "  // string representing the constant.  We'll worry about its value later.\n"
             "  auto void getbase(int base, int *result, int *OK) {\n"
             "    int Backtrack = TP;\n"
             "    int sym = source(TP++).ch;\n"
             "    int val = 0;\n"
             "    for (;;) {\n"
             "      if (('a' <= sym) && (sym <= 'z')) sym = sym - 'a' + 'A';\n"
             "      if ((base <= 10) && (('0' <= sym) && (sym < '0'+base))) {\n"
             "        sym -= '0';\n"
             "      } else if (('0' <= sym) && (sym <= '9')) {\n"
             "        sym = sym - '0';\n"
             "      } else if (('A' <= sym) && (sym < 'A'+base-10)) {\n"
             "        sym = sym - 'A' + 10;\n"
             "      } else {\n"
             "        TP -= 1;\n"
             "        *OK = (TP == Backtrack);\n"
             "        *result = val;\n"
             "        return;\n"
             "      }\n"
             "      val = val * base + sym;\n"
             "      sym = source(TP++).ch;\n"
             "    }\n"
             "  }\n"
             "  // whitespace has been skipped.\n"
             "  int Backtrack = TP;\n"
             "  int base = 10;\n"
             "  int sym = source(TP++).ch;\n"
             "  int peek = source(TP).ch;\n"
             "  int len = 0;\n"
             "  int OK, ignore, decimal;\n"
             "\n"
             "  if (sym == '\\'') {\n"
             "    for (;;) {\n"
             "      sym = source(TP++).ch;\n"
             "      peek = source(TP).ch;\n"
             "      if (sym == '\\'' && peek == '\\'') {\n"
             "        TP += 1; len += 1;\n"
             "      } else if (sym == '\\'') {\n"
             "        break;\n"
             "      } else {\n"
             "        // add to constant\n"
             "        len += 1;\n"
             "      }\n"
             "    }\n"
             "    if (len == 1) {\n"
             "      // type = byte\n"
             "    } else if (len <= 4) {\n"
             "      // type = byte, short, or integer\n"
             "    } else {\n"
             "      // too big! (unless we're allowing %longinteger)\n"
             "    }\n"
             "    return TRUE;\n"
             "  } else if (sym == '\"') {\n"
             "    for (;;) {\n"
             "      sym = source(TP++).ch;\n"
             "      peek = source(TP).ch;\n"
             "      if (sym == '\"' && peek == '\"') {\n"
             "        TP += 1; len += 1;\n"
             "      } else if (sym == '\"') {\n"
             "        break;\n"
             "      } else {\n"
             "        // add to string\n"
             "        len += 1;\n"
             "      }\n"
             "    }\n"
             "    if (len > 255) {\n"
             "      // string capacity exceeded.\n"
             "    }\n"
             "    return TRUE;\n"
             "  } else if ('0' <= sym && sym <= '9') {\n"
             "    TP -= 1;\n"
             "    getbase(10, &base, &OK);\n"
             "    peek = source(TP).ch;\n"
             "    if (peek == '_') {\n"
             "      do {\n"
             "        int nextbase;\n"
             "        sym = source(TP++).ch; // '_'\n"
             "        getbase(base, &nextbase, &OK);\n"
             "        peek = source(TP).ch;\n"
             "        if (peek=='_') base = nextbase;\n"
             "      } while (peek=='_');\n"
             "      return TRUE;\n"
             "    } else if (peek == '.') {\n"
             "      sym = source(TP++).ch; // '.'\n"
             "      peek = source(TP).ch;\n"
             "      getbase(10, &decimal, &OK);\n"
             "      peek = source(TP).ch;\n"
             "\n"
             "      if (peek == '@') {\n"
             "        sym = source(TP++).ch; // '@'\n"
             "        peek = source(TP).ch;\n"
             "        if (peek == '-') {\n"
             "          sym = source(TP++).ch; // '-'\n"
             "          peek = source(TP).ch;\n"
             "        }\n"
             "        getbase(10, &ignore, &OK);\n"
             "      }\n"
             "    } else if (peek == '@') {\n"
             "      sym = source(TP++).ch; // '@'\n"
             "      peek = source(TP).ch;\n"
             "      if (peek == '-') {\n"
             "        sym = source(TP++).ch; // '-'\n"
             "        peek = source(TP).ch;\n"
             "      }\n"
             "      getbase(10, &ignore, &OK);\n"
             "    } else {\n"
             "      return TRUE; // plain number like 123\n"
             "    }\n"
             "    return TRUE;  \n"
             "  } else if (('A' <= sym && sym <= 'Z') || ('a' <= sym && sym <= 'z')) {\n"
             "    int peek = source(TP).ch;\n"
             "    int type = sym; if ('a' <= type && type <= 'z') type = type - 'A' + 'a';\n"
             "    if (peek == '\\'') {\n"
             "      sym = source(TP++).ch;  // '\n"
             "      // M'...' X'...' R'...' etc.\n"
             "      if (type != 'M' && type != 'X' && type != 'R' && type != 'B' && type != 'O') {\n"
             "        TP = Backtrack; return FALSE;\n"
             "      }\n"
             "      for (;;) {\n"
             "        sym = source(TP++).ch;\n"
             "        peek = source(TP).ch;\n"
             "        if (sym == '\\'' && peek == '\\'') {\n"
             "          TP += 1; len += 1;\n"
             "        } else if (sym == '\\'') {\n"
             "          break;\n"
             "        } else {\n"
             "          // add to constant.  CHECK APPROPRIATE RANGE FOR BIN/HEX/OCTAL ETC.\n"
             "          len += 1;\n"
             "        }\n"
             "      }\n"
             "      if ((type == 'M' && len > 4) || len > 8) {\n"
             "        // capacity exceeded\n"
             "      }\n"
             "      return TRUE;\n"
             "    } else {\n"
             "      TP = Backtrack; return FALSE;\n"
             "    }\n"
             "  } else {\n"
             "    TP = Backtrack; return FALSE;\n"
             "  }\n"
             "\n"
             "  (void)literal_descriptor(Backtrack, TP);\n"
             "\n"
             "#endif\n"
             "  return TRUE;\n",
  /*5*/   L" return TRUE; ",
  /*6*/   L" return TRUE; ",
  /*7*/   L" return TRUE; ",
  /*8*/   L" return TRUE; ",
  /*9*/   L" return TRUE; ",
  /*10*/   L" return TRUE; ",
  /*11*/   L" return TRUE; ",
  /*12*/   L" return TRUE; ",
  /*13*/   L" return TRUE; ",
  /*14*/   L" return TRUE; ",
  /*15*/   L" return TRUE; ",
  /*16*/   L" return TRUE; ",
  /*17*/   L" return TRUE; ",
  /*18*/   L" return TRUE; ",
  /*19*/   L" return TRUE; ",
  /*20*/   L" return TRUE; ",
  /*21*/   L" return TRUE; ",
  /*22*/   L" return TRUE; ",
  /*23*/   L" return TRUE; ",
  /*24*/   L" return TRUE; ",
  /*25*/   L" return TRUE; ",
  /*26*/   L" return TRUE; ",
  /*27*/   L" return TRUE; ",
  /*28*/   L" return TRUE; ",
  /*29*/   L" return TRUE; ",
  /*30*/   L" return TRUE; ",
  /*31*/   L" return TRUE; ",
  /*32*/   L" return TRUE; ",
  /*33*/   L" return TRUE; ",
  /*34*/   L" return TRUE; ",
  /*35*/   L" return TRUE; ",
  /*36*/   L" return TRUE; ",
  /*37*/   L" return TRUE; ",
  /*38*/   L" return TRUE; ",
  /*39*/   L" return TRUE; ",
  /*40*/   L" return TRUE; ",
  /*41*/   L" return TRUE; ",
  /*42*/   L" return TRUE; ",
  /*43*/   L" return TRUE; ",
};

parsefn parsetime[NUM_SEMANTIC_PHRASES] = {
  /*0*/   &parse_init,
  /*1*/   &parse_terminate,
  /*2*/   &parse_whitespace,
  /*3*/   &parse_Imp77_stropping,
  /*4*/   &parse_CONST,
  /*5*/   &parse_DUMMY,
  /*6*/   &parse_TYPE,
  /*7*/   &parse_PROT,
  /*8*/   &parse_SETPROT,
  /*9*/   &parse_PTYPE,
  /*10*/   &parse_GAPP,
  /*11*/   &parse_LOCAL,
  /*12*/   &parse_GUARD,
  /*13*/   &parse_MCODE,
  /*14*/   &parse_CDUMMY,
  /*15*/   &parse_SETTYPE,
  /*16*/   &parse_OPER,
  /*17*/   &parse_PARAM,
  /*18*/   &parse_BLOCK,
  /*19*/   &parse_OTHER,
  /*20*/   &parse_COMPILE,
  /*21*/   &parse_VDEC,
  /*22*/   &parse_OWNVDEC,
  /*23*/   &parse_EXTVSPEC,
  /*24*/   &parse_ADEC,
  /*25*/   &parse_OWNADEC,
  /*26*/   &parse_EXTASPEC,
  /*27*/   &parse_LDEC,
  /*28*/   &parse_MSTART,
  /*29*/   &parse_DUBIOUS,
  /*30*/   &parse_DUP,
  /*31*/   &parse_PIN,
  /*32*/   &parse_POUT,
  /*33*/   &parse_EDUP,
  /*34*/   &parse_SWDEC,
  /*35*/   &parse_QDECL,
  /*36*/   &parse_FORMDEC,
  /*37*/   &parse_FORMSPEC,
  /*38*/   &parse_APPLY,
  /*39*/   &parse_PROC,
  /*40*/   &parse_PROCSPEC,
  /*41*/   &parse_PRED,
  /*42*/   &parse_ZERO,
  /*43*/   &parse_CLEAR,
};

// 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,
  /*260*/   NULL,
  /*261*/   NULL,
  /*262*/   NULL,
  /*263*/   NULL,
  /*264*/   NULL,
  /*265*/   NULL,
  /*266*/   NULL,
  /*267*/   NULL,
  /*268*/   NULL,
  /*269*/   NULL,
  /*270*/   NULL,
  /*271*/   NULL,
  /*272*/   NULL,
  /*273*/   NULL,
  /*274*/   NULL,
  /*275*/   NULL,
  /*276*/   NULL,
  /*277*/   NULL,
  /*278*/   NULL,
  /*279*/   NULL,
  /*280*/   NULL,
  /*281*/   NULL,
  /*282*/   NULL,
  /*283*/   NULL,
  /*284*/   NULL,
  /*285*/   NULL,
  /*286*/   NULL,
  /*287*/   NULL,
  /*288*/   NULL,
  /*289*/   NULL,
  /*290*/   NULL,
  /*291*/   NULL,
  /*292*/   NULL,
  /*293*/   NULL,
  /*294*/   NULL,
  /*295*/   NULL,
  /*296*/   NULL,
  /*297*/   NULL,
  /*298*/   NULL,
  /*299*/   NULL,
  /*300*/   NULL,
  /*301*/   NULL,
  /*302*/   NULL,
  /*303*/   NULL,
  /*304*/   NULL,
  /*305*/   NULL,
  /*306*/   NULL,
  /*307*/   NULL,
  /*308*/   NULL,
  /*309*/   NULL,
  /*310*/   NULL,
  /*311*/   NULL,
  /*312*/   NULL,
  /*313*/   NULL,
  /*314*/   NULL,
  /*315*/   NULL,
  /*316*/   NULL,
  /*317*/   NULL,
};
const wchar_t *keyword[NUM_KEYWORDS] = {
  /*  0*/   L"",
  /*  1*/   L";",
  /*  2*/   L"integer",
  /*  3*/   L"real",
  /*  4*/   L"byteinteger",
  /*  5*/   L"byte",
  /*  6*/   L"shortinteger",
  /*  7*/   L"short",
  /*  8*/   L"longinteger",
  /*  9*/   L"longreal",
  /* 10*/   L"long",
  /* 11*/   L"routine",
  /* 12*/   L"predicate",
  /* 13*/   L"function",
  /* 14*/   L"fn",
  /* 15*/   L"map",
  /* 16*/   L"namefn",
  /* 17*/   L"namefunction",
  /* 18*/   L"own",
  /* 19*/   L"constant",
  /* 20*/   L"const",
  /* 21*/   L"external",
  /* 22*/   L"system",
  /* 23*/   L"dynamic",
  /* 24*/   L"prim",
  /* 25*/   L"perm",
  /* 26*/   L"=",
  /* 27*/   L">=",
  /* 28*/   L">",
  /* 29*/   L"<=",
  /* 30*/   L"<",
  /* 31*/   L"#",
  /* 32*/   L"\\=",
  /* 33*/   L"<>",
  /* 34*/   L"~=",
  /* 35*/   L"==",
  /* 36*/   L"##",
  /* 37*/   L"exit",
  /* 38*/   L"continue",
  /* 39*/   L"onevent",
  /* 40*/   L"on",
  /* 41*/   L"return",
  /* 42*/   L"true",
  /* 43*/   L"false",
  /* 44*/   L".",
  /* 45*/   L",",
  /* 46*/   L":",
  /* 47*/   L"*",
  /* 48*/   L")",
  /* 49*/   L"alias",
  /* 50*/   L"(",
  /* 51*/   L"string",
  /* 52*/   L"record",
  /* 53*/   L"name",
  /* 54*/   L"spec",
  /* 55*/   L"array",
  /* 56*/   L"recordformatspec",
  /* 57*/   L"recordformat",
  /* 58*/   L"switch",
  /* 59*/   L"label",
  /* 60*/   L"_",
  /* 61*/   L"signalevent",
  /* 62*/   L"signal",
  /* 63*/   L"comment",
  /* 64*/   L"!",
  /* 65*/   L"result",
  /* 66*/   L"stop",
  /* 67*/   L"monitor",
  /* 68*/   L"->",
  /* 69*/   L"start",
  /* 70*/   L"then",
  /* 71*/   L"finish",
  /* 72*/   L"else",
  /* 73*/   L"if",
  /* 74*/   L"unless",
  /* 75*/   L"and",
  /* 76*/   L"endofprogram",
  /* 77*/   L"endoffile",
  /* 78*/   L"list",
  /* 79*/   L"endoflist",
  /* 80*/   L"realslong",
  /* 81*/   L"realsnormal",
  /* 82*/   L"control",
  /* 83*/   L"diagnose",
  /* 84*/   L"begin",
  /* 85*/   L"program",
  /* 86*/   L"endofperm",
  /* 87*/   L"end",
  /* 88*/   L"cycle",
  /* 89*/   L"repeat",
  /* 90*/   L"until",
  /* 91*/   L"*=",
  /* 92*/   L"include",
  /* 93*/   L"option",
  /* 94*/   L"while",
  /* 95*/   L"for",
  /* 96*/   L"++",
  /* 97*/   L"--",
  /* 98*/   L"<-",
  /* 99*/   L"or",
  /*100*/   L"<<",
  /*101*/   L">>",
  /*102*/   L"^^",
  /*103*/   L"^",
  /*104*/   L"\\\\",
  /*105*/   L"\\",
  /*106*/   L"&",
  /*107*/   L"//",
  /*108*/   L"/",
  /*109*/   L"+",
  /*110*/   L"-",
  /*111*/   L"!!",
  /*112*/   L"|",
  /*113*/   L"0",
  /*114*/   L"not",
  /*115*/   L"~",
  /*116*/   L"\\\"",
};
const wchar_t *regexps[NUM_REGEXPS] = {
  /*0*/   L"^[A-Z][A-Z0-9 ]*",
  /*1*/   L"^.",
};
const int gram[NUM_GRAMMAR /* 2231 */] = {

// P<IDENT> = ...;
  /*  0*/ COUNT_OF_ALTS    | 0x000001,
  /*  1*/ COUNT_OF_PHRASES | 0x000002,
  /*  2*/ SEMANTIC_TYPE    | NEGATED_PHRASE     | S_CONST,
  /*  3*/ REGEXP_TYPE      | WHITESPACE_ALLOWED | 0x000000,  /* ^[A-Z][A-Z0-9 ]* */

// P<V> = ...;
  /*  4*/ COUNT_OF_ALTS    | 0x000001,
  /*  5*/ COUNT_OF_PHRASES | 0x000002,
  /*  6*/ PHRASE_TYPE      | G_IDENT,
  /*  7*/ PHRASE_TYPE      | G_ESC_ARRAY_or_REC,

// P<N> = ...;
  /*  8*/ COUNT_OF_ALTS    | 0x000001,
  /*  9*/ COUNT_OF_PHRASES | 0x000002,
  /* 10*/ PHRASE_TYPE      | G_IDENT,
  /* 11*/ PHRASE_TYPE      | G_ESC_ARRAY_or_REC,

// P<FM> = ...;
  /* 12*/ COUNT_OF_ALTS    | 0x000001,
  /* 13*/ COUNT_OF_PHRASES | 0x000002,
  /* 14*/ PHRASE_TYPE      | G_IDENT,
  /* 15*/ PHRASE_TYPE      | G_ESC_ARRAY_or_REC,

// P<RP> = ...;
  /* 16*/ COUNT_OF_ALTS    | 0x000001,
  /* 17*/ COUNT_OF_PHRASES | 0x000002,
  /* 18*/ PHRASE_TYPE      | G_IDENT,
  /* 19*/ PHRASE_TYPE      | G_ESC_ARRAY_or_REC,

// P<FP> = ...;
  /* 20*/ COUNT_OF_ALTS    | 0x000001,
  /* 21*/ COUNT_OF_PHRASES | 0x000002,
  /* 22*/ PHRASE_TYPE      | G_IDENT,
  /* 23*/ PHRASE_TYPE      | G_ESC_ARRAY_or_REC,

// P<MP> = ...;
  /* 24*/ COUNT_OF_ALTS    | 0x000001,
  /* 25*/ COUNT_OF_PHRASES | 0x000002,
  /* 26*/ PHRASE_TYPE      | G_IDENT,
  /* 27*/ PHRASE_TYPE      | G_ESC_ARRAY_or_REC,

// P<PP> = ...;
  /* 28*/ COUNT_OF_ALTS    | 0x000001,
  /* 29*/ COUNT_OF_PHRASES | 0x000002,
  /* 30*/ PHRASE_TYPE      | G_IDENT,
  /* 31*/ PHRASE_TYPE      | G_ESC_ARRAY_or_REC,

// P<A> = ...;
  /* 32*/ COUNT_OF_ALTS    | 0x000001,
  /* 33*/ COUNT_OF_PHRASES | 0x000002,
  /* 34*/ PHRASE_TYPE      | G_IDENT,
  /* 35*/ PHRASE_TYPE      | G_ESC_ARRAY_or_REC,

// P<AN> = ...;
  /* 36*/ COUNT_OF_ALTS    | 0x000001,
  /* 37*/ COUNT_OF_PHRASES | 0x000002,
  /* 38*/ PHRASE_TYPE      | G_IDENT,
  /* 39*/ PHRASE_TYPE      | G_ESC_ARRAY_or_REC,

// P<NA> = ...;
  /* 40*/ COUNT_OF_ALTS    | 0x000001,
  /* 41*/ COUNT_OF_PHRASES | 0x000002,
  /* 42*/ PHRASE_TYPE      | G_IDENT,
  /* 43*/ PHRASE_TYPE      | G_ESC_ARRAY_or_REC,

// P<NAN> = ...;
  /* 44*/ COUNT_OF_ALTS    | 0x000001,
  /* 45*/ COUNT_OF_PHRASES | 0x000002,
  /* 46*/ PHRASE_TYPE      | G_IDENT,
  /* 47*/ PHRASE_TYPE      | G_ESC_ARRAY_or_REC,

// P<any> = ...;
  /* 48*/ COUNT_OF_ALTS    | 0x000001,
  /* 49*/ COUNT_OF_PHRASES | 0x000001,
  /* 50*/ REGEXP_TYPE      | WHITESPACE_ALLOWED | 0x000001,  /* ^. */

// P<more_NLs> = ...;
  /* 51*/ COUNT_OF_ALTS    | 0x000002,
  /* 52*/ COUNT_OF_PHRASES | 0x000002,
  /* 53*/ BIP_TYPE         | B_NL,
  /* 54*/ PHRASE_TYPE      | G_more_NLs,
  /* 55*/ COUNT_OF_PHRASES | 0x000001,
  /* 56*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<NL_opt> = ...;
  /* 57*/ COUNT_OF_ALTS    | 0x000002,
  /* 58*/ COUNT_OF_PHRASES | 0x000002,
  /* 59*/ BIP_TYPE         | B_NL,
  /* 60*/ PHRASE_TYPE      | G_more_NLs,
  /* 61*/ COUNT_OF_PHRASES | 0x000001,
  /* 62*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<more_Ts> = ...;
  /* 63*/ COUNT_OF_ALTS    | 0x000002,
  /* 64*/ COUNT_OF_PHRASES | 0x000002,
  /* 65*/ PHRASE_TYPE      | G_T,
  /* 66*/ PHRASE_TYPE      | G_more_Ts,
  /* 67*/ COUNT_OF_PHRASES | 0x000001,
  /* 68*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<T> = ...;
  /* 69*/ COUNT_OF_ALTS    | 0x000002,
  /* 70*/ COUNT_OF_PHRASES | 0x000002,
  /* 71*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000001,  /* ; */
  /* 72*/ PHRASE_TYPE      | G_more_Ts,
  /* 73*/ COUNT_OF_PHRASES | 0x000002,
  /* 74*/ BIP_TYPE         | B_NL,
  /* 75*/ PHRASE_TYPE      | G_more_Ts,

// P<simple_type> = ...;
  /* 76*/ COUNT_OF_ALTS    | 0x000009,
  /* 77*/ COUNT_OF_PHRASES | 0x000001,
  /* 78*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000002,  /* integer */
  /* 79*/ COUNT_OF_PHRASES | 0x000001,
  /* 80*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000003,  /* real */
  /* 81*/ COUNT_OF_PHRASES | 0x000001,
  /* 82*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000004,  /* byteinteger */
  /* 83*/ COUNT_OF_PHRASES | 0x000001,
  /* 84*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000005,  /* byte */
  /* 85*/ COUNT_OF_PHRASES | 0x000001,
  /* 86*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000006,  /* shortinteger */
  /* 87*/ COUNT_OF_PHRASES | 0x000001,
  /* 88*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000007,  /* short */
  /* 89*/ COUNT_OF_PHRASES | 0x000001,
  /* 90*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000008,  /* longinteger */
  /* 91*/ COUNT_OF_PHRASES | 0x000001,
  /* 92*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000009,  /* longreal */
  /* 93*/ COUNT_OF_PHRASES | 0x000001,
  /* 94*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00000a,  /* long */

// P<routine_or_predicate> = ...;
  /* 95*/ COUNT_OF_ALTS    | 0x000002,
  /* 96*/ COUNT_OF_PHRASES | 0x000001,
  /* 97*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00000b,  /* routine */
  /* 98*/ COUNT_OF_PHRASES | 0x000001,
  /* 99*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00000c,  /* predicate */

// P<fn_or_map> = ...;
  /*100*/ COUNT_OF_ALTS    | 0x000005,
  /*101*/ COUNT_OF_PHRASES | 0x000001,
  /*102*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00000d,  /* function */
  /*103*/ COUNT_OF_PHRASES | 0x000001,
  /*104*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00000e,  /* fn */
  /*105*/ COUNT_OF_PHRASES | 0x000001,
  /*106*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00000f,  /* map */
  /*107*/ COUNT_OF_PHRASES | 0x000001,
  /*108*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000010,  /* namefn */
  /*109*/ COUNT_OF_PHRASES | 0x000001,
  /*110*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000011,  /* namefunction */

// P<OWN_opt> = ...;
  /*111*/ COUNT_OF_ALTS    | 0x000004,
  /*112*/ COUNT_OF_PHRASES | 0x000001,
  /*113*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000012,  /* own */
  /*114*/ COUNT_OF_PHRASES | 0x000001,
  /*115*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000013,  /* constant */
  /*116*/ COUNT_OF_PHRASES | 0x000001,
  /*117*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000014,  /* const */
  /*118*/ COUNT_OF_PHRASES | 0x000001,
  /*119*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<EXTERNAL_opt> = ...;
  /*120*/ COUNT_OF_ALTS    | 0x000002,
  /*121*/ COUNT_OF_PHRASES | 0x000001,
  /*122*/ PHRASE_TYPE      | G_EXTERNAL,
  /*123*/ COUNT_OF_PHRASES | 0x000001,
  /*124*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<EXTERNAL> = ...;
  /*125*/ COUNT_OF_ALTS    | 0x000005,
  /*126*/ COUNT_OF_PHRASES | 0x000001,
  /*127*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000015,  /* external */
  /*128*/ COUNT_OF_PHRASES | 0x000001,
  /*129*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000016,  /* system */
  /*130*/ COUNT_OF_PHRASES | 0x000001,
  /*131*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000017,  /* dynamic */
  /*132*/ COUNT_OF_PHRASES | 0x000001,
  /*133*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000018,  /* prim */
  /*134*/ COUNT_OF_PHRASES | 0x000001,
  /*135*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000019,  /* perm */

// P<COMP> = ...;
  /*136*/ COUNT_OF_ALTS    | 0x000009,
  /*137*/ COUNT_OF_PHRASES | 0x000001,
  /*138*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00001a,  /* = */
  /*139*/ COUNT_OF_PHRASES | 0x000001,
  /*140*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00001b,  /* >= */
  /*141*/ COUNT_OF_PHRASES | 0x000001,
  /*142*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00001c,  /* > */
  /*143*/ COUNT_OF_PHRASES | 0x000001,
  /*144*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00001d,  /* <= */
  /*145*/ COUNT_OF_PHRASES | 0x000001,
  /*146*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00001e,  /* < */
  /*147*/ COUNT_OF_PHRASES | 0x000001,
  /*148*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00001f,  /* # */
  /*149*/ COUNT_OF_PHRASES | 0x000001,
  /*150*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000020,  /* \= */
  /*151*/ COUNT_OF_PHRASES | 0x000001,
  /*152*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000021,  /* <> */
  /*153*/ COUNT_OF_PHRASES | 0x000001,
  /*154*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000022,  /* ~= */

// P<ACOMP> = ...;
  /*155*/ COUNT_OF_ALTS    | 0x000002,
  /*156*/ COUNT_OF_PHRASES | 0x000001,
  /*157*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000023,  /* == */
  /*158*/ COUNT_OF_PHRASES | 0x000001,
  /*159*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000024,  /* ## */

// P<exit_or_continue> = ...;
  /*160*/ COUNT_OF_ALTS    | 0x000002,
  /*161*/ COUNT_OF_PHRASES | 0x000001,
  /*162*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000025,  /* exit */
  /*163*/ COUNT_OF_PHRASES | 0x000001,
  /*164*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000026,  /* continue */

// P<on_event> = ...;
  /*165*/ COUNT_OF_ALTS    | 0x000002,
  /*166*/ COUNT_OF_PHRASES | 0x000001,
  /*167*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000027,  /* onevent */
  /*168*/ COUNT_OF_PHRASES | 0x000001,
  /*169*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000028,  /* on */

// P<BACK> = ...;
  /*170*/ COUNT_OF_ALTS    | 0x000003,
  /*171*/ COUNT_OF_PHRASES | 0x000001,
  /*172*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000029,  /* return */
  /*173*/ COUNT_OF_PHRASES | 0x000001,
  /*174*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002a,  /* true */
  /*175*/ COUNT_OF_PHRASES | 0x000001,
  /*176*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002b,  /* false */

// P<PIDENT> = ...;
  /*177*/ COUNT_OF_ALTS    | 0x000001,
  /*178*/ COUNT_OF_PHRASES | 0x000001,
  /*179*/ PHRASE_TYPE      | G_IDENT,

// P<CIDENT> = ...;
  /*180*/ COUNT_OF_ALTS    | 0x000001,
  /*181*/ COUNT_OF_PHRASES | 0x000001,
  /*182*/ PHRASE_TYPE      | G_IDENT,

// P<OIDENT> = ...;
  /*183*/ COUNT_OF_ALTS    | 0x000001,
  /*184*/ COUNT_OF_PHRASES | 0x000001,
  /*185*/ PHRASE_TYPE      | G_IDENT,

// P<FNAME> = ...;
  /*186*/ COUNT_OF_ALTS    | 0x000001,
  /*187*/ COUNT_OF_PHRASES | 0x000001,
  /*188*/ PHRASE_TYPE      | G_IDENT,

// P<DOTL> = ...;
  /*189*/ COUNT_OF_ALTS    | 0x000001,
  /*190*/ COUNT_OF_PHRASES | 0x000001,
  /*191*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002c,  /* . */

// P<DOTR> = ...;
  /*192*/ COUNT_OF_ALTS    | 0x000001,
  /*193*/ COUNT_OF_PHRASES | 0x000001,
  /*194*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002c,  /* . */

// P<ASEP> = ...;
  /*195*/ COUNT_OF_ALTS    | 0x000001,
  /*196*/ COUNT_OF_PHRASES | 0x000001,
  /*197*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002d,  /* , */

// P<CSEP> = ...;
  /*198*/ COUNT_OF_ALTS    | 0x000001,
  /*199*/ COUNT_OF_PHRASES | 0x000001,
  /*200*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002d,  /* , */

// P<PSEP> = ...;
  /*201*/ COUNT_OF_ALTS    | 0x000001,
  /*202*/ COUNT_OF_PHRASES | 0x000001,
  /*203*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002d,  /* , */

// P<OWNT> = ...;
  /*204*/ COUNT_OF_ALTS    | 0x000001,
  /*205*/ COUNT_OF_PHRASES | 0x000001,
  /*206*/ PHRASE_TYPE      | G_T,

// P<DBSEP> = ...;
  /*207*/ COUNT_OF_ALTS    | 0x000001,
  /*208*/ COUNT_OF_PHRASES | 0x000001,
  /*209*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002e,  /* : */

// P<INDEF> = ...;
  /*210*/ COUNT_OF_ALTS    | 0x000001,
  /*211*/ COUNT_OF_PHRASES | 0x000001,
  /*212*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002f,  /* * */

// P<ORRB> = ...;
  /*213*/ COUNT_OF_ALTS    | 0x000001,
  /*214*/ COUNT_OF_PHRASES | 0x000001,
  /*215*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* ) */

// P<FMANY> = ...;
  /*216*/ COUNT_OF_ALTS    | 0x000001,
  /*217*/ COUNT_OF_PHRASES | 0x000001,
  /*218*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002f,  /* * */

// P<RANGERB> = ...;
  /*219*/ COUNT_OF_ALTS    | 0x000001,
  /*220*/ COUNT_OF_PHRASES | 0x000001,
  /*221*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* ) */

// P<FSID> = ...;
  /*222*/ COUNT_OF_ALTS    | 0x000001,
  /*223*/ COUNT_OF_PHRASES | 0x000001,
  /*224*/ PHRASE_TYPE      | G_IDENT,

// P<INITDEC> = ...;
  /*225*/ COUNT_OF_ALTS    | 0x000001,
  /*226*/ COUNT_OF_PHRASES | 0x000002,
  /*227*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_CDUMMY,
  /*228*/ PHRASE_TYPE      | G_INIT_DEC_ASSIGNMENTS,

// P<IDENT_and_INITDEC> = ...;
  /*229*/ COUNT_OF_ALTS    | 0x000001,
  /*230*/ COUNT_OF_PHRASES | 0x000002,
  /*231*/ PHRASE_TYPE      | G_IDENT,
  /*232*/ PHRASE_TYPE      | G_INITDEC,

// P<rest_of_IDENT_and_INITDEC> = ...;
  /*233*/ COUNT_OF_ALTS    | 0x000002,
  /*234*/ COUNT_OF_PHRASES | 0x000004,
  /*235*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002d,  /* , */
  /*236*/ PHRASE_TYPE      | G_NL_opt,
  /*237*/ PHRASE_TYPE      | G_IDENT_and_INITDEC,
  /*238*/ PHRASE_TYPE      | G_rest_of_IDENT_and_INITDEC,
  /*239*/ COUNT_OF_PHRASES | 0x000001,
  /*240*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<rest_of_ADEFN> = ...;
  /*241*/ COUNT_OF_ALTS    | 0x000002,
  /*242*/ COUNT_OF_PHRASES | 0x000003,
  /*243*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002d,  /* , */
  /*244*/ PHRASE_TYPE      | G_NL_opt,
  /*245*/ PHRASE_TYPE      | G_ADEFN,
  /*246*/ COUNT_OF_PHRASES | 0x000001,
  /*247*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

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

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

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

// P<ALIAS_opt> = ...;
  /*264*/ COUNT_OF_ALTS    | 0x000002,
  /*265*/ COUNT_OF_PHRASES | 0x000003,
  /*266*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000031,  /* alias */
  /*267*/ PHRASE_TYPE      | G_ACONST,
  /*268*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_OTHER,
  /*269*/ COUNT_OF_PHRASES | 0x000001,
  /*270*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<rest_of_INITVAR> = ...;
  /*271*/ COUNT_OF_ALTS    | 0x000002,
  /*272*/ COUNT_OF_PHRASES | 0x000004,
  /*273*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002d,  /* , */
  /*274*/ PHRASE_TYPE      | G_NL_opt,
  /*275*/ PHRASE_TYPE      | G_INITVAR,
  /*276*/ PHRASE_TYPE      | G_rest_of_INITVAR,
  /*277*/ COUNT_OF_PHRASES | 0x000001,
  /*278*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<Rt_Pred_FPP> = ...;
  /*279*/ COUNT_OF_ALTS    | 0x000002,
  /*280*/ COUNT_OF_PHRASES | 0x000003,
  /*281*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* ( */
  /*282*/ PHRASE_TYPE      | G_FPP,
  /*283*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* ) */
  /*284*/ COUNT_OF_PHRASES | 0x000003,
  /*285*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_PIN,
  /*286*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */
  /*287*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_POUT,

// P<bracketed_INDEF_or_IEXP> = ...;
  /*288*/ COUNT_OF_ALTS    | 0x000001,
  /*289*/ COUNT_OF_PHRASES | 0x000003,
  /*290*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* ( */
  /*291*/ PHRASE_TYPE      | G_INDEF_or_IEXP,
  /*292*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* ) */

// P<optional_initialiser_repeat_count> = ...;
  /*293*/ COUNT_OF_ALTS    | 0x000003,
  /*294*/ COUNT_OF_PHRASES | 0x000003,
  /*295*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* ( */
  /*296*/ PHRASE_TYPE      | G_IEXP,
  /*297*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* ) */
  /*298*/ COUNT_OF_PHRASES | 0x000003,
  /*299*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* ( */
  /*300*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002f,  /* * */
  /*301*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* ) */
  /*302*/ COUNT_OF_PHRASES | 0x000001,
  /*303*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<initialiser_item> = ...;
  /*304*/ COUNT_OF_ALTS    | 0x000001,
  /*305*/ COUNT_OF_PHRASES | 0x000002,
  /*306*/ PHRASE_TYPE      | G_IEXP,
  /*307*/ PHRASE_TYPE      | G_optional_initialiser_repeat_count,

// P<more_initialiser_items> = ...;
  /*308*/ COUNT_OF_ALTS    | 0x000002,
  /*309*/ COUNT_OF_PHRASES | 0x000003,
  /*310*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002d,  /* , */
  /*311*/ PHRASE_TYPE      | G_NL_opt,
  /*312*/ PHRASE_TYPE      | G_initialiser_list,
  /*313*/ COUNT_OF_PHRASES | 0x000001,
  /*314*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<initialiser_list> = ...;
  /*315*/ COUNT_OF_ALTS    | 0x000001,
  /*316*/ COUNT_OF_PHRASES | 0x000002,
  /*317*/ PHRASE_TYPE      | G_initialiser_item,
  /*318*/ PHRASE_TYPE      | G_more_initialiser_items,

// P<optional_initialisation_T> = ...;
  /*319*/ COUNT_OF_ALTS    | 0x000002,
  /*320*/ COUNT_OF_PHRASES | 0x000004,
  /*321*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00001a,  /* = */
  /*322*/ PHRASE_TYPE      | G_NL_opt,
  /*323*/ PHRASE_TYPE      | G_initialiser_list,
  /*324*/ PHRASE_TYPE      | G_OWNT,
  /*325*/ COUNT_OF_PHRASES | 0x000001,
  /*326*/ PHRASE_TYPE      | G_T,

// P<EXTA_item> = ...;
  /*327*/ COUNT_OF_ALTS    | 0x000001,
  /*328*/ COUNT_OF_PHRASES | 0x000002,
  /*329*/ PHRASE_TYPE      | G_OIDENT_ALIAS_opt,
  /*330*/ PHRASE_TYPE      | G_CONST_BOUNDS,

// P<EXTA_list_opt> = ...;
  /*331*/ COUNT_OF_ALTS    | 0x000003,
  /*332*/ COUNT_OF_PHRASES | 0x000001,
  /*333*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002d,  /* , */
  /*334*/ COUNT_OF_PHRASES | 0x000003,
  /*335*/ PHRASE_TYPE      | G_NL_opt,
  /*336*/ PHRASE_TYPE      | G_EXTA_item,
  /*337*/ PHRASE_TYPE      | G_EXTA_list_opt,
  /*338*/ COUNT_OF_PHRASES | 0x000001,
  /*339*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<EXTA_list> = ...;
  /*340*/ COUNT_OF_ALTS    | 0x000001,
  /*341*/ COUNT_OF_PHRASES | 0x000002,
  /*342*/ PHRASE_TYPE      | G_EXTA_item,
  /*343*/ PHRASE_TYPE      | G_EXTA_list_opt,

// P<INDEF_or_IEXP> = ...;
  /*344*/ COUNT_OF_ALTS    | 0x000002,
  /*345*/ COUNT_OF_PHRASES | 0x000001,
  /*346*/ PHRASE_TYPE      | G_INDEF,
  /*347*/ COUNT_OF_PHRASES | 0x000001,
  /*348*/ PHRASE_TYPE      | G_IEXP,

// P<LIST_opt> = ...;
  /*349*/ COUNT_OF_ALTS    | 0x000002,
  /*350*/ COUNT_OF_PHRASES | 0x000001,
  /*351*/ PHRASE_TYPE      | G_LIST,
  /*352*/ COUNT_OF_PHRASES | 0x000001,
  /*353*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<SS> = ...;
  /*354*/ COUNT_OF_ALTS    | 0x000001,
  /*355*/ COUNT_OF_PHRASES | 0x000005,
  /*356*/ SEMANTIC_TYPE    | S_init,
  /*357*/ SEMANTIC_TYPE    | S_Imp77_stropping,
  /*358*/ PHRASE_TYPE      | G_NL_opt,
  /*359*/ PHRASE_TYPE      | G_STATEMENTS,
  /*360*/ SEMANTIC_TYPE    | S_terminate,

// P<STATEMENTS> = ...;
  /*361*/ COUNT_OF_ALTS    | 0x000003,
  /*362*/ COUNT_OF_PHRASES | 0x000001,
  /*363*/ BIP_TYPE         | WHITESPACE_ALLOWED | B_EOF,
  /*364*/ COUNT_OF_PHRASES | 0x000002,
  /*365*/ PHRASE_TYPE      | G_STATEMENT,
  /*366*/ PHRASE_TYPE      | G_STATEMENTS,
  /*367*/ COUNT_OF_PHRASES | 0x000001,
  /*368*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<L> = ...;
  /*369*/ COUNT_OF_ALTS    | 0x000001,
  /*370*/ COUNT_OF_PHRASES | 0x000001,
  /*371*/ PHRASE_TYPE      | G_IDENT,

// P<SWID> = ...;
  /*372*/ COUNT_OF_ALTS    | 0x000001,
  /*373*/ COUNT_OF_PHRASES | 0x000001,
  /*374*/ PHRASE_TYPE      | G_IDENT,

// P<rest_of_SWIDS> = ...;
  /*375*/ COUNT_OF_ALTS    | 0x000002,
  /*376*/ COUNT_OF_PHRASES | 0x000004,
  /*377*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002d,  /* , */
  /*378*/ PHRASE_TYPE      | G_NL_opt,
  /*379*/ PHRASE_TYPE      | G_SWID,
  /*380*/ PHRASE_TYPE      | G_rest_of_SWIDS,
  /*381*/ COUNT_OF_PHRASES | 0x000001,
  /*382*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<SWIDS> = ...;
  /*383*/ COUNT_OF_ALTS    | 0x000001,
  /*384*/ COUNT_OF_PHRASES | 0x000002,
  /*385*/ PHRASE_TYPE      | G_SWID,
  /*386*/ PHRASE_TYPE      | G_rest_of_SWIDS,

// P<rest_of_SWDEFS> = ...;
  /*387*/ COUNT_OF_ALTS    | 0x000002,
  /*388*/ COUNT_OF_PHRASES | 0x000004,
  /*389*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002d,  /* , */
  /*390*/ PHRASE_TYPE      | G_NL_opt,
  /*391*/ PHRASE_TYPE      | G_SWDEFS,
  /*392*/ PHRASE_TYPE      | G_rest_of_SWDEFS,
  /*393*/ COUNT_OF_PHRASES | 0x000001,
  /*394*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<SWDEFS> = ...;
  /*395*/ COUNT_OF_ALTS    | 0x000001,
  /*396*/ COUNT_OF_PHRASES | 0x000002,
  /*397*/ PHRASE_TYPE      | G_SWDEF,
  /*398*/ PHRASE_TYPE      | G_rest_of_SWDEFS,

// P<SWDEF> = ...;
  /*399*/ COUNT_OF_ALTS    | 0x000001,
  /*400*/ COUNT_OF_PHRASES | 0x000003,
  /*401*/ PHRASE_TYPE      | G_SWIDS,
  /*402*/ PHRASE_TYPE      | G_CONST_BOUNDS,
  /*403*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_COMPILE,

// P<Star_or_IEXP> = ...;
  /*404*/ COUNT_OF_ALTS    | 0x000002,
  /*405*/ COUNT_OF_PHRASES | 0x000001,
  /*406*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002f,  /* * */
  /*407*/ COUNT_OF_PHRASES | 0x000001,
  /*408*/ PHRASE_TYPE      | G_IEXP,

// P<FM_or_Star> = ...;
  /*409*/ COUNT_OF_ALTS    | 0x000002,
  /*410*/ COUNT_OF_PHRASES | 0x000001,
  /*411*/ PHRASE_TYPE      | G_FM,
  /*412*/ COUNT_OF_PHRASES | 0x000001,
  /*413*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002f,  /* * */

// P<result_types> = ...;
  /*414*/ COUNT_OF_ALTS    | 0x000004,
  /*415*/ COUNT_OF_PHRASES | 0x000001,
  /*416*/ PHRASE_TYPE      | G_simple_type,
  /*417*/ COUNT_OF_PHRASES | 0x000006,
  /*418*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000002,  /* integer */
  /*419*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* ( */
  /*420*/ PHRASE_TYPE      | G_IEXP,
  /*421*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002e,  /* : */
  /*422*/ PHRASE_TYPE      | G_IEXP,
  /*423*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* ) */
  /*424*/ COUNT_OF_PHRASES | 0x000004,
  /*425*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000033,  /* string */
  /*426*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* ( */
  /*427*/ PHRASE_TYPE      | G_Star_or_IEXP,
  /*428*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* ) */
  /*429*/ COUNT_OF_PHRASES | 0x000004,
  /*430*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000034,  /* record */
  /*431*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* ( */
  /*432*/ PHRASE_TYPE      | G_FM_or_Star,
  /*433*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* ) */

// P<Rt_Fn_Map_Pred_DECL> = ...;
  /*434*/ COUNT_OF_ALTS    | 0x000002,
  /*435*/ COUNT_OF_PHRASES | 0x000001,
  /*436*/ PHRASE_TYPE      | G_routine_or_predicate,
  /*437*/ COUNT_OF_PHRASES | 0x000002,
  /*438*/ PHRASE_TYPE      | G_result_types,
  /*439*/ PHRASE_TYPE      | G_fn_or_map,

// P<NAME_opt> = ...;
  /*440*/ COUNT_OF_ALTS    | 0x000002,
  /*441*/ COUNT_OF_PHRASES | 0x000001,
  /*442*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000035,  /* name */
  /*443*/ COUNT_OF_PHRASES | 0x000001,
  /*444*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<SPEC_opt> = ...;
  /*445*/ COUNT_OF_ALTS    | 0x000002,
  /*446*/ COUNT_OF_PHRASES | 0x000001,
  /*447*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000036,  /* spec */
  /*448*/ COUNT_OF_PHRASES | 0x000001,
  /*449*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<ARRAY_stuff> = ...;
  /*450*/ COUNT_OF_ALTS    | 0x000002,
  /*451*/ COUNT_OF_PHRASES | 0x000002,
  /*452*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000037,  /* array */
  /*453*/ PHRASE_TYPE      | G_NAME_opt,
  /*454*/ COUNT_OF_PHRASES | 0x000005,
  /*455*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000037,  /* array */
  /*456*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* ( */
  /*457*/ PHRASE_TYPE      | G_IEXP,
  /*458*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* ) */
  /*459*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000035,  /* name */

// P<RECORD_DECL> = ...;
  /*460*/ COUNT_OF_ALTS    | 0x000001,
  /*461*/ COUNT_OF_PHRASES | 0x000001,
  /*462*/ PHRASE_TYPE      | G_MOREA,

// P<Declaration_T> = ...;
  /*463*/ COUNT_OF_ALTS    | 0x00000e,
  /*464*/ COUNT_OF_PHRASES | 0x000008,
  /*465*/ PHRASE_TYPE      | G_simple_type,
  /*466*/ PHRASE_TYPE      | G_NAME_opt,
  /*467*/ PHRASE_TYPE      | G_ARRAY_stuff,
  /*468*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_COMPILE,
  /*469*/ SEMANTIC_TYPE    | S_ADEC,
  /*470*/ PHRASE_TYPE      | G_ADEFN,
  /*471*/ PHRASE_TYPE      | G_rest_of_ADEFN,
  /*472*/ PHRASE_TYPE      | G_T,
  /*473*/ COUNT_OF_PHRASES | 0x000007,
  /*474*/ PHRASE_TYPE      | G_simple_type,
  /*475*/ PHRASE_TYPE      | G_NAME_opt,
  /*476*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_COMPILE,
  /*477*/ SEMANTIC_TYPE    | S_VDEC,
  /*478*/ PHRASE_TYPE      | G_IDENT_and_INITDEC,
  /*479*/ PHRASE_TYPE      | G_rest_of_IDENT_and_INITDEC,
  /*480*/ PHRASE_TYPE      | G_T,
  /*481*/ COUNT_OF_PHRASES | 0x00000b,
  /*482*/ PHRASE_TYPE      | G_OWN_opt,
  /*483*/ PHRASE_TYPE      | G_result_types,
  /*484*/ PHRASE_TYPE      | G_NAME_opt,
  /*485*/ PHRASE_TYPE      | G_ARRAY_stuff,
  /*486*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_COMPILE,
  /*487*/ SEMANTIC_TYPE    | S_OWNADEC,
  /*488*/ PHRASE_TYPE      | G_OIDENT,
  /*489*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_SETTYPE,
  /*490*/ PHRASE_TYPE      | G_ALIAS_opt,
  /*491*/ PHRASE_TYPE      | G_CONST_BOUNDS,
  /*492*/ PHRASE_TYPE      | G_optional_initialisation_T,
  /*493*/ COUNT_OF_PHRASES | 0x000008,
  /*494*/ PHRASE_TYPE      | G_OWN_opt,
  /*495*/ PHRASE_TYPE      | G_result_types,
  /*496*/ PHRASE_TYPE      | G_NAME_opt,
  /*497*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_COMPILE,
  /*498*/ SEMANTIC_TYPE    | S_OWNVDEC,
  /*499*/ PHRASE_TYPE      | G_INITVAR,
  /*500*/ PHRASE_TYPE      | G_rest_of_INITVAR,
  /*501*/ PHRASE_TYPE      | G_T,
  /*502*/ COUNT_OF_PHRASES | 0x000009,
  /*503*/ PHRASE_TYPE      | G_EXTERNAL_opt,
  /*504*/ PHRASE_TYPE      | G_Rt_Fn_Map_Pred_DECL,
  /*505*/ PHRASE_TYPE      | G_SPEC_opt,
  /*506*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_COMPILE,
  /*507*/ PHRASE_TYPE      | G_PROC_or_PROCSPEC,
  /*508*/ PHRASE_TYPE      | G_PIDENT,
  /*509*/ PHRASE_TYPE      | G_ALIAS_opt,
  /*510*/ PHRASE_TYPE      | G_Rt_Pred_FPP,
  /*511*/ PHRASE_TYPE      | G_T,
  /*512*/ COUNT_OF_PHRASES | 0x000008,
  /*513*/ PHRASE_TYPE      | G_EXTERNAL_opt,
  /*514*/ PHRASE_TYPE      | G_result_types,
  /*515*/ PHRASE_TYPE      | G_NAME_opt,
  /*516*/ PHRASE_TYPE      | G_ARRAY_stuff,
  /*517*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_COMPILE,
  /*518*/ SEMANTIC_TYPE    | S_EXTASPEC,
  /*519*/ PHRASE_TYPE      | G_EXTA_list,
  /*520*/ PHRASE_TYPE      | G_T,
  /*521*/ COUNT_OF_PHRASES | 0x000008,
  /*522*/ PHRASE_TYPE      | G_EXTERNAL_opt,
  /*523*/ PHRASE_TYPE      | G_result_types,
  /*524*/ PHRASE_TYPE      | G_NAME_opt,
  /*525*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_COMPILE,
  /*526*/ SEMANTIC_TYPE    | S_EXTVSPEC,
  /*527*/ PHRASE_TYPE      | G_IDENT_ALIAS_opt,
  /*528*/ PHRASE_TYPE      | G_more_IDENT_ALIAS_opts,
  /*529*/ PHRASE_TYPE      | G_T,
  /*530*/ COUNT_OF_PHRASES | 0x000009,
  /*531*/ PHRASE_TYPE      | G_EXTERNAL,
  /*532*/ PHRASE_TYPE      | G_result_types,
  /*533*/ PHRASE_TYPE      | G_NAME_opt,
  /*534*/ PHRASE_TYPE      | G_ARRAY_stuff,
  /*535*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000036,  /* spec */
  /*536*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_COMPILE,
  /*537*/ SEMANTIC_TYPE    | S_EXTASPEC,
  /*538*/ PHRASE_TYPE      | G_EXTA_list,
  /*539*/ PHRASE_TYPE      | G_T,
  /*540*/ COUNT_OF_PHRASES | 0x000009,
  /*541*/ PHRASE_TYPE      | G_EXTERNAL,
  /*542*/ PHRASE_TYPE      | G_result_types,
  /*543*/ PHRASE_TYPE      | G_NAME_opt,
  /*544*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000036,  /* spec */
  /*545*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_COMPILE,
  /*546*/ SEMANTIC_TYPE    | S_EXTVSPEC,
  /*547*/ PHRASE_TYPE      | G_IDENT_ALIAS_opt,
  /*548*/ PHRASE_TYPE      | G_more_IDENT_ALIAS_opts,
  /*549*/ PHRASE_TYPE      | G_T,
  /*550*/ COUNT_OF_PHRASES | 0x000004,
  /*551*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000038,  /* recordformatspec */
  /*552*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_COMPILE,
  /*553*/ PHRASE_TYPE      | G_FSID,
  /*554*/ PHRASE_TYPE      | G_T,
  /*555*/ COUNT_OF_PHRASES | 0x000007,
  /*556*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000039,  /* recordformat */
  /*557*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_COMPILE,
  /*558*/ PHRASE_TYPE      | G_FSID,
  /*559*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* ( */
  /*560*/ PHRASE_TYPE      | G_record_field_declarations,
  /*561*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* ) */
  /*562*/ PHRASE_TYPE      | G_T,
  /*563*/ COUNT_OF_PHRASES | 0x000005,
  /*564*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00003a,  /* switch */
  /*565*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_COMPILE,
  /*566*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_SWDEC,
  /*567*/ PHRASE_TYPE      | G_SWDEFS,
  /*568*/ PHRASE_TYPE      | G_T,
  /*569*/ COUNT_OF_PHRASES | 0x000005,
  /*570*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00003b,  /* label */
  /*571*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_COMPILE,
  /*572*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_LDEC,
  /*573*/ PHRASE_TYPE      | G_IDENTS,
  /*574*/ PHRASE_TYPE      | G_T,
  /*575*/ COUNT_OF_PHRASES | 0x000006,
  /*576*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000035,  /* name */
  /*577*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_COMPILE,
  /*578*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_VDEC,
  /*579*/ PHRASE_TYPE      | G_IDENT_and_INITDEC,
  /*580*/ PHRASE_TYPE      | G_rest_of_IDENT_and_INITDEC,
  /*581*/ PHRASE_TYPE      | G_T,

// P<R> = ...;
  /*582*/ COUNT_OF_ALTS    | 0x000001,
  /*583*/ COUNT_OF_PHRASES | 0x000001,
  /*584*/ PHRASE_TYPE      | G_IDENT,

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

// P<M> = ...;
  /*588*/ COUNT_OF_ALTS    | 0x000001,
  /*589*/ COUNT_OF_PHRASES | 0x000001,
  /*590*/ PHRASE_TYPE      | G_IDENT,

// P<P> = ...;
  /*591*/ COUNT_OF_ALTS    | 0x000001,
  /*592*/ COUNT_OF_PHRASES | 0x000001,
  /*593*/ PHRASE_TYPE      | G_IDENT,

// P<optional_parameters> = ...;
  /*594*/ COUNT_OF_ALTS    | 0x000002,
  /*595*/ COUNT_OF_PHRASES | 0x000003,
  /*596*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* ( */
  /*597*/ PHRASE_TYPE      | G_APP,
  /*598*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* ) */
  /*599*/ COUNT_OF_PHRASES | 0x000001,
  /*600*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<Rt_CALL> = ...;
  /*601*/ COUNT_OF_ALTS    | 0x000001,
  /*602*/ COUNT_OF_PHRASES | 0x000002,
  /*603*/ PHRASE_TYPE      | G_R,
  /*604*/ PHRASE_TYPE      | G_optional_parameters,

// P<Fn_CALL> = ...;
  /*605*/ COUNT_OF_ALTS    | 0x000001,
  /*606*/ COUNT_OF_PHRASES | 0x000002,
  /*607*/ PHRASE_TYPE      | G_F,
  /*608*/ PHRASE_TYPE      | G_optional_parameters,

// P<Map_CALL> = ...;
  /*609*/ COUNT_OF_ALTS    | 0x000001,
  /*610*/ COUNT_OF_PHRASES | 0x000002,
  /*611*/ PHRASE_TYPE      | G_M,
  /*612*/ PHRASE_TYPE      | G_optional_parameters,

// P<Pred_CALL> = ...;
  /*613*/ COUNT_OF_ALTS    | 0x000001,
  /*614*/ COUNT_OF_PHRASES | 0x000002,
  /*615*/ PHRASE_TYPE      | G_P,
  /*616*/ PHRASE_TYPE      | G_optional_parameters,

// P<PROC_or_PROCSPEC> = ...;
  /*617*/ COUNT_OF_ALTS    | 0x000002,
  /*618*/ COUNT_OF_PHRASES | 0x000001,
  /*619*/ SEMANTIC_TYPE    | S_PROC,
  /*620*/ COUNT_OF_PHRASES | 0x000001,
  /*621*/ SEMANTIC_TYPE    | S_PROCSPEC,

// P<APP_PROT> = ...;
  /*622*/ COUNT_OF_ALTS    | 0x000002,
  /*623*/ COUNT_OF_PHRASES | 0x000002,
  /*624*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_PROT,
  /*625*/ PHRASE_TYPE      | G_APP,
  /*626*/ COUNT_OF_PHRASES | 0x000002,
  /*627*/ PHRASE_TYPE      | G_APP,
  /*628*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_SETPROT,

// P<ESCARRAY> = ...;
  /*629*/ COUNT_OF_ALTS    | 0x000001,
  /*630*/ COUNT_OF_PHRASES | 0x000005,
  /*631*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* ( */
  /*632*/ PHRASE_TYPE      | G_APP_PROT,
  /*633*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* ) */
  /*634*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_APPLY,
  /*635*/ PHRASE_TYPE      | G_ESCREC_opt,

// P<ESCREC> = ...;
  /*636*/ COUNT_OF_ALTS    | 0x000001,
  /*637*/ COUNT_OF_PHRASES | 0x000004,
  /*638*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00003c,  /* _ */
  /*639*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_GUARD,
  /*640*/ PHRASE_TYPE      | G_V_or_N_or_A_or_AN_or_NA_or_NAN_OTHER,
  /*641*/ PHRASE_TYPE      | G_ESC_ARRAY_or_REC,

// P<ESCREC_opt> = ...;
  /*642*/ COUNT_OF_ALTS    | 0x000002,
  /*643*/ COUNT_OF_PHRASES | 0x000002,
  /*644*/ PHRASE_TYPE      | G_ESCREC,
  /*645*/ PHRASE_TYPE      | G_ESC_ARRAY_or_REC,
  /*646*/ COUNT_OF_PHRASES | 0x000001,
  /*647*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<ESC_ARRAY_or_REC> = ...;
  /*648*/ COUNT_OF_ALTS    | 0x000003,
  /*649*/ COUNT_OF_PHRASES | 0x000001,
  /*650*/ PHRASE_TYPE      | G_ESCARRAY,
  /*651*/ COUNT_OF_PHRASES | 0x000001,
  /*652*/ PHRASE_TYPE      | G_ESCREC,
  /*653*/ COUNT_OF_PHRASES | 0x000001,
  /*654*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<simple_label> = ...;
  /*655*/ COUNT_OF_ALTS    | 0x000001,
  /*656*/ COUNT_OF_PHRASES | 0x000002,
  /*657*/ PHRASE_TYPE      | G_L,
  /*658*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002e,  /* : */

// P<switch_label> = ...;
  /*659*/ COUNT_OF_ALTS    | 0x000001,
  /*660*/ COUNT_OF_PHRASES | 0x000003,
  /*661*/ PHRASE_TYPE      | G_S,
  /*662*/ PHRASE_TYPE      | G_bracketed_INDEF_or_IEXP,
  /*663*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002e,  /* : */

// P<MLAB> = ...;
  /*664*/ COUNT_OF_ALTS    | 0x000001,
  /*665*/ COUNT_OF_PHRASES | 0x000001,
  /*666*/ PHRASE_TYPE      | G_L,

// P<S> = ...;
  /*667*/ COUNT_OF_ALTS    | 0x000001,
  /*668*/ COUNT_OF_PHRASES | 0x000001,
  /*669*/ PHRASE_TYPE      | G_IDENT,

// P<jump_destination> = ...;
  /*670*/ COUNT_OF_ALTS    | 0x000002,
  /*671*/ COUNT_OF_PHRASES | 0x000004,
  /*672*/ PHRASE_TYPE      | G_S,
  /*673*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* ( */
  /*674*/ PHRASE_TYPE      | G_EXP,
  /*675*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* ) */
  /*676*/ COUNT_OF_PHRASES | 0x000001,
  /*677*/ PHRASE_TYPE      | G_L,

// P<SIGNAL> = ...;
  /*678*/ COUNT_OF_ALTS    | 0x000002,
  /*679*/ COUNT_OF_PHRASES | 0x000001,
  /*680*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00003d,  /* signalevent */
  /*681*/ COUNT_OF_PHRASES | 0x000001,
  /*682*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00003e,  /* signal */

// P<COMMENT_ALLOWED> = ...;
  /*683*/ COUNT_OF_ALTS    | 0x000002,
  /*684*/ COUNT_OF_PHRASES | 0x000003,
  /*685*/ PHRASE_TYPE      | NEGATED_PHRASE     | G_T,
  /*686*/ PHRASE_TYPE      | G_any,
  /*687*/ PHRASE_TYPE      | G_COMMENT_ALLOWED,
  /*688*/ COUNT_OF_PHRASES | 0x000001,
  /*689*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<COMMENT> = ...;
  /*690*/ COUNT_OF_ALTS    | 0x000002,
  /*691*/ COUNT_OF_PHRASES | 0x000001,
  /*692*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00003f,  /* comment */
  /*693*/ COUNT_OF_PHRASES | 0x000001,
  /*694*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000040,  /* ! */

// P<COMMENT_T> = ...;
  /*695*/ COUNT_OF_ALTS    | 0x000001,
  /*696*/ COUNT_OF_PHRASES | 0x000003,
  /*697*/ PHRASE_TYPE      | G_COMMENT,
  /*698*/ PHRASE_TYPE      | G_COMMENT_ALLOWED,
  /*699*/ PHRASE_TYPE      | G_T,

// P<LHS> = ...;
  /*700*/ COUNT_OF_ALTS    | 0x000003,
  /*701*/ COUNT_OF_PHRASES | 0x000002,
  /*702*/ PHRASE_TYPE      | G_V,
  /*703*/ PHRASE_TYPE      | G_ESC_ARRAY_or_REC,
  /*704*/ COUNT_OF_PHRASES | 0x000002,
  /*705*/ PHRASE_TYPE      | G_N,
  /*706*/ PHRASE_TYPE      | G_ESC_ARRAY_or_REC,
  /*707*/ COUNT_OF_PHRASES | 0x000002,
  /*708*/ PHRASE_TYPE      | G_Map_CALL,
  /*709*/ PHRASE_TYPE      | G_ESCREC,

// P<IMP> = ...;
  /*710*/ COUNT_OF_ALTS    | 0x00000d,
  /*711*/ COUNT_OF_PHRASES | 0x000004,
  /*712*/ PHRASE_TYPE      | G_LHS,
  /*713*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_PROT,
  /*714*/ PHRASE_TYPE      | G_IMP_ASSIGN,
  /*715*/ PHRASE_TYPE      | G_more_IMPS,
  /*716*/ COUNT_OF_PHRASES | 0x000003,
  /*717*/ PHRASE_TYPE      | G_N,
  /*718*/ PHRASE_TYPE      | G_N_ASS,
  /*719*/ PHRASE_TYPE      | G_more_IMPS,
  /*720*/ COUNT_OF_PHRASES | 0x000002,
  /*721*/ PHRASE_TYPE      | G_Rt_CALL,
  /*722*/ PHRASE_TYPE      | G_more_IMPS,
  /*723*/ COUNT_OF_PHRASES | 0x000002,
  /*724*/ PHRASE_TYPE      | G_BACK,
  /*725*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_BLOCK,
  /*726*/ COUNT_OF_PHRASES | 0x000005,
  /*727*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000041,  /* result */
  /*728*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000023,  /* == */
  /*729*/ PHRASE_TYPE      | G_NL_opt,
  /*730*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_BLOCK,
  /*731*/ PHRASE_TYPE      | G_V_or_N_TYPE_opt_PROT,
  /*732*/ COUNT_OF_PHRASES | 0x000005,
  /*733*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000041,  /* result */
  /*734*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00001a,  /* = */
  /*735*/ PHRASE_TYPE      | G_NL_opt,
  /*736*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_BLOCK,
  /*737*/ PHRASE_TYPE      | G_EXP,
  /*738*/ COUNT_OF_PHRASES | 0x000001,
  /*739*/ PHRASE_TYPE      | G_exit_or_continue,
  /*740*/ COUNT_OF_PHRASES | 0x000006,
  /*741*/ PHRASE_TYPE      | G_AN,
  /*742*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000023,  /* == */
  /*743*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_SETTYPE,
  /*744*/ PHRASE_TYPE      | G_NL_opt,
  /*745*/ PHRASE_TYPE      | G_A_or_AN_TYPE_opt_PROT,
  /*746*/ PHRASE_TYPE      | G_more_IMPS,
  /*747*/ COUNT_OF_PHRASES | 0x000006,
  /*748*/ PHRASE_TYPE      | G_NAN,
  /*749*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000023,  /* == */
  /*750*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_SETTYPE,
  /*751*/ PHRASE_TYPE      | G_NL_opt,
  /*752*/ PHRASE_TYPE      | G_NA_or_NAN_TYPE_opt_PROT,
  /*753*/ PHRASE_TYPE      | G_more_IMPS,
  /*754*/ COUNT_OF_PHRASES | 0x000001,
  /*755*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000042,  /* stop */
  /*756*/ COUNT_OF_PHRASES | 0x000002,
  /*757*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000043,  /* monitor */
  /*758*/ PHRASE_TYPE      | G_more_IMPS,
  /*759*/ COUNT_OF_PHRASES | 0x000002,
  /*760*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000044,  /* -> */
  /*761*/ PHRASE_TYPE      | G_jump_destination,
  /*762*/ COUNT_OF_PHRASES | 0x000003,
  /*763*/ PHRASE_TYPE      | G_SIGNAL,
  /*764*/ PHRASE_TYPE      | G_IEXP,
  /*765*/ PHRASE_TYPE      | G_subevent_and_extra,

// P<EIMP> = ...;
  /*766*/ COUNT_OF_ALTS    | 0x000003,
  /*767*/ COUNT_OF_PHRASES | 0x000002,
  /*768*/ PHRASE_TYPE      | G_COND,
  /*769*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000045,  /* start */
  /*770*/ COUNT_OF_PHRASES | 0x000003,
  /*771*/ PHRASE_TYPE      | G_COND,
  /*772*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000046,  /* then */
  /*773*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000045,  /* start */
  /*774*/ COUNT_OF_PHRASES | 0x000004,
  /*775*/ PHRASE_TYPE      | G_COND,
  /*776*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000046,  /* then */
  /*777*/ PHRASE_TYPE      | G_IMP,
  /*778*/ PHRASE_TYPE      | G_else_start_IMP_opt,

// P<XIMP> = ...;
  /*779*/ COUNT_OF_ALTS    | 0x000002,
  /*780*/ COUNT_OF_PHRASES | 0x000004,
  /*781*/ PHRASE_TYPE      | G_COND,
  /*782*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000046,  /* then */
  /*783*/ PHRASE_TYPE      | G_IMP,
  /*784*/ PHRASE_TYPE      | G_else_if_XIMP_opt,
  /*785*/ COUNT_OF_PHRASES | 0x000002,
  /*786*/ PHRASE_TYPE      | G_COND,
  /*787*/ PHRASE_TYPE      | G_THEN_opt,

// P<FELSE_opt> = ...;
  /*788*/ COUNT_OF_ALTS    | 0x000002,
  /*789*/ COUNT_OF_PHRASES | 0x000002,
  /*790*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000047,  /* finish */
  /*791*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000048,  /* else */
  /*792*/ COUNT_OF_PHRASES | 0x000001,
  /*793*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<if_or_unless> = ...;
  /*794*/ COUNT_OF_ALTS    | 0x000002,
  /*795*/ COUNT_OF_PHRASES | 0x000001,
  /*796*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000049,  /* if */
  /*797*/ COUNT_OF_PHRASES | 0x000001,
  /*798*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00004a,  /* unless */

// P<if_unless_XIMP> = ...;
  /*799*/ COUNT_OF_ALTS    | 0x000002,
  /*800*/ COUNT_OF_PHRASES | 0x000002,
  /*801*/ PHRASE_TYPE      | G_if_or_unless,
  /*802*/ PHRASE_TYPE      | G_XIMP,
  /*803*/ COUNT_OF_PHRASES | 0x000001,
  /*804*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<if_XIMP_opt> = ...;
  /*805*/ COUNT_OF_ALTS    | 0x000002,
  /*806*/ COUNT_OF_PHRASES | 0x000002,
  /*807*/ PHRASE_TYPE      | G_if_or_unless,
  /*808*/ PHRASE_TYPE      | G_XIMP,
  /*809*/ COUNT_OF_PHRASES | 0x000001,
  /*810*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<THEN_opt> = ...;
  /*811*/ COUNT_OF_ALTS    | 0x000002,
  /*812*/ COUNT_OF_PHRASES | 0x000001,
  /*813*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000046,  /* then */
  /*814*/ COUNT_OF_PHRASES | 0x000001,
  /*815*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<else_start_IMP_opt> = ...;
  /*816*/ COUNT_OF_ALTS    | 0x000002,
  /*817*/ COUNT_OF_PHRASES | 0x000002,
  /*818*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000048,  /* else */
  /*819*/ PHRASE_TYPE      | G_start_IMP,
  /*820*/ COUNT_OF_PHRASES | 0x000001,
  /*821*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<else_if_unless_XIMP_opt> = ...;
  /*822*/ COUNT_OF_ALTS    | 0x000002,
  /*823*/ COUNT_OF_PHRASES | 0x000002,
  /*824*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000048,  /* else */
  /*825*/ PHRASE_TYPE      | G_if_unless_XIMP,
  /*826*/ COUNT_OF_PHRASES | 0x000001,
  /*827*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<else_if_XIMP_opt> = ...;
  /*828*/ COUNT_OF_ALTS    | 0x000002,
  /*829*/ COUNT_OF_PHRASES | 0x000002,
  /*830*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000048,  /* else */
  /*831*/ PHRASE_TYPE      | G_if_XIMP_opt,
  /*832*/ COUNT_OF_PHRASES | 0x000001,
  /*833*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<else_final_IMP_opt> = ...;
  /*834*/ COUNT_OF_ALTS    | 0x000002,
  /*835*/ COUNT_OF_PHRASES | 0x000002,
  /*836*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000048,  /* else */
  /*837*/ PHRASE_TYPE      | G_final_IMP,
  /*838*/ COUNT_OF_PHRASES | 0x000001,
  /*839*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<start_IMP> = ...;
  /*840*/ COUNT_OF_ALTS    | 0x000003,
  /*841*/ COUNT_OF_PHRASES | 0x000001,
  /*842*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000045,  /* start */
  /*843*/ COUNT_OF_PHRASES | 0x000002,
  /*844*/ PHRASE_TYPE      | G_if_or_unless,
  /*845*/ PHRASE_TYPE      | G_EIMP,
  /*846*/ COUNT_OF_PHRASES | 0x000001,
  /*847*/ PHRASE_TYPE      | G_IMP,

// P<final_IMP> = ...;
  /*848*/ COUNT_OF_ALTS    | 0x000003,
  /*849*/ COUNT_OF_PHRASES | 0x000001,
  /*850*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000045,  /* start */
  /*851*/ COUNT_OF_PHRASES | 0x000002,
  /*852*/ PHRASE_TYPE      | G_if_or_unless,
  /*853*/ PHRASE_TYPE      | G_EIMP,
  /*854*/ COUNT_OF_PHRASES | 0x000001,
  /*855*/ PHRASE_TYPE      | G_IMP,

// P<more_IMPS> = ...;
  /*856*/ COUNT_OF_ALTS    | 0x000002,
  /*857*/ COUNT_OF_PHRASES | 0x000003,
  /*858*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00004b,  /* and */
  /*859*/ PHRASE_TYPE      | G_NL_opt,
  /*860*/ PHRASE_TYPE      | G_IMP,
  /*861*/ COUNT_OF_PHRASES | 0x000001,
  /*862*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<ENDPROG> = ...;
  /*863*/ COUNT_OF_ALTS    | 0x000002,
  /*864*/ COUNT_OF_PHRASES | 0x000001,
  /*865*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00004c,  /* endofprogram */
  /*866*/ COUNT_OF_PHRASES | 0x000001,
  /*867*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00004d,  /* endoffile */

// P<LIST> = ...;
  /*868*/ COUNT_OF_ALTS    | 0x000002,
  /*869*/ COUNT_OF_PHRASES | 0x000001,
  /*870*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00004e,  /* list */
  /*871*/ COUNT_OF_PHRASES | 0x000001,
  /*872*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00004f,  /* endoflist */

// P<REALSLN> = ...;
  /*873*/ COUNT_OF_ALTS    | 0x000002,
  /*874*/ COUNT_OF_PHRASES | 0x000001,
  /*875*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000050,  /* realslong */
  /*876*/ COUNT_OF_PHRASES | 0x000001,
  /*877*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000051,  /* realsnormal */

// P<CONTROL> = ...;
  /*878*/ COUNT_OF_ALTS    | 0x000002,
  /*879*/ COUNT_OF_PHRASES | 0x000001,
  /*880*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000052,  /* control */
  /*881*/ COUNT_OF_PHRASES | 0x000001,
  /*882*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000053,  /* diagnose */

// P<STATEMENT> = ...;
  /*883*/ COUNT_OF_ALTS    | 0x000022,
  /*884*/ COUNT_OF_PHRASES | 0x000001,
  /*885*/ PHRASE_TYPE      | G_Declaration_T,
  /*886*/ COUNT_OF_PHRASES | 0x000002,
  /*887*/ PHRASE_TYPE      | G_simple_label,
  /*888*/ PHRASE_TYPE      | G_T,
  /*889*/ COUNT_OF_PHRASES | 0x000001,
  /*890*/ PHRASE_TYPE      | G_simple_label,
  /*891*/ COUNT_OF_PHRASES | 0x000002,
  /*892*/ PHRASE_TYPE      | G_switch_label,
  /*893*/ PHRASE_TYPE      | G_T,
  /*894*/ COUNT_OF_PHRASES | 0x000001,
  /*895*/ PHRASE_TYPE      | G_switch_label,
  /*896*/ COUNT_OF_PHRASES | 0x000005,
  /*897*/ PHRASE_TYPE      | G_FELSE_opt,
  /*898*/ PHRASE_TYPE      | G_if_or_unless,
  /*899*/ PHRASE_TYPE      | G_COND,
  /*900*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000045,  /* start */
  /*901*/ PHRASE_TYPE      | G_T,
  /*902*/ COUNT_OF_PHRASES | 0x000006,
  /*903*/ PHRASE_TYPE      | G_FELSE_opt,
  /*904*/ PHRASE_TYPE      | G_if_or_unless,
  /*905*/ PHRASE_TYPE      | G_COND,
  /*906*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000046,  /* then */
  /*907*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000045,  /* start */
  /*908*/ PHRASE_TYPE      | G_T,
  /*909*/ COUNT_OF_PHRASES | 0x000007,
  /*910*/ PHRASE_TYPE      | G_FELSE_opt,
  /*911*/ PHRASE_TYPE      | G_if_or_unless,
  /*912*/ PHRASE_TYPE      | G_COND,
  /*913*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000046,  /* then */
  /*914*/ PHRASE_TYPE      | G_IMP,
  /*915*/ PHRASE_TYPE      | G_else_final_IMP_opt,
  /*916*/ PHRASE_TYPE      | G_T,
  /*917*/ COUNT_OF_PHRASES | 0x000004,
  /*918*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000047,  /* finish */
  /*919*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000048,  /* else */
  /*920*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000045,  /* start */
  /*921*/ PHRASE_TYPE      | G_T,
  /*922*/ COUNT_OF_PHRASES | 0x000004,
  /*923*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000047,  /* finish */
  /*924*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000048,  /* else */
  /*925*/ PHRASE_TYPE      | G_IMP,
  /*926*/ PHRASE_TYPE      | G_T,
  /*927*/ COUNT_OF_PHRASES | 0x000002,
  /*928*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000048,  /* else */
  /*929*/ PHRASE_TYPE      | G_T,
  /*930*/ COUNT_OF_PHRASES | 0x000005,
  /*931*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000048,  /* else */
  /*932*/ PHRASE_TYPE      | G_if_or_unless,
  /*933*/ PHRASE_TYPE      | G_COND,
  /*934*/ PHRASE_TYPE      | G_T,
  /*935*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_MSTART,
  /*936*/ COUNT_OF_PHRASES | 0x000008,
  /*937*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000048,  /* else */
  /*938*/ PHRASE_TYPE      | G_if_or_unless,
  /*939*/ PHRASE_TYPE      | G_COND,
  /*940*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000046,  /* then */
  /*941*/ PHRASE_TYPE      | G_IMP,
  /*942*/ PHRASE_TYPE      | G_else_if_unless_XIMP_opt,
  /*943*/ PHRASE_TYPE      | G_T,
  /*944*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_MSTART,
  /*945*/ COUNT_OF_PHRASES | 0x000002,
  /*946*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000047,  /* finish */
  /*947*/ PHRASE_TYPE      | G_T,
  /*948*/ COUNT_OF_PHRASES | 0x000002,
  /*949*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000054,  /* begin */
  /*950*/ PHRASE_TYPE      | G_T,
  /*951*/ COUNT_OF_PHRASES | 0x000003,
  /*952*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000055,  /* program */
  /*953*/ PHRASE_TYPE      | G_PIDENT,
  /*954*/ PHRASE_TYPE      | G_T,
  /*955*/ COUNT_OF_PHRASES | 0x000002,
  /*956*/ PHRASE_TYPE      | G_ENDPROG,
  /*957*/ PHRASE_TYPE      | G_T,
  /*958*/ COUNT_OF_PHRASES | 0x000002,
  /*959*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000056,  /* endofperm */
  /*960*/ PHRASE_TYPE      | G_T,
  /*961*/ COUNT_OF_PHRASES | 0x000002,
  /*962*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000057,  /* end */
  /*963*/ PHRASE_TYPE      | G_T,
  /*964*/ COUNT_OF_PHRASES | 0x000002,
  /*965*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000058,  /* cycle */
  /*966*/ PHRASE_TYPE      | G_T,
  /*967*/ COUNT_OF_PHRASES | 0x000003,
  /*968*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000058,  /* cycle */
  /*969*/ PHRASE_TYPE      | G_SEQ,
  /*970*/ PHRASE_TYPE      | G_T,
  /*971*/ COUNT_OF_PHRASES | 0x000003,
  /*972*/ PHRASE_TYPE      | G_wh_for,
  /*973*/ PHRASE_TYPE      | G_cycle_IMP,
  /*974*/ PHRASE_TYPE      | G_T,
  /*975*/ COUNT_OF_PHRASES | 0x000002,
  /*976*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000059,  /* repeat */
  /*977*/ PHRASE_TYPE      | G_T,
  /*978*/ COUNT_OF_PHRASES | 0x000004,
  /*979*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000059,  /* repeat */
  /*980*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00005a,  /* until */
  /*981*/ PHRASE_TYPE      | G_COND,
  /*982*/ PHRASE_TYPE      | G_T,
  /*983*/ COUNT_OF_PHRASES | 0x000004,
  /*984*/ PHRASE_TYPE      | G_on_event,
  /*985*/ PHRASE_TYPE      | G_event_list_def,
  /*986*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000045,  /* start */
  /*987*/ PHRASE_TYPE      | G_T,
  /*988*/ COUNT_OF_PHRASES | 0x000003,
  /*989*/ PHRASE_TYPE      | G_CONTROL,
  /*990*/ PHRASE_TYPE      | G_CIEXP,
  /*991*/ PHRASE_TYPE      | G_T,
  /*992*/ COUNT_OF_PHRASES | 0x000002,
  /*993*/ PHRASE_TYPE      | G_LIST,
  /*994*/ PHRASE_TYPE      | G_T,
  /*995*/ COUNT_OF_PHRASES | 0x000003,
  /*996*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00005b,  /* *= */
  /*997*/ PHRASE_TYPE      | G_IEXP,
  /*998*/ PHRASE_TYPE      | G_T,
  /*999*/ COUNT_OF_PHRASES | 0x000003,
  /*1000*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002f,  /* * */
  /*1001*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_MCODE,
  /*1002*/ PHRASE_TYPE      | G_T,
  /*1003*/ COUNT_OF_PHRASES | 0x000005,
  /*1004*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00005c,  /* include */
  /*1005*/ SEMANTIC_TYPE    | S_CONST,
  /*1006*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_OTHER,
  /*1007*/ PHRASE_TYPE      | G_LIST_opt,
  /*1008*/ PHRASE_TYPE      | G_T,
  /*1009*/ COUNT_OF_PHRASES | 0x000002,
  /*1010*/ PHRASE_TYPE      | G_REALSLN,
  /*1011*/ PHRASE_TYPE      | G_T,
  /*1012*/ COUNT_OF_PHRASES | 0x000004,
  /*1013*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00005d,  /* option */
  /*1014*/ PHRASE_TYPE      | G_OCONST,
  /*1015*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_OTHER,
  /*1016*/ PHRASE_TYPE      | G_T,
  /*1017*/ COUNT_OF_PHRASES | 0x000002,
  /*1018*/ PHRASE_TYPE      | G_IMP,
  /*1019*/ PHRASE_TYPE      | G_iu_while_until_for_T,
  /*1020*/ COUNT_OF_PHRASES | 0x000001,
  /*1021*/ PHRASE_TYPE      | G_COMMENT_T,

// P<wh_for> = ...;
  /*1022*/ COUNT_OF_ALTS    | 0x000002,
  /*1023*/ COUNT_OF_PHRASES | 0x000002,
  /*1024*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00005e,  /* while */
  /*1025*/ PHRASE_TYPE      | G_COND,
  /*1026*/ COUNT_OF_PHRASES | 0x000002,
  /*1027*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00005f,  /* for */
  /*1028*/ PHRASE_TYPE      | G_SEQ,

// P<cycle_IMP> = ...;
  /*1029*/ COUNT_OF_ALTS    | 0x000002,
  /*1030*/ COUNT_OF_PHRASES | 0x000001,
  /*1031*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000058,  /* cycle */
  /*1032*/ COUNT_OF_PHRASES | 0x000002,
  /*1033*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000046,  /* then */
  /*1034*/ PHRASE_TYPE      | G_IMP,

// P<event_list_def> = ...;
  /*1035*/ COUNT_OF_ALTS    | 0x000002,
  /*1036*/ COUNT_OF_PHRASES | 0x000001,
  /*1037*/ PHRASE_TYPE      | G_const_event_list,
  /*1038*/ COUNT_OF_PHRASES | 0x000001,
  /*1039*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002f,  /* * */

// P<iu_while_until_for_T> = ...;
  /*1040*/ COUNT_OF_ALTS    | 0x000005,
  /*1041*/ COUNT_OF_PHRASES | 0x000003,
  /*1042*/ PHRASE_TYPE      | G_if_or_unless,
  /*1043*/ PHRASE_TYPE      | G_COND,
  /*1044*/ PHRASE_TYPE      | G_T,
  /*1045*/ COUNT_OF_PHRASES | 0x000003,
  /*1046*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00005e,  /* while */
  /*1047*/ PHRASE_TYPE      | G_COND,
  /*1048*/ PHRASE_TYPE      | G_T,
  /*1049*/ COUNT_OF_PHRASES | 0x000003,
  /*1050*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00005a,  /* until */
  /*1051*/ PHRASE_TYPE      | G_COND,
  /*1052*/ PHRASE_TYPE      | G_T,
  /*1053*/ COUNT_OF_PHRASES | 0x000003,
  /*1054*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00005f,  /* for */
  /*1055*/ PHRASE_TYPE      | G_SEQ,
  /*1056*/ PHRASE_TYPE      | G_T,
  /*1057*/ COUNT_OF_PHRASES | 0x000001,
  /*1058*/ PHRASE_TYPE      | G_T,

// P<AddressOffsetOp> = ...;
  /*1059*/ COUNT_OF_ALTS    | 0x000002,
  /*1060*/ COUNT_OF_PHRASES | 0x000001,
  /*1061*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000060,  /* ++ */
  /*1062*/ COUNT_OF_PHRASES | 0x000001,
  /*1063*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000061,  /* -- */

// P<ADDOP_SEXP_opt> = ...;
  /*1064*/ COUNT_OF_ALTS    | 0x000002,
  /*1065*/ COUNT_OF_PHRASES | 0x000002,
  /*1066*/ PHRASE_TYPE      | G_AddressOffsetOp,
  /*1067*/ PHRASE_TYPE      | G_SEXP,
  /*1068*/ COUNT_OF_PHRASES | 0x000001,
  /*1069*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<A_or_AN_or_NA_or_NAN> = ...;
  /*1070*/ COUNT_OF_ALTS    | 0x000004,
  /*1071*/ COUNT_OF_PHRASES | 0x000001,
  /*1072*/ PHRASE_TYPE      | G_A,
  /*1073*/ COUNT_OF_PHRASES | 0x000001,
  /*1074*/ PHRASE_TYPE      | G_AN,
  /*1075*/ COUNT_OF_PHRASES | 0x000001,
  /*1076*/ PHRASE_TYPE      | G_NA,
  /*1077*/ COUNT_OF_PHRASES | 0x000001,
  /*1078*/ PHRASE_TYPE      | G_NAN,

// P<A_or_AN_TYPE_PROT> = ...;
  /*1079*/ COUNT_OF_ALTS    | 0x000002,
  /*1080*/ COUNT_OF_PHRASES | 0x000003,
  /*1081*/ PHRASE_TYPE      | G_A,
  /*1082*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_TYPE,
  /*1083*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_PROT,
  /*1084*/ COUNT_OF_PHRASES | 0x000003,
  /*1085*/ PHRASE_TYPE      | G_AN,
  /*1086*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_TYPE,
  /*1087*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_PROT,

// P<A_or_AN_TYPE> = ...;
  /*1088*/ COUNT_OF_ALTS    | 0x000002,
  /*1089*/ COUNT_OF_PHRASES | 0x000002,
  /*1090*/ PHRASE_TYPE      | G_A,
  /*1091*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_TYPE,
  /*1092*/ COUNT_OF_PHRASES | 0x000002,
  /*1093*/ PHRASE_TYPE      | G_AN,
  /*1094*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_TYPE,

// P<NA_or_NAN_TYPE> = ...;
  /*1095*/ COUNT_OF_ALTS    | 0x000002,
  /*1096*/ COUNT_OF_PHRASES | 0x000002,
  /*1097*/ PHRASE_TYPE      | G_NA,
  /*1098*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_TYPE,
  /*1099*/ COUNT_OF_PHRASES | 0x000002,
  /*1100*/ PHRASE_TYPE      | G_NAN,
  /*1101*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_TYPE,

// P<A_or_AN_or_NA_or_NAN_TYPE> = ...;
  /*1102*/ COUNT_OF_ALTS    | 0x000004,
  /*1103*/ COUNT_OF_PHRASES | 0x000002,
  /*1104*/ PHRASE_TYPE      | G_A,
  /*1105*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_TYPE,
  /*1106*/ COUNT_OF_PHRASES | 0x000002,
  /*1107*/ PHRASE_TYPE      | G_AN,
  /*1108*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_TYPE,
  /*1109*/ COUNT_OF_PHRASES | 0x000002,
  /*1110*/ PHRASE_TYPE      | G_NA,
  /*1111*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_TYPE,
  /*1112*/ COUNT_OF_PHRASES | 0x000002,
  /*1113*/ PHRASE_TYPE      | G_NAN,
  /*1114*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_TYPE,

// P<VAR_ASSIGN> = ...;
  /*1115*/ COUNT_OF_ALTS    | 0x000002,
  /*1116*/ COUNT_OF_PHRASES | 0x000004,
  /*1117*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00001a,  /* = */
  /*1118*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_SETTYPE,
  /*1119*/ PHRASE_TYPE      | G_NL_opt,
  /*1120*/ PHRASE_TYPE      | G_EXP,
  /*1121*/ COUNT_OF_PHRASES | 0x000005,
  /*1122*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000062,  /* <- */
  /*1123*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_SETTYPE,
  /*1124*/ PHRASE_TYPE      | G_NL_opt,
  /*1125*/ PHRASE_TYPE      | G_SIGN_opt,
  /*1126*/ PHRASE_TYPE      | G_EXP,

// P<INIT_DEC_ASSIGNMENTS> = ...;
  /*1127*/ COUNT_OF_ALTS    | 0x000004,
  /*1128*/ COUNT_OF_PHRASES | 0x000002,
  /*1129*/ PHRASE_TYPE      | G_V,
  /*1130*/ PHRASE_TYPE      | G_VAR_ASSIGN,
  /*1131*/ COUNT_OF_PHRASES | 0x000008,
  /*1132*/ PHRASE_TYPE      | G_N,
  /*1133*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000023,  /* == */
  /*1134*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_SETTYPE,
  /*1135*/ PHRASE_TYPE      | G_NL_opt,
  /*1136*/ PHRASE_TYPE      | G_V_or_N,
  /*1137*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_TYPE,
  /*1138*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_PROT,
  /*1139*/ PHRASE_TYPE      | G_ADDOP_SEXP_opt,
  /*1140*/ COUNT_OF_PHRASES | 0x000006,
  /*1141*/ PHRASE_TYPE      | G_AN,
  /*1142*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000023,  /* == */
  /*1143*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_SETTYPE,
  /*1144*/ PHRASE_TYPE      | G_NL_opt,
  /*1145*/ PHRASE_TYPE      | G_A_or_AN_TYPE,
  /*1146*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_PROT,
  /*1147*/ COUNT_OF_PHRASES | 0x000006,
  /*1148*/ PHRASE_TYPE      | G_NAN,
  /*1149*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000023,  /* == */
  /*1150*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_SETTYPE,
  /*1151*/ PHRASE_TYPE      | G_NL_opt,
  /*1152*/ PHRASE_TYPE      | G_NA_or_NAN_TYPE,
  /*1153*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_PROT,

// P<rest_of_IDENTS> = ...;
  /*1154*/ COUNT_OF_ALTS    | 0x000002,
  /*1155*/ COUNT_OF_PHRASES | 0x000004,
  /*1156*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002d,  /* , */
  /*1157*/ PHRASE_TYPE      | G_NL_opt,
  /*1158*/ PHRASE_TYPE      | G_IDENT,
  /*1159*/ PHRASE_TYPE      | G_rest_of_IDENTS,
  /*1160*/ COUNT_OF_PHRASES | 0x000001,
  /*1161*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<IDENTS> = ...;
  /*1162*/ COUNT_OF_ALTS    | 0x000001,
  /*1163*/ COUNT_OF_PHRASES | 0x000002,
  /*1164*/ PHRASE_TYPE      | G_IDENT,
  /*1165*/ PHRASE_TYPE      | G_rest_of_IDENTS,

// P<V_or_N> = ...;
  /*1166*/ COUNT_OF_ALTS    | 0x000005,
  /*1167*/ COUNT_OF_PHRASES | 0x000002,
  /*1168*/ PHRASE_TYPE      | G_V,
  /*1169*/ PHRASE_TYPE      | G_ESC_ARRAY_or_REC,
  /*1170*/ COUNT_OF_PHRASES | 0x000002,
  /*1171*/ PHRASE_TYPE      | G_N,
  /*1172*/ PHRASE_TYPE      | G_ESC_ARRAY_or_REC,
  /*1173*/ COUNT_OF_PHRASES | 0x000001,
  /*1174*/ PHRASE_TYPE      | G_Fn_CALL,
  /*1175*/ COUNT_OF_PHRASES | 0x000002,
  /*1176*/ PHRASE_TYPE      | G_Map_CALL,
  /*1177*/ PHRASE_TYPE      | G_ESCREC,
  /*1178*/ COUNT_OF_PHRASES | 0x000001,
  /*1179*/ SEMANTIC_TYPE    | S_CONST,

// P<extra> = ...;
  /*1180*/ COUNT_OF_ALTS    | 0x000002,
  /*1181*/ COUNT_OF_PHRASES | 0x000003,
  /*1182*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002d,  /* , */
  /*1183*/ PHRASE_TYPE      | G_NL_opt,
  /*1184*/ PHRASE_TYPE      | G_EXP,
  /*1185*/ COUNT_OF_PHRASES | 0x000001,
  /*1186*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<subevent_and_extra> = ...;
  /*1187*/ COUNT_OF_ALTS    | 0x000002,
  /*1188*/ COUNT_OF_PHRASES | 0x000004,
  /*1189*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002d,  /* , */
  /*1190*/ PHRASE_TYPE      | G_NL_opt,
  /*1191*/ PHRASE_TYPE      | G_EXP,
  /*1192*/ PHRASE_TYPE      | G_extra,
  /*1193*/ COUNT_OF_PHRASES | 0x000001,
  /*1194*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<A_or_AN_TYPE_opt_PROT> = ...;
  /*1195*/ COUNT_OF_ALTS    | 0x000002,
  /*1196*/ COUNT_OF_PHRASES | 0x000001,
  /*1197*/ PHRASE_TYPE      | G_A_or_AN_TYPE_PROT,
  /*1198*/ COUNT_OF_PHRASES | 0x000001,
  /*1199*/ PHRASE_TYPE      | G_A_or_AN_TYPE,

// P<NA_or_NAN_TYPE_opt_PROT> = ...;
  /*1200*/ COUNT_OF_ALTS    | 0x000002,
  /*1201*/ COUNT_OF_PHRASES | 0x000003,
  /*1202*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_PROT,
  /*1203*/ PHRASE_TYPE      | G_NA_or_NAN_TYPE,
  /*1204*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_PROT,
  /*1205*/ COUNT_OF_PHRASES | 0x000001,
  /*1206*/ PHRASE_TYPE      | G_NA_or_NAN_TYPE,

// P<V_or_N_TYPE_opt_PROT> = ...;
  /*1207*/ COUNT_OF_ALTS    | 0x000002,
  /*1208*/ COUNT_OF_PHRASES | 0x000004,
  /*1209*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_PROT,
  /*1210*/ PHRASE_TYPE      | G_V_or_N,
  /*1211*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_TYPE,
  /*1212*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_PROT,
  /*1213*/ COUNT_OF_PHRASES | 0x000002,
  /*1214*/ PHRASE_TYPE      | G_V_or_N,
  /*1215*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_TYPE,

// P<IMP_ASSIGN> = ...;
  /*1216*/ COUNT_OF_ALTS    | 0x000003,
  /*1217*/ COUNT_OF_PHRASES | 0x000004,
  /*1218*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00001a,  /* = */
  /*1219*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_SETTYPE,
  /*1220*/ PHRASE_TYPE      | G_NL_opt,
  /*1221*/ PHRASE_TYPE      | G_EXP,
  /*1222*/ COUNT_OF_PHRASES | 0x000005,
  /*1223*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000062,  /* <- */
  /*1224*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_SETTYPE,
  /*1225*/ PHRASE_TYPE      | G_NL_opt,
  /*1226*/ PHRASE_TYPE      | G_SIGN_opt,
  /*1227*/ PHRASE_TYPE      | G_EXP,
  /*1228*/ COUNT_OF_PHRASES | 0x000004,
  /*1229*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000044,  /* -> */
  /*1230*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_OTHER,
  /*1231*/ PHRASE_TYPE      | G_NL_opt,
  /*1232*/ PHRASE_TYPE      | G_RESEXP,

// P<N_ASS> = ...;
  /*1233*/ COUNT_OF_ALTS    | 0x000003,
  /*1234*/ COUNT_OF_PHRASES | 0x000003,
  /*1235*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_PROT,
  /*1236*/ PHRASE_TYPE      | G_ADDOP_SEXP_opt,
  /*1237*/ PHRASE_TYPE      | G_IMP_ASSIGN,
  /*1238*/ COUNT_OF_PHRASES | 0x000008,
  /*1239*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_PROT,
  /*1240*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000023,  /* == */
  /*1241*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_SETTYPE,
  /*1242*/ PHRASE_TYPE      | G_NL_opt,
  /*1243*/ PHRASE_TYPE      | G_V_or_N,
  /*1244*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_TYPE,
  /*1245*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_PROT,
  /*1246*/ PHRASE_TYPE      | G_ADDOP_SEXP_opt,
  /*1247*/ COUNT_OF_PHRASES | 0x000007,
  /*1248*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000023,  /* == */
  /*1249*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_SETTYPE,
  /*1250*/ PHRASE_TYPE      | G_NL_opt,
  /*1251*/ PHRASE_TYPE      | G_V_or_N,
  /*1252*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_TYPE,
  /*1253*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_PROT,
  /*1254*/ PHRASE_TYPE      | G_ADDOP_SEXP_opt,

// P<rest_of_AND_COND> = ...;
  /*1255*/ COUNT_OF_ALTS    | 0x000002,
  /*1256*/ COUNT_OF_PHRASES | 0x000002,
  /*1257*/ PHRASE_TYPE      | G_AND_COND,
  /*1258*/ PHRASE_TYPE      | G_rest_of_AND_COND,
  /*1259*/ COUNT_OF_PHRASES | 0x000001,
  /*1260*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<AND_COND> = ...;
  /*1261*/ COUNT_OF_ALTS    | 0x000001,
  /*1262*/ COUNT_OF_PHRASES | 0x000004,
  /*1263*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00004b,  /* and */
  /*1264*/ PHRASE_TYPE      | G_NL_opt,
  /*1265*/ PHRASE_TYPE      | G_SCOND,
  /*1266*/ PHRASE_TYPE      | G_rest_of_AND_COND,

// P<rest_of_OR_COND> = ...;
  /*1267*/ COUNT_OF_ALTS    | 0x000002,
  /*1268*/ COUNT_OF_PHRASES | 0x000002,
  /*1269*/ PHRASE_TYPE      | G_OR_COND,
  /*1270*/ PHRASE_TYPE      | G_rest_of_OR_COND,
  /*1271*/ COUNT_OF_PHRASES | 0x000001,
  /*1272*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<OR_COND> = ...;
  /*1273*/ COUNT_OF_ALTS    | 0x000001,
  /*1274*/ COUNT_OF_PHRASES | 0x000004,
  /*1275*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000063,  /* or */
  /*1276*/ PHRASE_TYPE      | G_NL_opt,
  /*1277*/ PHRASE_TYPE      | G_SCOND,
  /*1278*/ PHRASE_TYPE      | G_rest_of_OR_COND,

// P<rest_of_COND> = ...;
  /*1279*/ COUNT_OF_ALTS    | 0x000003,
  /*1280*/ COUNT_OF_PHRASES | 0x000001,
  /*1281*/ PHRASE_TYPE      | G_AND_COND,
  /*1282*/ COUNT_OF_PHRASES | 0x000001,
  /*1283*/ PHRASE_TYPE      | G_OR_COND,
  /*1284*/ COUNT_OF_PHRASES | 0x000001,
  /*1285*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<COND> = ...;
  /*1286*/ COUNT_OF_ALTS    | 0x000002,
  /*1287*/ COUNT_OF_PHRASES | 0x000002,
  /*1288*/ PHRASE_TYPE      | G_SCOND,
  /*1289*/ PHRASE_TYPE      | G_rest_of_COND,
  /*1290*/ COUNT_OF_PHRASES | 0x000001,
  /*1291*/ PHRASE_TYPE      | G_EXP,

// P<OP1> = ...;
  /*1292*/ COUNT_OF_ALTS    | 0x000006,
  /*1293*/ COUNT_OF_PHRASES | 0x000001,
  /*1294*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000064,  /* << */
  /*1295*/ COUNT_OF_PHRASES | 0x000001,
  /*1296*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000065,  /* >> */
  /*1297*/ COUNT_OF_PHRASES | 0x000001,
  /*1298*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000066,  /* ^^ */
  /*1299*/ COUNT_OF_PHRASES | 0x000001,
  /*1300*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000067,  /* ^ */
  /*1301*/ COUNT_OF_PHRASES | 0x000001,
  /*1302*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000068,  /* \\ */
  /*1303*/ COUNT_OF_PHRASES | 0x000001,
  /*1304*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000069,  /* \ */

// P<OP2> = ...;
  /*1305*/ COUNT_OF_ALTS    | 0x000004,
  /*1306*/ COUNT_OF_PHRASES | 0x000001,
  /*1307*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00006a,  /* & */
  /*1308*/ COUNT_OF_PHRASES | 0x000001,
  /*1309*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002f,  /* * */
  /*1310*/ COUNT_OF_PHRASES | 0x000001,
  /*1311*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00006b,  /* // */
  /*1312*/ COUNT_OF_PHRASES | 0x000001,
  /*1313*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00006c,  /* / */

// P<OP3> = ...;
  /*1314*/ COUNT_OF_ALTS    | 0x000004,
  /*1315*/ COUNT_OF_PHRASES | 0x000001,
  /*1316*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00006d,  /* + */
  /*1317*/ COUNT_OF_PHRASES | 0x000001,
  /*1318*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00006e,  /* - */
  /*1319*/ COUNT_OF_PHRASES | 0x000001,
  /*1320*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00006f,  /* !! */
  /*1321*/ COUNT_OF_PHRASES | 0x000001,
  /*1322*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000040,  /* ! */

// P<SIGN> = ...;
  /*1323*/ COUNT_OF_ALTS    | 0x000002,
  /*1324*/ COUNT_OF_PHRASES | 0x000001,
  /*1325*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00006e,  /* - */
  /*1326*/ COUNT_OF_PHRASES | 0x000001,
  /*1327*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00006d,  /* + */

// P<MOD> = ...;
  /*1328*/ COUNT_OF_ALTS    | 0x000001,
  /*1329*/ COUNT_OF_PHRASES | 0x000001,
  /*1330*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000070,  /* | */

// P<OP1_EXP> = ...;
  /*1331*/ COUNT_OF_ALTS    | 0x000001,
  /*1332*/ COUNT_OF_PHRASES | 0x000003,
  /*1333*/ PHRASE_TYPE      | G_OP1,
  /*1334*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_OPER,
  /*1335*/ PHRASE_TYPE      | G_SEXP,

// P<OP2_EXP> = ...;
  /*1336*/ COUNT_OF_ALTS    | 0x000001,
  /*1337*/ COUNT_OF_PHRASES | 0x000003,
  /*1338*/ PHRASE_TYPE      | G_OP2,
  /*1339*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_OPER,
  /*1340*/ PHRASE_TYPE      | G_EXP1,

// P<OP3_EXP> = ...;
  /*1341*/ COUNT_OF_ALTS    | 0x000001,
  /*1342*/ COUNT_OF_PHRASES | 0x000003,
  /*1343*/ PHRASE_TYPE      | G_OP3,
  /*1344*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_OPER,
  /*1345*/ PHRASE_TYPE      | G_EXP2,

// P<OP1_EXPS> = ...;
  /*1346*/ COUNT_OF_ALTS    | 0x000002,
  /*1347*/ COUNT_OF_PHRASES | 0x000002,
  /*1348*/ PHRASE_TYPE      | G_OP1_EXP,
  /*1349*/ PHRASE_TYPE      | G_OP1_EXPS,
  /*1350*/ COUNT_OF_PHRASES | 0x000001,
  /*1351*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<OP2_EXPS> = ...;
  /*1352*/ COUNT_OF_ALTS    | 0x000002,
  /*1353*/ COUNT_OF_PHRASES | 0x000002,
  /*1354*/ PHRASE_TYPE      | G_OP2_EXP,
  /*1355*/ PHRASE_TYPE      | G_OP2_EXPS,
  /*1356*/ COUNT_OF_PHRASES | 0x000001,
  /*1357*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<OP3_EXPS> = ...;
  /*1358*/ COUNT_OF_ALTS    | 0x000002,
  /*1359*/ COUNT_OF_PHRASES | 0x000002,
  /*1360*/ PHRASE_TYPE      | G_OP3_EXP,
  /*1361*/ PHRASE_TYPE      | G_OP3_EXPS,
  /*1362*/ COUNT_OF_PHRASES | 0x000001,
  /*1363*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<COMP2_opt> = ...;
  /*1364*/ COUNT_OF_ALTS    | 0x000002,
  /*1365*/ COUNT_OF_PHRASES | 0x000001,
  /*1366*/ PHRASE_TYPE      | G_COMP2,
  /*1367*/ COUNT_OF_PHRASES | 0x000001,
  /*1368*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<COMP2> = ...;
  /*1369*/ COUNT_OF_ALTS    | 0x000001,
  /*1370*/ COUNT_OF_PHRASES | 0x000003,
  /*1371*/ PHRASE_TYPE      | G_COMP,
  /*1372*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_OTHER,
  /*1373*/ PHRASE_TYPE      | G_EXP,

// P<COMP1> = ...;
  /*1374*/ COUNT_OF_ALTS    | 0x000001,
  /*1375*/ COUNT_OF_PHRASES | 0x000003,
  /*1376*/ PHRASE_TYPE      | G_COMP,
  /*1377*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_OTHER,
  /*1378*/ PHRASE_TYPE      | G_EXP,

// P<COMP12_opt> = ...;
  /*1379*/ COUNT_OF_ALTS    | 0x000001,
  /*1380*/ COUNT_OF_PHRASES | 0x000002,
  /*1381*/ PHRASE_TYPE      | G_COMP1,
  /*1382*/ PHRASE_TYPE      | G_COMP2_opt,

// P<DOT_V_Ns> = ...;
  /*1383*/ COUNT_OF_ALTS    | 0x000002,
  /*1384*/ COUNT_OF_PHRASES | 0x000002,
  /*1385*/ PHRASE_TYPE      | G_DOT_V_N,
  /*1386*/ PHRASE_TYPE      | G_DOT_V_Ns,
  /*1387*/ COUNT_OF_PHRASES | 0x000001,
  /*1388*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<DOT_V_N> = ...;
  /*1389*/ COUNT_OF_ALTS    | 0x000001,
  /*1390*/ COUNT_OF_PHRASES | 0x000004,
  /*1391*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002c,  /* . */
  /*1392*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_OTHER,
  /*1393*/ PHRASE_TYPE      | G_V_or_N,
  /*1394*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_OTHER,

// P<COMPARISON> = ...;
  /*1395*/ COUNT_OF_ALTS    | 0x000006,
  /*1396*/ COUNT_OF_PHRASES | 0x000002,
  /*1397*/ PHRASE_TYPE      | G_COMP1,
  /*1398*/ PHRASE_TYPE      | G_COMP2_opt,
  /*1399*/ COUNT_OF_PHRASES | 0x000003,
  /*1400*/ PHRASE_TYPE      | G_ACOMP,
  /*1401*/ PHRASE_TYPE      | G_V_or_N,
  /*1402*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_TYPE,
  /*1403*/ COUNT_OF_PHRASES | 0x000003,
  /*1404*/ PHRASE_TYPE      | G_ACOMP,
  /*1405*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000071,  /* 0 */
  /*1406*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_TYPE,
  /*1407*/ COUNT_OF_PHRASES | 0x000003,
  /*1408*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000044,  /* -> */
  /*1409*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_OTHER,
  /*1410*/ PHRASE_TYPE      | G_RESEXP,
  /*1411*/ COUNT_OF_PHRASES | 0x000004,
  /*1412*/ PHRASE_TYPE      | G_OP1_EXPS,
  /*1413*/ PHRASE_TYPE      | G_OP2_EXPS,
  /*1414*/ PHRASE_TYPE      | G_OP3_EXPS,
  /*1415*/ PHRASE_TYPE      | G_COMP12_opt,
  /*1416*/ COUNT_OF_PHRASES | 0x000002,
  /*1417*/ PHRASE_TYPE      | G_DOT_V_Ns,
  /*1418*/ PHRASE_TYPE      | G_COMP12_opt,

// P<COMP1OS2> = ...;
  /*1419*/ COUNT_OF_ALTS    | 0x000001,
  /*1420*/ COUNT_OF_PHRASES | 0x000005,
  /*1421*/ PHRASE_TYPE      | G_COMP,
  /*1422*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_OTHER,
  /*1423*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_SETTYPE,
  /*1424*/ PHRASE_TYPE      | G_EXP,
  /*1425*/ PHRASE_TYPE      | G_COMP2_opt,

// P<SCOND> = ...;
  /*1426*/ COUNT_OF_ALTS    | 0x000008,
  /*1427*/ COUNT_OF_PHRASES | 0x000003,
  /*1428*/ PHRASE_TYPE      | G_V_or_N,
  /*1429*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_SETTYPE,
  /*1430*/ PHRASE_TYPE      | G_COMPARISON,
  /*1431*/ COUNT_OF_PHRASES | 0x000003,
  /*1432*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* ( */
  /*1433*/ PHRASE_TYPE      | G_COND,
  /*1434*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* ) */
  /*1435*/ COUNT_OF_PHRASES | 0x000002,
  /*1436*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000072,  /* not */
  /*1437*/ PHRASE_TYPE      | G_SCOND,
  /*1438*/ COUNT_OF_PHRASES | 0x000002,
  /*1439*/ PHRASE_TYPE      | G_Pred_CALL,
  /*1440*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_PRED,
  /*1441*/ COUNT_OF_PHRASES | 0x000007,
  /*1442*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* ( */
  /*1443*/ PHRASE_TYPE      | G_EXP,
  /*1444*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* ) */
  /*1445*/ PHRASE_TYPE      | G_OP1_EXPS,
  /*1446*/ PHRASE_TYPE      | G_OP2_EXPS,
  /*1447*/ PHRASE_TYPE      | G_OP3_EXPS,
  /*1448*/ PHRASE_TYPE      | G_COMP1OS2,
  /*1449*/ COUNT_OF_PHRASES | 0x000004,
  /*1450*/ PHRASE_TYPE      | G_A_or_AN_or_NA_or_NAN,
  /*1451*/ PHRASE_TYPE      | G_ACOMP,
  /*1452*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_SETTYPE,
  /*1453*/ PHRASE_TYPE      | G_A_or_AN_or_NA_or_NAN_TYPE,
  /*1454*/ COUNT_OF_PHRASES | 0x000003,
  /*1455*/ PHRASE_TYPE      | G_A_or_AN_or_NA_or_NAN,
  /*1456*/ PHRASE_TYPE      | G_ACOMP,
  /*1457*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000071,  /* 0 */
  /*1458*/ COUNT_OF_PHRASES | 0x000002,
  /*1459*/ PHRASE_TYPE      | G_EXP,
  /*1460*/ PHRASE_TYPE      | G_COMP12_opt,

// P<RECEXP> = ...;
  /*1461*/ COUNT_OF_ALTS    | 0x000002,
  /*1462*/ COUNT_OF_PHRASES | 0x000003,
  /*1463*/ SEMANTIC_TYPE    | S_CONST,
  /*1464*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_ZERO,
  /*1465*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_CLEAR,
  /*1466*/ COUNT_OF_PHRASES | 0x000002,
  /*1467*/ PHRASE_TYPE      | G_V_or_N,
  /*1468*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_TYPE,

// P<UOP> = ...;
  /*1469*/ COUNT_OF_ALTS    | 0x000003,
  /*1470*/ COUNT_OF_PHRASES | 0x000001,
  /*1471*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000069,  /* \ */
  /*1472*/ COUNT_OF_PHRASES | 0x000001,
  /*1473*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000067,  /* ^ */
  /*1474*/ COUNT_OF_PHRASES | 0x000001,
  /*1475*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000073,  /* ~ */

// P<UOP_opt> = ...;
  /*1476*/ COUNT_OF_ALTS    | 0x000002,
  /*1477*/ COUNT_OF_PHRASES | 0x000001,
  /*1478*/ PHRASE_TYPE      | G_UOP,
  /*1479*/ COUNT_OF_PHRASES | 0x000001,
  /*1480*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<dot_Vs_opt> = ...;
  /*1481*/ COUNT_OF_ALTS    | 0x000002,
  /*1482*/ COUNT_OF_PHRASES | 0x000002,
  /*1483*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002c,  /* . */
  /*1484*/ PHRASE_TYPE      | G_V_or_N,
  /*1485*/ COUNT_OF_PHRASES | 0x000001,
  /*1486*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<dot_Vs> = ...;
  /*1487*/ COUNT_OF_ALTS    | 0x000001,
  /*1488*/ COUNT_OF_PHRASES | 0x000003,
  /*1489*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002c,  /* . */
  /*1490*/ PHRASE_TYPE      | G_V_or_N,
  /*1491*/ PHRASE_TYPE      | G_dot_Vs_opt,

// P<DQ> = ...;
  /*1492*/ COUNT_OF_ALTS    | 0x000001,
  /*1493*/ COUNT_OF_PHRASES | 0x000001,
  /*1494*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000074,  /* \" */

// P<EXP> = ...;
  /*1495*/ COUNT_OF_ALTS    | 0x000004,
  /*1496*/ COUNT_OF_PHRASES | 0x000003,
  /*1497*/ PHRASE_TYPE      | G_V_or_N,
  /*1498*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_TYPE,
  /*1499*/ PHRASE_TYPE      | G_dot_Vs,
  /*1500*/ COUNT_OF_PHRASES | 0x000005,
  /*1501*/ PHRASE_TYPE      | G_V_or_N,
  /*1502*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_TYPE,
  /*1503*/ PHRASE_TYPE      | G_OP1_EXPS,
  /*1504*/ PHRASE_TYPE      | G_OP2_EXPS,
  /*1505*/ PHRASE_TYPE      | G_OP3_EXPS,
  /*1506*/ COUNT_OF_PHRASES | 0x000005,
  /*1507*/ PHRASE_TYPE      | G_UOP_opt,
  /*1508*/ PHRASE_TYPE      | G_SEXP,
  /*1509*/ PHRASE_TYPE      | G_OP1_EXPS,
  /*1510*/ PHRASE_TYPE      | G_OP2_EXPS,
  /*1511*/ PHRASE_TYPE      | G_OP3_EXPS,
  /*1512*/ COUNT_OF_PHRASES | 0x000003,
  /*1513*/ PHRASE_TYPE      | G_SIGN_opt,
  /*1514*/ PHRASE_TYPE      | G_EXP2,
  /*1515*/ PHRASE_TYPE      | G_OP3_EXPS,

// P<EXP2> = ...;
  /*1516*/ COUNT_OF_ALTS    | 0x000001,
  /*1517*/ COUNT_OF_PHRASES | 0x000003,
  /*1518*/ PHRASE_TYPE      | G_SEXP,
  /*1519*/ PHRASE_TYPE      | G_OP1_EXPS,
  /*1520*/ PHRASE_TYPE      | G_OP2_EXPS,

// P<EXP1> = ...;
  /*1521*/ COUNT_OF_ALTS    | 0x000001,
  /*1522*/ COUNT_OF_PHRASES | 0x000002,
  /*1523*/ PHRASE_TYPE      | G_SEXP,
  /*1524*/ PHRASE_TYPE      | G_OP1_EXPS,

// P<SEXP> = ...;
  /*1525*/ COUNT_OF_ALTS    | 0x000004,
  /*1526*/ COUNT_OF_PHRASES | 0x000002,
  /*1527*/ PHRASE_TYPE      | G_V_or_N,
  /*1528*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_TYPE,
  /*1529*/ COUNT_OF_PHRASES | 0x000003,
  /*1530*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* ( */
  /*1531*/ PHRASE_TYPE      | G_EXP,
  /*1532*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* ) */
  /*1533*/ COUNT_OF_PHRASES | 0x000003,
  /*1534*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000070,  /* | */
  /*1535*/ PHRASE_TYPE      | G_EXP,
  /*1536*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000070,  /* | */
  /*1537*/ COUNT_OF_PHRASES | 0x000001,
  /*1538*/ PHRASE_TYPE      | G_IEXP,

// P<COP1> = ...;
  /*1539*/ COUNT_OF_ALTS    | 0x000001,
  /*1540*/ COUNT_OF_PHRASES | 0x000001,
  /*1541*/ PHRASE_TYPE      | G_OP1,

// P<COP2> = ...;
  /*1542*/ COUNT_OF_ALTS    | 0x000001,
  /*1543*/ COUNT_OF_PHRASES | 0x000001,
  /*1544*/ PHRASE_TYPE      | G_OP2,

// P<COP3> = ...;
  /*1545*/ COUNT_OF_ALTS    | 0x000001,
  /*1546*/ COUNT_OF_PHRASES | 0x000001,
  /*1547*/ PHRASE_TYPE      | G_OP3,

// P<CSIGN> = ...;
  /*1548*/ COUNT_OF_ALTS    | 0x000001,
  /*1549*/ COUNT_OF_PHRASES | 0x000001,
  /*1550*/ PHRASE_TYPE      | G_SIGN_opt,

// P<CMOD> = ...;
  /*1551*/ COUNT_OF_ALTS    | 0x000001,
  /*1552*/ COUNT_OF_PHRASES | 0x000001,
  /*1553*/ PHRASE_TYPE      | G_MOD,

// P<rest_of_IEXP2_EXPR> = ...;
  /*1554*/ COUNT_OF_ALTS    | 0x000002,
  /*1555*/ COUNT_OF_PHRASES | 0x000003,
  /*1556*/ PHRASE_TYPE      | G_COP3,
  /*1557*/ PHRASE_TYPE      | G_IEXP2,
  /*1558*/ PHRASE_TYPE      | G_rest_of_IEXP2_EXPR,
  /*1559*/ COUNT_OF_PHRASES | 0x000001,
  /*1560*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<IEXP2_EXPR> = ...;
  /*1561*/ COUNT_OF_ALTS    | 0x000001,
  /*1562*/ COUNT_OF_PHRASES | 0x000002,
  /*1563*/ PHRASE_TYPE      | G_IEXP2,
  /*1564*/ PHRASE_TYPE      | G_rest_of_IEXP2_EXPR,

// P<COP3_IEXP2_optseq> = ...;
  /*1565*/ COUNT_OF_ALTS    | 0x000002,
  /*1566*/ COUNT_OF_PHRASES | 0x000003,
  /*1567*/ PHRASE_TYPE      | G_COP3,
  /*1568*/ PHRASE_TYPE      | G_IEXP2,
  /*1569*/ PHRASE_TYPE      | G_COP3_IEXP2_optseq,
  /*1570*/ COUNT_OF_PHRASES | 0x000001,
  /*1571*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<COP2_IEXP1_optseq> = ...;
  /*1572*/ COUNT_OF_ALTS    | 0x000002,
  /*1573*/ COUNT_OF_PHRASES | 0x000003,
  /*1574*/ PHRASE_TYPE      | G_COP2,
  /*1575*/ PHRASE_TYPE      | G_IEXP1,
  /*1576*/ PHRASE_TYPE      | G_COP2_IEXP1_optseq,
  /*1577*/ COUNT_OF_PHRASES | 0x000001,
  /*1578*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<COP1_IEXP0_optseq> = ...;
  /*1579*/ COUNT_OF_ALTS    | 0x000002,
  /*1580*/ COUNT_OF_PHRASES | 0x000003,
  /*1581*/ PHRASE_TYPE      | G_COP1,
  /*1582*/ PHRASE_TYPE      | G_IEXP0,
  /*1583*/ PHRASE_TYPE      | G_COP1_IEXP0_optseq,
  /*1584*/ COUNT_OF_PHRASES | 0x000001,
  /*1585*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<CUOP_opt> = ...;
  /*1586*/ COUNT_OF_ALTS    | 0x000002,
  /*1587*/ COUNT_OF_PHRASES | 0x000001,
  /*1588*/ PHRASE_TYPE      | G_CUOP,
  /*1589*/ COUNT_OF_PHRASES | 0x000001,
  /*1590*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<CUOP> = ...;
  /*1591*/ COUNT_OF_ALTS    | 0x000001,
  /*1592*/ COUNT_OF_PHRASES | 0x000001,
  /*1593*/ PHRASE_TYPE      | G_UOP,

// P<ISEXP_EXPR> = ...;
  /*1594*/ COUNT_OF_ALTS    | 0x000001,
  /*1595*/ COUNT_OF_PHRASES | 0x000002,
  /*1596*/ PHRASE_TYPE      | G_IEXP0,
  /*1597*/ PHRASE_TYPE      | G_COP1_IEXP0_optseq,

// P<IEXP2> = ...;
  /*1598*/ COUNT_OF_ALTS    | 0x000001,
  /*1599*/ COUNT_OF_PHRASES | 0x000003,
  /*1600*/ PHRASE_TYPE      | G_IEXP0,
  /*1601*/ PHRASE_TYPE      | G_COP1_IEXP0_optseq,
  /*1602*/ PHRASE_TYPE      | G_COP2_IEXP1_optseq,

// P<IEXP1> = ...;
  /*1603*/ COUNT_OF_ALTS    | 0x000001,
  /*1604*/ COUNT_OF_PHRASES | 0x000002,
  /*1605*/ PHRASE_TYPE      | G_IEXP0,
  /*1606*/ PHRASE_TYPE      | G_COP1_IEXP0_optseq,

// P<IEXP0> = ...;
  /*1607*/ COUNT_OF_ALTS    | 0x000003,
  /*1608*/ COUNT_OF_PHRASES | 0x000002,
  /*1609*/ PHRASE_TYPE      | G_PCONST,
  /*1610*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_TYPE,
  /*1611*/ COUNT_OF_PHRASES | 0x000003,
  /*1612*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* ( */
  /*1613*/ PHRASE_TYPE      | G_IEXP,
  /*1614*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* ) */
  /*1615*/ COUNT_OF_PHRASES | 0x000003,
  /*1616*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000070,  /* | */
  /*1617*/ PHRASE_TYPE      | G_IEXP,
  /*1618*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000070,  /* | */

// P<IEXP> = ...;
  /*1619*/ COUNT_OF_ALTS    | 0x000002,
  /*1620*/ COUNT_OF_PHRASES | 0x000005,
  /*1621*/ PHRASE_TYPE      | G_CUOP_opt,
  /*1622*/ PHRASE_TYPE      | G_IEXP0,
  /*1623*/ PHRASE_TYPE      | G_COP1_IEXP0_optseq,
  /*1624*/ PHRASE_TYPE      | G_COP2_IEXP1_optseq,
  /*1625*/ PHRASE_TYPE      | G_COP3_IEXP2_optseq,
  /*1626*/ COUNT_OF_PHRASES | 0x000002,
  /*1627*/ PHRASE_TYPE      | G_CSIGN,
  /*1628*/ PHRASE_TYPE      | G_IEXP2_EXPR,

// P<PCONST> = ...;
  /*1629*/ COUNT_OF_ALTS    | 0x000002,
  /*1630*/ COUNT_OF_PHRASES | 0x000001,
  /*1631*/ SEMANTIC_TYPE    | S_CONST,
  /*1632*/ COUNT_OF_PHRASES | 0x000002,
  /*1633*/ PHRASE_TYPE      | G_V,
  /*1634*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_TYPE,

// P<ACONST> = ...;
  /*1635*/ COUNT_OF_ALTS    | 0x000001,
  /*1636*/ COUNT_OF_PHRASES | 0x000001,
  /*1637*/ SEMANTIC_TYPE    | S_CONST,

// P<OCONST> = ...;
  /*1638*/ COUNT_OF_ALTS    | 0x000001,
  /*1639*/ COUNT_OF_PHRASES | 0x000001,
  /*1640*/ SEMANTIC_TYPE    | S_CONST,

// P<SIGN_opt> = ...;
  /*1641*/ COUNT_OF_ALTS    | 0x000002,
  /*1642*/ COUNT_OF_PHRASES | 0x000001,
  /*1643*/ PHRASE_TYPE      | G_SIGN,
  /*1644*/ COUNT_OF_PHRASES | 0x000001,
  /*1645*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<RCONST> = ...;
  /*1646*/ COUNT_OF_ALTS    | 0x000001,
  /*1647*/ COUNT_OF_PHRASES | 0x000003,
  /*1648*/ PHRASE_TYPE      | G_SIGN_opt,
  /*1649*/ SEMANTIC_TYPE    | S_CONST,
  /*1650*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_TYPE,

// P<SCONST> = ...;
  /*1651*/ COUNT_OF_ALTS    | 0x000001,
  /*1652*/ COUNT_OF_PHRASES | 0x000002,
  /*1653*/ SEMANTIC_TYPE    | S_CONST,
  /*1654*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_OTHER,

// P<SEQ> = ...;
  /*1655*/ COUNT_OF_ALTS    | 0x000001,
  /*1656*/ COUNT_OF_PHRASES | 0x00000b,
  /*1657*/ PHRASE_TYPE      | G_V_or_N,
  /*1658*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_TYPE,
  /*1659*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_PROT,
  /*1660*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_OTHER,
  /*1661*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00001a,  /* = */
  /*1662*/ PHRASE_TYPE      | G_NL_opt,
  /*1663*/ PHRASE_TYPE      | G_EXP,
  /*1664*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002d,  /* , */
  /*1665*/ PHRASE_TYPE      | G_EXP,
  /*1666*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002d,  /* , */
  /*1667*/ PHRASE_TYPE      | G_EXP,

// P<FDEF> = ...;
  /*1668*/ COUNT_OF_ALTS    | 0x000001,
  /*1669*/ COUNT_OF_PHRASES | 0x000004,
  /*1670*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* ( */
  /*1671*/ PHRASE_TYPE      | G_FM_or_Star,
  /*1672*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* ) */
  /*1673*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_COMPILE,

// P<rest_of_IDENT_or_FITEM> = ...;
  /*1674*/ COUNT_OF_ALTS    | 0x000002,
  /*1675*/ COUNT_OF_PHRASES | 0x000003,
  /*1676*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002d,  /* , */
  /*1677*/ PHRASE_TYPE      | G_NL_opt,
  /*1678*/ PHRASE_TYPE      | G_IDENT,
  /*1679*/ COUNT_OF_PHRASES | 0x000003,
  /*1680*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002d,  /* , */
  /*1681*/ PHRASE_TYPE      | G_NL_opt,
  /*1682*/ PHRASE_TYPE      | G_FITEM,

// P<rest_of_IDENT_or_FITEMS> = ...;
  /*1683*/ COUNT_OF_ALTS    | 0x000002,
  /*1684*/ COUNT_OF_PHRASES | 0x000002,
  /*1685*/ PHRASE_TYPE      | G_rest_of_IDENT_or_FITEM,
  /*1686*/ PHRASE_TYPE      | G_rest_of_IDENT_or_FITEMS,
  /*1687*/ COUNT_OF_PHRASES | 0x000001,
  /*1688*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<FITEM_and_rest> = ...;
  /*1689*/ COUNT_OF_ALTS    | 0x000001,
  /*1690*/ COUNT_OF_PHRASES | 0x000002,
  /*1691*/ PHRASE_TYPE      | G_FITEM,
  /*1692*/ PHRASE_TYPE      | G_rest_of_IDENT_or_FITEMS,

// P<FITEM_and_more> = ...;
  /*1693*/ COUNT_OF_ALTS    | 0x000001,
  /*1694*/ COUNT_OF_PHRASES | 0x000002,
  /*1695*/ PHRASE_TYPE      | G_FITEM_and_rest,
  /*1696*/ PHRASE_TYPE      | G_FMOR_FITEMS,

// P<FMOR_FITEMS> = ...;
  /*1697*/ COUNT_OF_ALTS    | 0x000002,
  /*1698*/ COUNT_OF_PHRASES | 0x000004,
  /*1699*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000063,  /* or */
  /*1700*/ PHRASE_TYPE      | G_NL_opt,
  /*1701*/ PHRASE_TYPE      | G_FITEM_and_rest,
  /*1702*/ PHRASE_TYPE      | G_FMOR_FITEMS,
  /*1703*/ COUNT_OF_PHRASES | 0x000001,
  /*1704*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<VDEC_or_ADEC> = ...;
  /*1705*/ COUNT_OF_ALTS    | 0x000002,
  /*1706*/ COUNT_OF_PHRASES | 0x000002,
  /*1707*/ SEMANTIC_TYPE    | S_VDEC,
  /*1708*/ PHRASE_TYPE      | G_IDENT,
  /*1709*/ COUNT_OF_PHRASES | 0x000004,
  /*1710*/ SEMANTIC_TYPE    | S_ADEC,
  /*1711*/ PHRASE_TYPE      | G_IDENTS,
  /*1712*/ PHRASE_TYPE      | G_RCONST_BOUNDS,
  /*1713*/ PHRASE_TYPE      | G_another_MOREA_opt,

// P<another_MOREA_opt> = ...;
  /*1714*/ COUNT_OF_ALTS    | 0x000002,
  /*1715*/ COUNT_OF_PHRASES | 0x000003,
  /*1716*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002d,  /* , */
  /*1717*/ PHRASE_TYPE      | G_NL_opt,
  /*1718*/ PHRASE_TYPE      | G_MOREA,
  /*1719*/ COUNT_OF_PHRASES | 0x000001,
  /*1720*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<rest_of_MOREA> = ...;
  /*1721*/ COUNT_OF_ALTS    | 0x000002,
  /*1722*/ COUNT_OF_PHRASES | 0x000004,
  /*1723*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002d,  /* , */
  /*1724*/ PHRASE_TYPE      | G_NL_opt,
  /*1725*/ PHRASE_TYPE      | G_MOREA,
  /*1726*/ PHRASE_TYPE      | G_rest_of_MOREA,
  /*1727*/ COUNT_OF_PHRASES | 0x000001,
  /*1728*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<MOREA> = ...;
  /*1729*/ COUNT_OF_ALTS    | 0x000002,
  /*1730*/ COUNT_OF_PHRASES | 0x000003,
  /*1731*/ PHRASE_TYPE      | G_IDENTS,
  /*1732*/ PHRASE_TYPE      | G_RCONST_BOUNDS,
  /*1733*/ PHRASE_TYPE      | G_rest_of_MOREA,
  /*1734*/ COUNT_OF_PHRASES | 0x000002,
  /*1735*/ PHRASE_TYPE      | G_FITEM,
  /*1736*/ PHRASE_TYPE      | G_rest_of_IDENT_or_FITEMS,

// P<FITEM> = ...;
  /*1737*/ COUNT_OF_ALTS    | 0x000002,
  /*1738*/ COUNT_OF_PHRASES | 0x000003,
  /*1739*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* ( */
  /*1740*/ PHRASE_TYPE      | G_FITEM_and_more,
  /*1741*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* ) */
  /*1742*/ COUNT_OF_PHRASES | 0x000002,
  /*1743*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_QDECL,
  /*1744*/ PHRASE_TYPE      | G_VDEC_or_ADEC,

// P<record_field_decl> = ...;
  /*1745*/ COUNT_OF_ALTS    | 0x000011,
  /*1746*/ COUNT_OF_PHRASES | 0x000003,
  /*1747*/ PHRASE_TYPE      | G_simple_type,
  /*1748*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000035,  /* name */
  /*1749*/ PHRASE_TYPE      | G_IDENTS,
  /*1750*/ COUNT_OF_PHRASES | 0x000004,
  /*1751*/ PHRASE_TYPE      | G_simple_type,
  /*1752*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000037,  /* array */
  /*1753*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000035,  /* name */
  /*1754*/ PHRASE_TYPE      | G_IDENTS,
  /*1755*/ COUNT_OF_PHRASES | 0x000004,
  /*1756*/ PHRASE_TYPE      | G_simple_type,
  /*1757*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000037,  /* array */
  /*1758*/ PHRASE_TYPE      | G_IDENTS,
  /*1759*/ PHRASE_TYPE      | G_RCONST_BOUNDS,
  /*1760*/ COUNT_OF_PHRASES | 0x000005,
  /*1761*/ PHRASE_TYPE      | G_simple_type,
  /*1762*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000035,  /* name */
  /*1763*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000037,  /* array */
  /*1764*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000035,  /* name */
  /*1765*/ PHRASE_TYPE      | G_IDENTS,
  /*1766*/ COUNT_OF_PHRASES | 0x000002,
  /*1767*/ PHRASE_TYPE      | G_simple_type,
  /*1768*/ PHRASE_TYPE      | G_IDENTS,
  /*1769*/ COUNT_OF_PHRASES | 0x000006,
  /*1770*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000033,  /* string */
  /*1771*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* ( */
  /*1772*/ PHRASE_TYPE      | G_Star_or_IEXP,
  /*1773*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* ) */
  /*1774*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000035,  /* name */
  /*1775*/ PHRASE_TYPE      | G_IDENTS,
  /*1776*/ COUNT_OF_PHRASES | 0x000007,
  /*1777*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000033,  /* string */
  /*1778*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* ( */
  /*1779*/ PHRASE_TYPE      | G_Star_or_IEXP,
  /*1780*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* ) */
  /*1781*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000037,  /* array */
  /*1782*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000035,  /* name */
  /*1783*/ PHRASE_TYPE      | G_IDENTS,
  /*1784*/ COUNT_OF_PHRASES | 0x000007,
  /*1785*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000033,  /* string */
  /*1786*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* ( */
  /*1787*/ PHRASE_TYPE      | G_IEXP,
  /*1788*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* ) */
  /*1789*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000037,  /* array */
  /*1790*/ PHRASE_TYPE      | G_IDENTS,
  /*1791*/ PHRASE_TYPE      | G_RCONST_BOUNDS,
  /*1792*/ COUNT_OF_PHRASES | 0x000008,
  /*1793*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000033,  /* string */
  /*1794*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* ( */
  /*1795*/ PHRASE_TYPE      | G_Star_or_IEXP,
  /*1796*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* ) */
  /*1797*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000035,  /* name */
  /*1798*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000037,  /* array */
  /*1799*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000035,  /* name */
  /*1800*/ PHRASE_TYPE      | G_IDENTS,
  /*1801*/ COUNT_OF_PHRASES | 0x000008,
  /*1802*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000033,  /* string */
  /*1803*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* ( */
  /*1804*/ PHRASE_TYPE      | G_Star_or_IEXP,
  /*1805*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* ) */
  /*1806*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000035,  /* name */
  /*1807*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000037,  /* array */
  /*1808*/ PHRASE_TYPE      | G_IDENTS,
  /*1809*/ PHRASE_TYPE      | G_RCONST_BOUNDS,
  /*1810*/ COUNT_OF_PHRASES | 0x000005,
  /*1811*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000033,  /* string */
  /*1812*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* ( */
  /*1813*/ PHRASE_TYPE      | G_IEXP,
  /*1814*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* ) */
  /*1815*/ PHRASE_TYPE      | G_IDENTS,
  /*1816*/ COUNT_OF_PHRASES | 0x000008,
  /*1817*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000034,  /* record */
  /*1818*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* ( */
  /*1819*/ PHRASE_TYPE      | G_IDENT,
  /*1820*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* ) */
  /*1821*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000035,  /* name */
  /*1822*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000037,  /* array */
  /*1823*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000035,  /* name */
  /*1824*/ PHRASE_TYPE      | G_IDENTS,
  /*1825*/ COUNT_OF_PHRASES | 0x000008,
  /*1826*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000034,  /* record */
  /*1827*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* ( */
  /*1828*/ PHRASE_TYPE      | G_IDENT,
  /*1829*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* ) */
  /*1830*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000035,  /* name */
  /*1831*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000037,  /* array */
  /*1832*/ PHRASE_TYPE      | G_IDENTS,
  /*1833*/ PHRASE_TYPE      | G_RCONST_BOUNDS,
  /*1834*/ COUNT_OF_PHRASES | 0x000006,
  /*1835*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000034,  /* record */
  /*1836*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* ( */
  /*1837*/ PHRASE_TYPE      | G_IDENT,
  /*1838*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* ) */
  /*1839*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000035,  /* name */
  /*1840*/ PHRASE_TYPE      | G_IDENTS,
  /*1841*/ COUNT_OF_PHRASES | 0x000007,
  /*1842*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000034,  /* record */
  /*1843*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* ( */
  /*1844*/ PHRASE_TYPE      | G_IDENT,
  /*1845*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* ) */
  /*1846*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000037,  /* array */
  /*1847*/ PHRASE_TYPE      | G_IDENTS,
  /*1848*/ PHRASE_TYPE      | G_RCONST_BOUNDS,
  /*1849*/ COUNT_OF_PHRASES | 0x000005,
  /*1850*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000034,  /* record */
  /*1851*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* ( */
  /*1852*/ PHRASE_TYPE      | G_IDENT,
  /*1853*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* ) */
  /*1854*/ PHRASE_TYPE      | G_IDENTS,
  /*1855*/ COUNT_OF_PHRASES | 0x000004,
  /*1856*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* ( */
  /*1857*/ PHRASE_TYPE      | G_record_field_declarations,
  /*1858*/ PHRASE_TYPE      | G_OR_record_field_declarations,
  /*1859*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* ) */

// P<OR_record_field_declarations> = ...;
  /*1860*/ COUNT_OF_ALTS    | 0x000002,
  /*1861*/ COUNT_OF_PHRASES | 0x000003,
  /*1862*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000063,  /* or */
  /*1863*/ PHRASE_TYPE      | G_record_field_declarations,
  /*1864*/ PHRASE_TYPE      | G_OR_record_field_declarations,
  /*1865*/ COUNT_OF_PHRASES | 0x000001,
  /*1866*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<more_record_field_decls> = ...;
  /*1867*/ COUNT_OF_ALTS    | 0x000002,
  /*1868*/ COUNT_OF_PHRASES | 0x000004,
  /*1869*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002d,  /* , */
  /*1870*/ PHRASE_TYPE      | G_NL_opt,
  /*1871*/ PHRASE_TYPE      | G_record_field_decl,
  /*1872*/ PHRASE_TYPE      | G_more_record_field_decls,
  /*1873*/ COUNT_OF_PHRASES | 0x000001,
  /*1874*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<record_field_declarations> = ...;
  /*1875*/ COUNT_OF_ALTS    | 0x000001,
  /*1876*/ COUNT_OF_PHRASES | 0x000003,
  /*1877*/ PHRASE_TYPE      | G_NL_opt,
  /*1878*/ PHRASE_TYPE      | G_record_field_decl,
  /*1879*/ PHRASE_TYPE      | G_more_record_field_decls,

// P<CONST_BOUNDS> = ...;
  /*1880*/ COUNT_OF_ALTS    | 0x000001,
  /*1881*/ COUNT_OF_PHRASES | 0x000005,
  /*1882*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* ( */
  /*1883*/ PHRASE_TYPE      | G_IEXP,
  /*1884*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002e,  /* : */
  /*1885*/ PHRASE_TYPE      | G_IEXP,
  /*1886*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* ) */

// P<RCONST_BOUNDS> = ...;
  /*1887*/ COUNT_OF_ALTS    | 0x000001,
  /*1888*/ COUNT_OF_PHRASES | 0x000005,
  /*1889*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* ( */
  /*1890*/ PHRASE_TYPE      | G_IEXP,
  /*1891*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002e,  /* : */
  /*1892*/ PHRASE_TYPE      | G_IEXP,
  /*1893*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* ) */

// P<BOUNDS_PAIR> = ...;
  /*1894*/ COUNT_OF_ALTS    | 0x000001,
  /*1895*/ COUNT_OF_PHRASES | 0x000003,
  /*1896*/ PHRASE_TYPE      | G_EXP,
  /*1897*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002e,  /* : */
  /*1898*/ PHRASE_TYPE      | G_EXP,

// P<rest_of_BPL_LIST> = ...;
  /*1899*/ COUNT_OF_ALTS    | 0x000002,
  /*1900*/ COUNT_OF_PHRASES | 0x000003,
  /*1901*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002d,  /* , */
  /*1902*/ PHRASE_TYPE      | G_BOUNDS_PAIR,
  /*1903*/ PHRASE_TYPE      | G_rest_of_BPL_LIST,
  /*1904*/ COUNT_OF_PHRASES | 0x000001,
  /*1905*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<BPL_LIST> = ...;
  /*1906*/ COUNT_OF_ALTS    | 0x000001,
  /*1907*/ COUNT_OF_PHRASES | 0x000002,
  /*1908*/ PHRASE_TYPE      | G_BOUNDS_PAIR,
  /*1909*/ PHRASE_TYPE      | G_rest_of_BPL_LIST,

// P<BPL> = ...;
  /*1910*/ COUNT_OF_ALTS    | 0x000001,
  /*1911*/ COUNT_OF_PHRASES | 0x000003,
  /*1912*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* ( */
  /*1913*/ PHRASE_TYPE      | G_BPL_LIST,
  /*1914*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* ) */

// P<another_FPP0> = ...;
  /*1915*/ COUNT_OF_ALTS    | 0x000002,
  /*1916*/ COUNT_OF_PHRASES | 0x000003,
  /*1917*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002d,  /* , */
  /*1918*/ PHRASE_TYPE      | G_NL_opt,
  /*1919*/ PHRASE_TYPE      | G_FPP0,
  /*1920*/ COUNT_OF_PHRASES | 0x000000,

// P<parameter_type> = ...;
  /*1921*/ COUNT_OF_ALTS    | 0x000003,
  /*1922*/ COUNT_OF_PHRASES | 0x000001,
  /*1923*/ PHRASE_TYPE      | G_simple_type,
  /*1924*/ COUNT_OF_PHRASES | 0x000004,
  /*1925*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000033,  /* string */
  /*1926*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* ( */
  /*1927*/ PHRASE_TYPE      | G_Star_or_IEXP,
  /*1928*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* ) */
  /*1929*/ COUNT_OF_PHRASES | 0x000004,
  /*1930*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000034,  /* record */
  /*1931*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* ( */
  /*1932*/ PHRASE_TYPE      | G_FM_or_Star,
  /*1933*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* ) */

// P<parameter_type_decl> = ...;
  /*1934*/ COUNT_OF_ALTS    | 0x000004,
  /*1935*/ COUNT_OF_PHRASES | 0x000004,
  /*1936*/ PHRASE_TYPE      | G_parameter_type,
  /*1937*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000035,  /* name */
  /*1938*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000037,  /* array */
  /*1939*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000035,  /* name */
  /*1940*/ COUNT_OF_PHRASES | 0x000002,
  /*1941*/ PHRASE_TYPE      | G_parameter_type,
  /*1942*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000035,  /* name */
  /*1943*/ COUNT_OF_PHRASES | 0x000003,
  /*1944*/ PHRASE_TYPE      | G_parameter_type,
  /*1945*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000037,  /* array */
  /*1946*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000035,  /* name */
  /*1947*/ COUNT_OF_PHRASES | 0x000001,
  /*1948*/ PHRASE_TYPE      | G_parameter_type,

// P<VDEC_or_PROC> = ...;
  /*1949*/ COUNT_OF_ALTS    | 0x000002,
  /*1950*/ COUNT_OF_PHRASES | 0x000004,
  /*1951*/ SEMANTIC_TYPE    | S_VDEC,
  /*1952*/ PHRASE_TYPE      | G_parameter_type_decl,
  /*1953*/ PHRASE_TYPE      | G_IDENTS,
  /*1954*/ PHRASE_TYPE      | G_another_FPP0,
  /*1955*/ COUNT_OF_PHRASES | 0x000006,
  /*1956*/ SEMANTIC_TYPE    | S_PROC,
  /*1957*/ PHRASE_TYPE      | G_IDENT,
  /*1958*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_DUP,
  /*1959*/ PHRASE_TYPE      | G_FPP1,
  /*1960*/ PHRASE_TYPE      | G_another_FPP0,
  /*1961*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_EDUP,

// P<FPP> = ...;
  /*1962*/ COUNT_OF_ALTS    | 0x000001,
  /*1963*/ COUNT_OF_PHRASES | 0x000004,
  /*1964*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_PIN,
  /*1965*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_QDECL,
  /*1966*/ PHRASE_TYPE      | G_VDEC_or_PROC,
  /*1967*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_POUT,

// P<FPP0> = ...;
  /*1968*/ COUNT_OF_ALTS    | 0x000001,
  /*1969*/ COUNT_OF_PHRASES | 0x000002,
  /*1970*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_QDECL,
  /*1971*/ PHRASE_TYPE      | G_VDEC_or_PROC,

// P<FPP1_stuff_opt> = ...;
  /*1972*/ COUNT_OF_ALTS    | 0x000002,
  /*1973*/ COUNT_OF_PHRASES | 0x000001,
  /*1974*/ PHRASE_TYPE      | G_FPP1_stuff,
  /*1975*/ COUNT_OF_PHRASES | 0x000001,
  /*1976*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<FPP1_stuff> = ...;
  /*1977*/ COUNT_OF_ALTS    | 0x000001,
  /*1978*/ COUNT_OF_PHRASES | 0x000005,
  /*1979*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* ( */
  /*1980*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_LOCAL,
  /*1981*/ PHRASE_TYPE      | G_FPP2,
  /*1982*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_GAPP,
  /*1983*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* ) */

// P<FPP1> = ...;
  /*1984*/ COUNT_OF_ALTS    | 0x000001,
  /*1985*/ COUNT_OF_PHRASES | 0x000003,
  /*1986*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_PIN,
  /*1987*/ PHRASE_TYPE      | G_FPP1_stuff_opt,
  /*1988*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_POUT,

// P<rest_of_FPP2_opt> = ...;
  /*1989*/ COUNT_OF_ALTS    | 0x000002,
  /*1990*/ COUNT_OF_PHRASES | 0x000003,
  /*1991*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002d,  /* , */
  /*1992*/ PHRASE_TYPE      | G_NL_opt,
  /*1993*/ PHRASE_TYPE      | G_FPP2,
  /*1994*/ COUNT_OF_PHRASES | 0x000001,
  /*1995*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<FPP2_stuff> = ...;
  /*1996*/ COUNT_OF_ALTS    | 0x000002,
  /*1997*/ COUNT_OF_PHRASES | 0x000002,
  /*1998*/ SEMANTIC_TYPE    | S_VDEC,
  /*1999*/ PHRASE_TYPE      | G_IDENTS,
  /*2000*/ COUNT_OF_PHRASES | 0x000003,
  /*2001*/ SEMANTIC_TYPE    | S_PROC,
  /*2002*/ PHRASE_TYPE      | G_IDENT,
  /*2003*/ PHRASE_TYPE      | G_FPP1,

// P<FPP2> = ...;
  /*2004*/ COUNT_OF_ALTS    | 0x000001,
  /*2005*/ COUNT_OF_PHRASES | 0x000003,
  /*2006*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_QDECL,
  /*2007*/ PHRASE_TYPE      | G_FPP2_stuff,
  /*2008*/ PHRASE_TYPE      | G_rest_of_FPP2_opt,

// P<ADEFN> = ...;
  /*2009*/ COUNT_OF_ALTS    | 0x000001,
  /*2010*/ COUNT_OF_PHRASES | 0x000003,
  /*2011*/ PHRASE_TYPE      | G_IDENTS,
  /*2012*/ PHRASE_TYPE      | G_BPL,
  /*2013*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_COMPILE,

// P<APP> = ...;
  /*2014*/ COUNT_OF_ALTS    | 0x000006,
  /*2015*/ COUNT_OF_PHRASES | 0x000001,
  /*2016*/ PHRASE_TYPE      | G_APP6,
  /*2017*/ COUNT_OF_PHRASES | 0x000001,
  /*2018*/ PHRASE_TYPE      | G_APP5,
  /*2019*/ COUNT_OF_PHRASES | 0x000001,
  /*2020*/ PHRASE_TYPE      | G_APP4,
  /*2021*/ COUNT_OF_PHRASES | 0x000001,
  /*2022*/ PHRASE_TYPE      | G_APP3,
  /*2023*/ COUNT_OF_PHRASES | 0x000001,
  /*2024*/ PHRASE_TYPE      | G_APP2,
  /*2025*/ COUNT_OF_PHRASES | 0x000001,
  /*2026*/ PHRASE_TYPE      | G_BASEAPP,

// P<BASEAPP> = ...;
  /*2027*/ COUNT_OF_ALTS    | 0x000001,
  /*2028*/ COUNT_OF_PHRASES | 0x000001,
  /*2029*/ PHRASE_TYPE      | G_EXP,

// P<APP2> = ...;
  /*2030*/ COUNT_OF_ALTS    | 0x000001,
  /*2031*/ COUNT_OF_PHRASES | 0x000004,
  /*2032*/ PHRASE_TYPE      | G_EXP,
  /*2033*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002d,  /* , */
  /*2034*/ PHRASE_TYPE      | G_NL_opt,
  /*2035*/ PHRASE_TYPE      | G_EXP,

// P<APP3> = ...;
  /*2036*/ COUNT_OF_ALTS    | 0x000001,
  /*2037*/ COUNT_OF_PHRASES | 0x000007,
  /*2038*/ PHRASE_TYPE      | G_EXP,
  /*2039*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002d,  /* , */
  /*2040*/ PHRASE_TYPE      | G_NL_opt,
  /*2041*/ PHRASE_TYPE      | G_EXP,
  /*2042*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002d,  /* , */
  /*2043*/ PHRASE_TYPE      | G_NL_opt,
  /*2044*/ PHRASE_TYPE      | G_EXP,

// P<APP4> = ...;
  /*2045*/ COUNT_OF_ALTS    | 0x000001,
  /*2046*/ COUNT_OF_PHRASES | 0x00000a,
  /*2047*/ PHRASE_TYPE      | G_EXP,
  /*2048*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002d,  /* , */
  /*2049*/ PHRASE_TYPE      | G_NL_opt,
  /*2050*/ PHRASE_TYPE      | G_EXP,
  /*2051*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002d,  /* , */
  /*2052*/ PHRASE_TYPE      | G_NL_opt,
  /*2053*/ PHRASE_TYPE      | G_EXP,
  /*2054*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002d,  /* , */
  /*2055*/ PHRASE_TYPE      | G_NL_opt,
  /*2056*/ PHRASE_TYPE      | G_EXP,

// P<APP5> = ...;
  /*2057*/ COUNT_OF_ALTS    | 0x000001,
  /*2058*/ COUNT_OF_PHRASES | 0x00000d,
  /*2059*/ PHRASE_TYPE      | G_EXP,
  /*2060*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002d,  /* , */
  /*2061*/ PHRASE_TYPE      | G_NL_opt,
  /*2062*/ PHRASE_TYPE      | G_EXP,
  /*2063*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002d,  /* , */
  /*2064*/ PHRASE_TYPE      | G_NL_opt,
  /*2065*/ PHRASE_TYPE      | G_EXP,
  /*2066*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002d,  /* , */
  /*2067*/ PHRASE_TYPE      | G_NL_opt,
  /*2068*/ PHRASE_TYPE      | G_EXP,
  /*2069*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002d,  /* , */
  /*2070*/ PHRASE_TYPE      | G_NL_opt,
  /*2071*/ PHRASE_TYPE      | G_EXP,

// P<APP6> = ...;
  /*2072*/ COUNT_OF_ALTS    | 0x000001,
  /*2073*/ COUNT_OF_PHRASES | 0x000010,
  /*2074*/ PHRASE_TYPE      | G_EXP,
  /*2075*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002d,  /* , */
  /*2076*/ PHRASE_TYPE      | G_NL_opt,
  /*2077*/ PHRASE_TYPE      | G_EXP,
  /*2078*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002d,  /* , */
  /*2079*/ PHRASE_TYPE      | G_NL_opt,
  /*2080*/ PHRASE_TYPE      | G_EXP,
  /*2081*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002d,  /* , */
  /*2082*/ PHRASE_TYPE      | G_NL_opt,
  /*2083*/ PHRASE_TYPE      | G_EXP,
  /*2084*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002d,  /* , */
  /*2085*/ PHRASE_TYPE      | G_NL_opt,
  /*2086*/ PHRASE_TYPE      | G_EXP,
  /*2087*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002d,  /* , */
  /*2088*/ PHRASE_TYPE      | G_NL_opt,
  /*2089*/ PHRASE_TYPE      | G_EXP,

// P<rest_of_IEXP> = ...;
  /*2090*/ COUNT_OF_ALTS    | 0x000002,
  /*2091*/ COUNT_OF_PHRASES | 0x000002,
  /*2092*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00002d,  /* , */
  /*2093*/ PHRASE_TYPE      | G_const_event_list,
  /*2094*/ COUNT_OF_PHRASES | 0x000001,
  /*2095*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<const_event_list> = ...;
  /*2096*/ COUNT_OF_ALTS    | 0x000001,
  /*2097*/ COUNT_OF_PHRASES | 0x000002,
  /*2098*/ PHRASE_TYPE      | G_IEXP,
  /*2099*/ PHRASE_TYPE      | G_rest_of_IEXP,

// P<N_or_AN_or_NAN> = ...;
  /*2100*/ COUNT_OF_ALTS    | 0x000004,
  /*2101*/ COUNT_OF_PHRASES | 0x000001,
  /*2102*/ PHRASE_TYPE      | G_N,
  /*2103*/ COUNT_OF_PHRASES | 0x000001,
  /*2104*/ PHRASE_TYPE      | G_AN,
  /*2105*/ COUNT_OF_PHRASES | 0x000001,
  /*2106*/ PHRASE_TYPE      | G_NAN,
  /*2107*/ COUNT_OF_PHRASES | 0x000001,
  /*2108*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000071,  /* 0 */

// P<ADDOP_IEXP_opt> = ...;
  /*2109*/ COUNT_OF_ALTS    | 0x000002,
  /*2110*/ COUNT_OF_PHRASES | 0x000002,
  /*2111*/ PHRASE_TYPE      | G_AddressOffsetOp,
  /*2112*/ PHRASE_TYPE      | G_IEXP,
  /*2113*/ COUNT_OF_PHRASES | 0x000001,
  /*2114*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<rest_of_EQs_init> = ...;
  /*2115*/ COUNT_OF_ALTS    | 0x000002,
  /*2116*/ COUNT_OF_PHRASES | 0x000005,
  /*2117*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_OTHER,
  /*2118*/ PHRASE_TYPE      | G_V_or_N,
  /*2119*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_PROT,
  /*2120*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_TYPE,
  /*2121*/ PHRASE_TYPE      | G_ADDOP_IEXP_opt,
  /*2122*/ COUNT_OF_PHRASES | 0x000001,
  /*2123*/ PHRASE_TYPE      | G_IEXP,

// P<EQs> = ...;
  /*2124*/ COUNT_OF_ALTS    | 0x000003,
  /*2125*/ COUNT_OF_PHRASES | 0x000004,
  /*2126*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x00001a,  /* = */
  /*2127*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_DUMMY,
  /*2128*/ PHRASE_TYPE      | G_NL_opt,
  /*2129*/ PHRASE_TYPE      | G_IEXP,
  /*2130*/ COUNT_OF_PHRASES | 0x000005,
  /*2131*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000023,  /* == */
  /*2132*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_DUMMY,
  /*2133*/ PHRASE_TYPE      | G_NL_opt,
  /*2134*/ PHRASE_TYPE      | G_N_or_AN_or_NAN,
  /*2135*/ PHRASE_TYPE      | G_rest_of_EQs_init,
  /*2136*/ COUNT_OF_PHRASES | 0x000001,
  /*2137*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_DUBIOUS,

// P<INITVAR> = ...;
  /*2138*/ COUNT_OF_ALTS    | 0x000001,
  /*2139*/ COUNT_OF_PHRASES | 0x000005,
  /*2140*/ PHRASE_TYPE      | G_CIDENT,
  /*2141*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_SETTYPE,
  /*2142*/ PHRASE_TYPE      | G_ALIAS_opt,
  /*2143*/ PHRASE_TYPE      | G_EQs,
  /*2144*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_COMPILE,

// P<CIEXP> = ...;
  /*2145*/ COUNT_OF_ALTS    | 0x000001,
  /*2146*/ COUNT_OF_PHRASES | 0x000002,
  /*2147*/ PHRASE_TYPE      | G_IEXP,
  /*2148*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_COMPILE,

// P<RESLEFT_opt> = ...;
  /*2149*/ COUNT_OF_ALTS    | 0x000002,
  /*2150*/ COUNT_OF_PHRASES | 0x000003,
  /*2151*/ PHRASE_TYPE      | G_V_or_N,
  /*2152*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_PROT,
  /*2153*/ PHRASE_TYPE      | G_DOTL,
  /*2154*/ COUNT_OF_PHRASES | 0x000001,
  /*2155*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<RESRIGHT_opt> = ...;
  /*2156*/ COUNT_OF_ALTS    | 0x000002,
  /*2157*/ COUNT_OF_PHRASES | 0x000003,
  /*2158*/ PHRASE_TYPE      | G_DOTR,
  /*2159*/ PHRASE_TYPE      | G_V_or_N,
  /*2160*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_PROT,
  /*2161*/ COUNT_OF_PHRASES | 0x000001,
  /*2162*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000000,  /*  */

// P<RESEXP> = ...;
  /*2163*/ COUNT_OF_ALTS    | 0x000001,
  /*2164*/ COUNT_OF_PHRASES | 0x000005,
  /*2165*/ PHRASE_TYPE      | G_RESLEFT_opt,
  /*2166*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000032,  /* ( */
  /*2167*/ PHRASE_TYPE      | G_EXP,
  /*2168*/ KEYWORD_TYPE     | WHITESPACE_ALLOWED | 0x000030,  /* ) */
  /*2169*/ PHRASE_TYPE      | G_RESRIGHT_opt,

// P<V_or_N_or_A_or_AN_or_NA_or_NAN> = ...;
  /*2170*/ COUNT_OF_ALTS    | 0x000006,
  /*2171*/ COUNT_OF_PHRASES | 0x000001,
  /*2172*/ PHRASE_TYPE      | G_V,
  /*2173*/ COUNT_OF_PHRASES | 0x000001,
  /*2174*/ PHRASE_TYPE      | G_N,
  /*2175*/ COUNT_OF_PHRASES | 0x000001,
  /*2176*/ PHRASE_TYPE      | G_A,
  /*2177*/ COUNT_OF_PHRASES | 0x000001,
  /*2178*/ PHRASE_TYPE      | G_AN,
  /*2179*/ COUNT_OF_PHRASES | 0x000001,
  /*2180*/ PHRASE_TYPE      | G_NA,
  /*2181*/ COUNT_OF_PHRASES | 0x000001,
  /*2182*/ PHRASE_TYPE      | G_NAN,

// P<V_or_N_or_A_or_AN_or_NA_or_NAN_OTHER> = ...;
  /*2183*/ COUNT_OF_ALTS    | 0x000006,
  /*2184*/ COUNT_OF_PHRASES | 0x000002,
  /*2185*/ PHRASE_TYPE      | G_V,
  /*2186*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_OTHER,
  /*2187*/ COUNT_OF_PHRASES | 0x000002,
  /*2188*/ PHRASE_TYPE      | G_N,
  /*2189*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_OTHER,
  /*2190*/ COUNT_OF_PHRASES | 0x000002,
  /*2191*/ PHRASE_TYPE      | G_A,
  /*2192*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_OTHER,
  /*2193*/ COUNT_OF_PHRASES | 0x000002,
  /*2194*/ PHRASE_TYPE      | G_AN,
  /*2195*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_OTHER,
  /*2196*/ COUNT_OF_PHRASES | 0x000002,
  /*2197*/ PHRASE_TYPE      | G_NA,
  /*2198*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_OTHER,
  /*2199*/ COUNT_OF_PHRASES | 0x000002,
  /*2200*/ PHRASE_TYPE      | G_NAN,
  /*2201*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_OTHER,

// P<NLAB> = ...;
  /*2202*/ COUNT_OF_ALTS    | 0x000001,
  /*2203*/ COUNT_OF_PHRASES | 0x000001,
  /*2204*/ PHRASE_TYPE      | G_L,

// P<NPARM> = ...;
  /*2205*/ COUNT_OF_ALTS    | 0x000002,
  /*2206*/ COUNT_OF_PHRASES | 0x000002,
  /*2207*/ PHRASE_TYPE      | G_V_or_N_or_A_or_AN_or_NA_or_NAN,
  /*2208*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_PROT,
  /*2209*/ COUNT_OF_PHRASES | 0x000001,
  /*2210*/ PHRASE_TYPE      | G_NLAB,

// P<VARP> = ...;
  /*2211*/ COUNT_OF_ALTS    | 0x000001,
  /*2212*/ COUNT_OF_PHRASES | 0x000004,
  /*2213*/ PHRASE_TYPE      | G_V_or_N,
  /*2214*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_PTYPE,
  /*2215*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_PROT,
  /*2216*/ PHRASE_TYPE      | G_ADDOP_SEXP_opt,

// P<ARRAYP> = ...;
  /*2217*/ COUNT_OF_ALTS    | 0x000002,
  /*2218*/ COUNT_OF_PHRASES | 0x000002,
  /*2219*/ PHRASE_TYPE      | G_A,
  /*2220*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_PTYPE,
  /*2221*/ COUNT_OF_PHRASES | 0x000002,
  /*2222*/ PHRASE_TYPE      | G_AN,
  /*2223*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_PTYPE,

// P<NARRAYP> = ...;
  /*2224*/ COUNT_OF_ALTS    | 0x000002,
  /*2225*/ COUNT_OF_PHRASES | 0x000002,
  /*2226*/ PHRASE_TYPE      | G_NA,
  /*2227*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_PTYPE,
  /*2228*/ COUNT_OF_PHRASES | 0x000002,
  /*2229*/ PHRASE_TYPE      | G_NAN,
  /*2230*/ SEMANTIC_TYPE    | GUARD_PHRASE       | S_PTYPE,
};


int parse_init(void)
{
  // peform any initialisation required by the parse-time semantic routines.
  // Note that for now, we have no way of declaring data outside of
  // those procedures.  Obviously this will have to change.

  // LINE RECONSTRUCTION GOES HERE!

  return TRUE;
}
int parse_terminate(void)
{
  // perform any final tidy-up required by the parse-time semantic routines.
  return TRUE;
}
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;

#ifdef NEVER
  // move to parser.c ...
  auto int wstr2pool(wchar_t *wstring) {
    int Sp = Stringpool_nextfree; // really more of a charpool
    for (;;) {
      _Stringpool(Stringpool_nextfree++) = *wstring;
      if (*wstring == 0) return Sp;
      wstring++;
    }
    return Sp;
  };
#endif

  // The source file has already been read naively 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.

  // inclusive_start = atom(AtomPos).start;
  // exclusive_end = atom(AtomPos).end;
  // for (i = inclusive_start; i < exclusive_end; i++) {
  //   wint_t c = source(i);
  //   if (isalpha(c) && isupper(c)) c = tolower(c);
  //   fprintf(stdout, "%lc", c);
  // }

  // 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 can be encoded as 1D400:1D419 and a:z as 1D41A:1D433 :-)
  //
  // These look more or less like ordinary text if they happen 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.


  DECLARE(SYM, reconstructed, 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 PARSED.
  // uparse.c has been modified so that its implicit whitespace skipping no longer skips '\n'.
  // (Hopefully that did not break algol60)
  
  // (Whether \n at the end of a comment is gobbled or not may have to be determined by inspection...)
  // And God knows what Imp77 does with '!' comments which seem to be insertable in many unexpected places.

  // 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.

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

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


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


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

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

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




    else if (WC == '{') {

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

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




    else if (WC == '\'') {
      _source(PP++).ch = WC;
      for (;;) {
        WC = SYM(FP++).ch; CHECK_EOF(WC);
        if (WC == '\'') {
          // peek ahead:
          int Peek = SYM(FP).ch; CHECK_EOF(Peek);
          if (Peek == '\'') { // doubled 's
            _source(PP++).ch = WC;
            _source(PP++).ch = Peek;
          } 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 == '"') {
      _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;
          } else {
            _source(PP++).ch = WC;
            --FP; _source(PP).end = SYM(FP-1).end; // Leave Peek for later.
            break;
          }
        } else {
          _source(PP++).ch = WC;
        }
      }
      continue;
    }




    else if (WC == ' ' || WC == '\t' || WC == '\f') {  // isblank(WC)? Portable Unicode version?

      continue;
    }




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

      if ((WC == '\n') && (source(PP-1).ch == 'c')) {  // BEWARE WHEN CHANGING STROPPING ENCODING: Looking for a preceding '%C' ...
        _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, A HACK:
        int Lookahead = FP;
        while (SYM(Lookahead).ch == '\n' || SYM(Lookahead).ch == ' ' || SYM(Lookahead).ch == '\t' || SYM(Lookahead).ch == '\f') {
          // No worries about  '{...}' - this behaviour seems to be identical to Imp77's
          _SYM(Lookahead).ch = ' ';
          Lookahead++;
          // gobble following newlines and whitespace before next significant character.
        }
        continue;
      }

      if (isalpha(WC) && islower(WC)) { // Unicode equivalents?
        WC = toupper(WC);  // ALSO TEMPORARY
      }
      _source(PP++).ch = WC;
      continue;
    }


    // Still skipping whitespace ...

  }

  DONE();
  P = 0;
  while (source(P).ch != 0) {
    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_CONST(void)
{
#ifdef IN_PARSER
  // At the moment we're primarily interested in identifying the
  // string representing the constant.  We'll worry about its value later.
  auto void getbase(int base, int *result, int *OK) {
    int Backtrack = TP;
    int sym = source(TP++).ch;
    int val = 0;
    for (;;) {
      if (('a' <= sym) && (sym <= 'z')) sym = sym - 'a' + 'A';
      if ((base <= 10) && (('0' <= sym) && (sym < '0'+base))) {
        sym -= '0';
      } else if (('0' <= sym) && (sym <= '9')) {
        sym = sym - '0';
      } else if (('A' <= sym) && (sym < 'A'+base-10)) {
        sym = sym - 'A' + 10;
      } else {
        TP -= 1;
        *OK = (TP == Backtrack);
        *result = val;
        return;
      }
      val = val * base + sym;
      sym = source(TP++).ch;
    }
  }
  // whitespace has been skipped.
  int Backtrack = TP;
  int base = 10;
  int sym = source(TP++).ch;
  int peek = source(TP).ch;
  int len = 0;
  int OK, ignore, decimal;

  if (sym == '\'') {
    for (;;) {
      sym = source(TP++).ch;
      peek = source(TP).ch;
      if (sym == '\'' && peek == '\'') {
        TP += 1; len += 1;
      } else if (sym == '\'') {
        break;
      } else {
        // add to constant
        len += 1;
      }
    }
    if (len == 1) {
      // type = byte
    } else if (len <= 4) {
      // type = byte, short, or integer
    } else {
      // too big! (unless we're allowing %longinteger)
    }
    return TRUE;
  } else if (sym == '"') {
    for (;;) {
      sym = source(TP++).ch;
      peek = source(TP).ch;
      if (sym == '"' && peek == '"') {
        TP += 1; len += 1;
      } else if (sym == '"') {
        break;
      } else {
        // add to string
        len += 1;
      }
    }
    if (len > 255) {
      // string capacity exceeded.
    }
    return TRUE;
  } else if ('0' <= sym && sym <= '9') {
    TP -= 1;
    getbase(10, &base, &OK);
    peek = source(TP).ch;
    if (peek == '_') {
      do {
        int nextbase;
        sym = source(TP++).ch; // '_'
        getbase(base, &nextbase, &OK);
        peek = source(TP).ch;
        if (peek=='_') base = nextbase;
      } while (peek=='_');
      return TRUE;
    } else if (peek == '.') {
      sym = source(TP++).ch; // '.'
      peek = source(TP).ch;
      getbase(10, &decimal, &OK);
      peek = source(TP).ch;

      if (peek == '@') {
        sym = source(TP++).ch; // '@'
        peek = source(TP).ch;
        if (peek == '-') {
          sym = source(TP++).ch; // '-'
          peek = source(TP).ch;
        }
        getbase(10, &ignore, &OK);
      }
    } else if (peek == '@') {
      sym = source(TP++).ch; // '@'
      peek = source(TP).ch;
      if (peek == '-') {
        sym = source(TP++).ch; // '-'
        peek = source(TP).ch;
      }
      getbase(10, &ignore, &OK);
    } else {
      return TRUE; // plain number like 123
    }
    return TRUE;  
  } else if (('A' <= sym && sym <= 'Z') || ('a' <= sym && sym <= 'z')) {
    int peek = source(TP).ch;
    int type = sym; if ('a' <= type && type <= 'z') type = type - 'A' + 'a';
    if (peek == '\'') {
      sym = source(TP++).ch;  // '
      // M'...' X'...' R'...' etc.
      if (type != 'M' && type != 'X' && type != 'R' && type != 'B' && type != 'O') {
        TP = Backtrack; return FALSE;
      }
      for (;;) {
        sym = source(TP++).ch;
        peek = source(TP).ch;
        if (sym == '\'' && peek == '\'') {
          TP += 1; len += 1;
        } else if (sym == '\'') {
          break;
        } else {
          // add to constant.  CHECK APPROPRIATE RANGE FOR BIN/HEX/OCTAL ETC.
          len += 1;
        }
      }
      if ((type == 'M' && len > 4) || len > 8) {
        // capacity exceeded
      }
      return TRUE;
    } else {
      TP = Backtrack; return FALSE;
    }
  } else {
    TP = Backtrack; return FALSE;
  }

  (void)literal_descriptor(Backtrack, TP);

#endif
  return TRUE;
}
int parse_DUMMY(void)
{ return TRUE; }
int parse_TYPE(void)
{ return TRUE; }
int parse_PROT(void)
{ return TRUE; }
int parse_SETPROT(void)
{ return TRUE; }
int parse_PTYPE(void)
{ return TRUE; }
int parse_GAPP(void)
{ return TRUE; }
int parse_LOCAL(void)
{ return TRUE; }
int parse_GUARD(void)
{ return TRUE; }
int parse_MCODE(void)
{ return TRUE; }
int parse_CDUMMY(void)
{ return TRUE; }
int parse_SETTYPE(void)
{ return TRUE; }
int parse_OPER(void)
{ return TRUE; }
int parse_PARAM(void)
{ return TRUE; }
int parse_BLOCK(void)
{ return TRUE; }
int parse_OTHER(void)
{ return TRUE; }
int parse_COMPILE(void)
{ return TRUE; }
int parse_VDEC(void)
{ return TRUE; }
int parse_OWNVDEC(void)
{ return TRUE; }
int parse_EXTVSPEC(void)
{ return TRUE; }
int parse_ADEC(void)
{ return TRUE; }
int parse_OWNADEC(void)
{ return TRUE; }
int parse_EXTASPEC(void)
{ return TRUE; }
int parse_LDEC(void)
{ return TRUE; }
int parse_MSTART(void)
{ return TRUE; }
int parse_DUBIOUS(void)
{ return TRUE; }
int parse_DUP(void)
{ return TRUE; }
int parse_PIN(void)
{ return TRUE; }
int parse_POUT(void)
{ return TRUE; }
int parse_EDUP(void)
{ return TRUE; }
int parse_SWDEC(void)
{ return TRUE; }
int parse_QDECL(void)
{ return TRUE; }
int parse_FORMDEC(void)
{ return TRUE; }
int parse_FORMSPEC(void)
{ return TRUE; }
int parse_APPLY(void)
{ return TRUE; }
int parse_PROC(void)
{ return TRUE; }
int parse_PROCSPEC(void)
{ return TRUE; }
int parse_PRED(void)
{ return TRUE; }
int parse_ZERO(void)
{ return TRUE; }
int parse_CLEAR(void)
{ return TRUE; }

// B<EOF> = 0;

// B<ch> = 1;

// B<NL> = 2;

// B<junk> = 3;

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