char *text_[256] = {
"Z","VDEC","OWNVDEC","EXTVSPEC","ADEC","OWNADEC","EXTASPEC","PROC",
"PROCSPEC","FORMDEC","SWDEC","LDEC","FORMSPEC","","","",
"","","OPTION","COMMA","T","COLON","COMMENT","LB",
"ALIAS","RB","SUB","ARRAYD","STYPE","ARRAY","NAME","PROCD",
"FNMAP","SWITCH","OWN","EXTERNAL","STRING","RECORD","FORMAT","SPEC",
"MCODE","LABEL","OP1","OP2","OP3","SIGN","UOP","MOD",
"DOT","COMP","ACOMP","EQ","EQEQ","JAM","JUMP","RESOP",
"AND","OR","NOT","WHILE","UNTIL","FOR","CWORD","EXIT",
"ON","SIGNAL","THEN","START","ELSE","FINISH","FELSE","CYCLE",
"REPEAT","PROGRAM","BEGIN","END","ENDPROG","ENDPERM","FRESULT","MRESULT",
"BACK","MONITOR","STOP","LIST","REALSLN","CONTROL","INCLUDE","MASS",
"RTYPE","ADDOP","IDENT","V","N","CONST","FM","",
"R","F","M","P","RP","FP","MP","PP",
"L","S","A","AN","NA","NAN","","",
"","","","","","","","",
"%MSTART","%CLEAR","%PRED","","%DUBIOUS","%DUP","%PIN","%POUT",
"%EDUP","","PIDENT","CIDENT","OIDENT","FNAME","SWID","DOTL",
"DOTR","ASEP","CSEP","OSEP","PSEP","ARB","BPLRB","ORB",
"PRB","CRB","RCRB","RECRB","RECLB","LAB","MLAB","SLAB",
"XNAME","OWNT","DBSEP","PCONST","CMOD","CSIGN","CUOP","COP1",
"COP2","COP3","INDEF","XELSE","CRESOP","NLAB","RUNTIL","ACONST",
"ORRB","FMANY","OSTRING","FMLB","FMRB","FMOR","RANGERB","FSID",
"","","","","","%DUMMY","%DECL","%TYPE",
"%ZERO","%APPLY","%PROT","%SETPROT","%PTYPE","%GAPP","%LOCAL","%GUARD",
"%MCODE","%CDUMMY","%SETTYPE","%OPER","%PARAM","%BLOCK","%OTHER","%COMPILE",
"APP","BASEAPP","APP2","APP3","APP4","APP5","APP6","ADEFN",
"NPARM","SWDEF","SWIDS","CIEXP","RCONST","SCONST","ARRAYP","XIMP",
"IMP","COND","SCOND","EXP1","EXP2","SEXP","IEXP","IEXP1",
"IEXP2","ISEXP","SEQ","FDEF","EXP","NARRAYP","STRUCT","RESEXP",
"BPL","CONSTB","FITEM","MOREA","CLIST","FPP","FPP0","FPP1",
"FPP2","INITVAR","RECEXP","EIMP","IDENTS","RANGE","RCONSTB","VARP",
"INITDEC","","","","ESCDEC","ESCPROC","ESCARRAY","ESCREC"
};
#define text(n) text_[n]

int gmax1=719;
static int gmax=719;
int impphrase =25;

//  FLAG<1> 0<1> SS<2> 0<3> T<1> LINK<8>
const short int initial_[120] = {
    24,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    23,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,
    20,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0, -32551,    0,
    0,    0,    0,    13,    0,    14,    4, -32557,
    16, -32550,    0,    0,    5,    6,    3,    12,
    15,    8,    7,    9,    10,    11, -32558, -32554,
 -32559, -32552, -32553,    18,    22,    17,    21,    19,
    0,    0,    0, -32562, -32560,    0,    0,    0,
 -32561,    0,    0,    0,    0,    0,    0,    0,
    1,    2,    0, -32556,    0, -32555,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0
};
#define initial(n) initial_[n]

const unsigned char atomic_[179-130+1] = {
  90,  90,  90,  90,  90,  48,  48,  19,
  19,  19,  19,  25,  25,  25,  25,  25,
  25,  25,  23, 104, 104, 105,  30,  20,
  21,  93,  47,  45,  46,  42,  43,  44,
  40,  68,  55, 104,  60,  93,  25,  40,
  93,  23,  25,  57,  25,  90, 176, 177,
 178, 179
};
#define atomic(n) atomic_[(n)-130]

static short int phrase_[255-200+1] = {
  0, 564, 565, 567, 569, 571, 573, 562,
 614, 203, 200, 602, 478, 480, 624, 298,
 206, 308, 318, 433, 426, 437, 444, 458,
 453, 461, 467, 482, 402, 627, 629, 603,
 521, 511, 486, 502, 575, 527, 528, 543,
 550, 578, 397, 287, 197, 636, 516, 621,
 167,  0,  0,  0, 640, 693, 701, 709
};
#define phrase(n) sex16(phrase_[(n)-200])
#define setphrase(n) phrase_[(n)-200]

//  MORE<1> 0<1> ORDER<2> TYPE<4> CLASS<8>
static short int gram_[maxgrammar+1] = {
    0, -28523, -28521, -28602, -32706, -28509, -28603, -24502,
 -24503, -20405, -20404, -28595, -32697, -32709, -16323, -28600,
 -32704, -28587, -28589, -32681, -16344, -28586, -28588, -12270,
 -32586,   216, -12287, -16380,  -8185,  -8184, -12285, -12286,
 -12283, -12282, -12279, -12276, -16373,  20490, -32706, -32701,
   216, -16364, -28610, -28613, -28612,  16445,   217, -16364,
    62, -32701,  16450, -16364,   5346, -16364,   166, -16344,
   4332,   130, -16360, -16361,   126,   217, -32701,   216,
 -16364,  16450, -32700,  16404, -32701, -32706,   216,  16405,
  16407, -16222,   8414,   130,   217, -32697,  16450,   1250,
   4307,   4318,   192,    93,   170,    90,   207, -16365,
  16404,    90, -16360, -16365,  16404,   241, -16365,  16404,
   132,   132, -16360,   4329, -16365,  16404,   133,   175,
    90, -16365,  16404,   209, -16365,  16404,   4313,   217,
  16451,   4263,  16384,  16384,   120,   216, -32700,  16404,
 -32706,  16404,   243,  16409,   454, -32685,  16404,   454,
   248, -16365,  16404,   4263,   194, -16360,   4329, -32717,
  16404,   4263,  16407,   454,   237,   127,   215,   454,
   4263,  16384, -16364,   1502, -32629, -16361,   153, -32606,
   222,   143, -32629,   153,   454,   126,  16409,   454,
  16384,   234, -16365, -32595,   147, -32678,   234,   193,
 -32677, -32676, -32661,   109, -32717,    53,    52,    52,
    52,   194,   194,   194, -28581,   4188,   194, -28566,
   4203,   194, -28564,   4205,   4580,  16429,   183,   183,
   186,   186, -28583,    0,   9437,    90, -16365,    0,
   134, -16365,    0,   210,   4329,   199, -32677, -32672,
 -32676, -32688, -32690, -32705, -32661, -32659, -32689, -32686,
 -32687, -16330,    65, -32716,   186, -28583, -32717, -32715,
 -32713,    52, -32664,   4201,   186, -32717, -32715,    55,
 -16328,    0,   197,   197,    52,    52,   197, -28581,
 -28580,   186, -28581,   4188,   4318,   194, -28581,   4188,
   9437,   194,   194,   454,  16407,   216,   194, -28566,
 -28565,   186, -28566,   4203,   194, -28564, -28563,   186,
 -28564,   4205,   183,   183,   186,   183, -16365,    0,
   183,   4580,  16429,   5095,   9444,   5348,   186, -28583,
 -16328,    0,  16409, -16365,    0,   9437,   5348,   217,
 -32701,  16450, -32701,   216, -32700,    0, -32701, -32706,
   216,   243,   217, -16318,    0, -32552,    0, -32700,
    0, -32706,    0,   215, -32550,   228, -28616, -28615,
    0,   4096,   218,   218, -28616,    0, -32677, -32676,
 -16361, -32710, -32669, -32662, -32661, -32660, -32659,   740,
 -32039,   740, -32719,   4096,   194, -32719, -32718, -32604,
 -32726, -32725, -32724, -32720,   4096,   710,   6116, -32719,
    0,   710,   6116, -28581,   4188,   218,   122,    50,
  16409, -32726, -32725, -32724, -32719,   4096,   710,   454,
   195,   195,   195,   454, -28581,   4188,   194, -28566,
 -28565, -28564,   4205,   195,   195,   195,   710,   4836,
   5095,   4829, -32726, -32725, -32724, -32719,   4096,   4827,
   4828,   454, -32720, -32719,   4096,   4829,   4827,   4828,
   194, -32719,    0,   710,   4836, -16291, -32677,    92,
   184,   121, -28581, -28580, -32722, -32723,   4317, -32726,
 -32725, -32724,    0,   183, -32726, -32725, -32724, -32720,
    0,   4316,   195,   195,   195,   454, -28581,   4188,
   4315,   183,   4317, -32726, -32725,    0,   195,   195,
   4315,   4317, -32726,    0,   195, -32677, -32676, -16361,
  16431,   228,   228,    47, -32610, -32611,   5345, -32609,
 -32608, -32607,    0,   4320,   4319,   5345, -32609, -32608,
    0,   4319,   5345, -32609,    0, -32613, -16361,  16431,
   222,   222,   156, -32677,    92,   183,   186,   1222,
  16435,   228,  16403,   4324,   138,   8420, -32723,   4189,
    93,   454,   148, -32674,  16546,  16409, -32597,   182,
 -16383,  16388,   234, -16365, -32595,   172, -32678,   234,
    90,   244,   246, -16365,    0,   235, -32678,   234,
 -16365,   246, -16365,    0, -32678,   234,    90,  16407,
   222,  16405,   222,   145,  16407,   222,  16405,   222,
   146,  16407,   1252,   154,   5348, -16365,   142,   126,
   182, -16383,  16391,    90, -16365,   127, -32678,   238,
    90,   125,   239, -16365,   8319,   8430,   128,   126,
 -16361,   127,   190,   240,   189,  16409,   182, -16383,
  16391,    90, -16365,    0, -32678,   240,    90,  16623,
 -16365,    0,   244,   232,   1252,   1252,   137,   1252,
   137,   1252,   137,   1252,   137,   1252,   137,   222,
 -16365,    0,   131,   194, -16360, -16333, -16332,   124,
   181, -16292, -16277,  16493, -31802,   5342, -28581,   4188,
   4263,   181,   186,   454,  16475,   183, -28583,   199,
   5598,   9438,   222, -32677, -32676,  16407,   186,   228,
   135,  16409, -32632,    0, -32677,    92, -32677, -32676,
 -32662, -32661, -32660, -32659,   165, -32677,    92,   188,
 -32662,   107,   188, -32660,   109, -32732,    37, -16344,
   4318,   148, -32674,  16424,   222,  16405,   222,   174,
 -28644, -32734, -32680, -28641, -32733, -32730, -32735, -32727,
 -32738,   4326, -32738, -32739, -32741, -32736,   199, -28644,
 -32680, -28641,   4326, -32739, -32741,   199, -32738, -32739,
 -32741, -32736, -32729,   199, -32616,   199, -32739, -32741,
 -32729,   199, -32616, -32729,   199, -28644, -32680,   4326,
 -32738, -32739, -32741,   199,   245,   4318,   245,  16409,
   152,   4318,  16409,   152,   245, -32672, -32671, -32670,
    99,  16407,   200,   144,   185, -32677,    92,  16407,
 -32582,   200,   200,   187,   141, -32677,    92,  16410,
   191, -32677, -32676, -32662, -32661, -32660,   109,   198,
//       0(max grammar-774)
// C statics are set to 0 anyway...
};
#define gram(n) sex16(gram_[n])
#define setgram(n) gram_[n]


static short int glink_[maxgrammar+1] = {
   -1,    71,    72,    38,    46,    47,    67,    67,
    75,    67,    0,    67,    51,    76,    79,    53,
    55,    80,    67,    81,    82,    83,    67,    84,
    26,    41,    85,    86,    57,    57,    89,    93,
    96,    97,   102,   103,   104,   107,    46,    67,
    67,    0,   110,   110,   111,    52,    49,    0,
    61,    67,    62,    0,    67,    0,   111,   112,
   112,    58,   113,   114,   115,    64,    67,    66,
   116,   117,    68,    0,    67,   122,    67,    0,
    73,   123,   123,    67,    77,    67,    40,    77,
    67,    67,    0,   124,   127,   128,    87,    86,
    0,    90,   131,    89,    0,    94,    93,    0,
   132,    98,   137,   100,    97,    0,   138,    67,
   105,   104,    0,   108,   107,    0,    67,    67,
    67,   139,   140,   141,    0,   118,   120,   116,
   142,   116,    67,    71,   125,    67,    0,    67,
   129,    85,    0,   143,   133,   144,   135,   145,
    0,   156,   157,    59,   158,    67,   119,    91,
   159,   146,   145,   148,   146,   151,    0,   153,
   153,   154,   146,    0,    99,   160,    67,   134,
   161,   162,   165,   161,   141,   162,   162,   168,
   172,   174,   175,   176,   177,   178,   179,   182,
   185,   188,   189,   180,   190,   190,   183,   191,
   191,   186,   191,   191,    0,   188,   192,   193,
   194,    0,   196,    0,    0,   198,   197,    0,
   201,   200,    0,   204,   205,    0,   228,   232,
   219,   234,   235,    0,   236,   237,   238,    0,
   232,   226,   244,   245,   221,   248,   249,   250,
   251,   245,    0,   252,   229,   249,   250,   251,
   253,    0,    0,   188,   254,   260,   239,   269,
   269,   242,   191,   191,   270,   246,   272,   272,
   229,   273,   274,   275,   276,    0,   255,   266,
   266,   258,   267,   267,   261,   266,   266,   264,
   267,   267,   232,   268,   232,    0,   277,    0,
   278,   232,   273,   232,   282,   283,   279,   285,
   253,    0,    0,   286,    0,   232,    0,   288,
    0,   290,    0,   292,   294,    0,    0,   297,
    0,    0,   299,   301,    0,   303,    0,   305,
    0,   307,    0,    0,   310,   313,   314,   315,
    0,    0,   316,   311,   314,    0,   332,   332,
   328,   349,   350,   351,   351,   351,   351,   330,
   282,   352,   358,    0,   333,   341,   347,   359,
   360,   361,   362,   363,    0,   342,   343,   345,
    0,   346,    0,   269,   269,    0,    0,   366,
   353,   371,   372,   373,   374,    0,   375,   376,
   377,   383,   384,   364,   385,   385,   367,   269,
   269,   269,   269,   389,   390,   391,   392,   393,
    0,   378,   360,   361,   362,   341,    0,   379,
   380,   386,   363,   341,    0,   353,   354,   355,
   375,   395,    0,   396,    0,   400,   269,   269,
   401,    0,   411,   411,   406,   417,   407,   418,
   419,   420,    0,   412,   418,   419,   420,   421,
    0,   409,   406,   424,   417,   422,   425,   425,
   408,   415,   427,   430,   431,    0,   426,   432,
   428,   434,   436,    0,   433,   269,   269,   441,
   442,   282,   443,    0,   446,   451,   447,   446,
   452,   451,    0,   449,   448,   454,   453,   457,
    0,   455,   459,   458,    0,   269,   464,   465,
   282,   466,    0,   469,   469,   470,   471,   472,
   473,   474,   475,   476,   477,    0,   479,   269,
   481,    0,   483,   485,   485,   205,   490,   488,
   496,   497,   491,   494,   490,    0,   491,   491,
    0,   498,   499,   501,    0,    0,   504,   506,
   510,   499,   508,    0,   506,   506,   504,   512,
   513,   514,   515,    0,   517,   518,   519,   520,
    0,   522,   523,   524,   525,   522,    0,   528,
   529,   531,   536,   532,   534,    0,   532,    0,
   537,   538,   539,   541,   542,   542,    0,   544,
   546,    0,   547,   548,   549,   533,   551,   553,
   558,   554,   556,    0,   554,    0,   559,   560,
   557,    0,   563,   205,    0,   566,   564,   568,
   565,   570,   567,   572,   569,   574,   571,   576,
   575,    0,   579,   580,   592,   593,   584,   205,
   585,   588,   588,   588,   590,   205,   594,   594,
   595,   596,   597,   581,   600,   598,   601,    0,
   205,   205,   205,   606,   606,   607,   608,   609,
   605,   610,   612,    0,   193,   193,   193,   193,
   193,   193,   193,   193,    0,   623,   623,   192,
   626,   626,    0,   626,   626,   631,   633,   282,
   282,   634,   282,   282,   637,   638,   639,    0,
   650,   677,   684,   666,   655,   205,   205,   205,
   205,   650,   659,   668,   685,   666,    0,   662,
   686,   666,   662,   668,   685,    0,   670,   674,
   689,   666,   205,    0,   205,    0,   674,   689,
   205,    0,   666,   205,    0,   680,   692,   680,
   659,   668,   685,    0,   650,   687,   662,   688,
   205,   690,   691,   666,   680,   697,   697,   697,
   697,   698,   699,   700,    0,   703,   703,   704,
   706,   707,   708,   708,   700,   711,   711,   712,
   713,   719,   719,   719,   719,   719,   719,    0,
//   0(max grammar-774)
// C statics are set to 0 anyway...
};
#define glink(n) sex16(glink_[n])
#define setglink(n) glink_[n]

#define maxkdict  618
static const short int kdict_[maxkdict-32+1] = {
    0,   511,   131,   531,   131,   551,   559,   131,
   567,   575,   583,   603,   623,   631,   663,   671,
   129,   129,   129,   129,   129,   129,   129,   129,
   129,   129,   691,   698,   707,   751,   795,   131,
   131,   824,   900,   960,   1076,   1120,   1280,   128,
   128,   1392,   128,   128,   1460,   1600,   1636,   1704,
   1792,   128,   1872,   2088,   2284,   2316,   128,   2356,
   128,   128,   128,   2375,   2383,   2415,   2423,   2443,
   131,   131,   131,   131,   131,   131,   131,   131,
   131,   131,   131,   131,   131,   131,   131,   131,
   131,   131,   131,   131,   131,   131,   131,   131,
   131,   131,   131,   131,   2451,   131,   2423, -32351,
  16428,    25,  16428,    29, -32349,  16433,    1,  16434,
    1, -16127,    0,  16427,    21,  16407,    0,  16409,
    0, -32323, -10840,    40,  16471,    0, -32341, -10580,
    32,  16473,   117,  16384,    19, -31955, -32322, -10580,
    36,  -9290,    0,  16473,   113,  16432,    13, -32337,
  16427,    46,  16427,    17,  16405,    0,  16404,    0,
 -31556, -31939, -32322,  -9551,    2,  16433,    1,  16433,
    5,  16426,    5, -31606, -32323,  -9807,    0, -32374,
  -9678,    0,  16436,    0,  16435,    0, -31939, -32322,
  16433,    4,  16426,    9,  16433,    3, -30772, -31666,
  10578,  11457, -32344,  16413,    2,  16411,    2,    68,
 -32374,  16440,    0,  16440,    0,   8393,    83,  16408,
    0, -31291,  10841,    69, -32311,  16412,    18,  10830,
   9157,  10565,  16412,    18,   9415,    78,  16458,    0,
 -32049,   8665,   8908,  16455,    0, -30131,    78, -31277,
    84, -32055,  10194,    76,  16469,    0,  10958,    69,
  16447,    32,    84, -32319,  16418,    2,  10830,  16418,
    2,   8909,  10830,  16406,    0, -31927,  10073,   9921,
   8649,  16419,    5,   9153,  10190,   8915,  16469,    1,
 -27956, -31282,    88, -31927,   8916,  10066,   9793,  16419,
    3,    84,  16447,    4,    68, -32305,  16459,    2,
    70, -30650, -31284,    80, -31931,  10194,  10567,   9921,
  16460,    1,   9938,  16461,    0,  10697,    84,  16467,
    3,   9801,    69,  16460,    0,   8915,  16452,    0,
 -29631, -30903, -31282, -31793,  10069,  10819,  10185,    78,
  16416,    9,    82,  16445,    0,  16416,    9,   9422,
   9299, -32315,  16453,    0,  10700,    69,  16454,    0,
  10700,    69,  16464,   1210, -30778,    78, -31549,   8916,
   8903,    82, -32344,  16412,    17,  16472,    17,  10956,
   8900,  16470,    0,  16446,    44, -28735, -29239,  10063,
    71, -30263, -31668, -32302,  16412,    20,   8389,    76,
  16412,    36,  10063,    71, -32311,  16412,    21,  10830,
   9157,  10565,  16412,    21,  10830,   9157,  10565,  16412,
    20,  10835,  16467,    1,   8898,    76,  16425,    6,
 -31935,  10063,  10825,  10575,  16465,   109,    80,  16416,
    10, -32191,  10831,  16442,    0,   8909, -32314,  16414,
    1, -31794,  10069,  10819,  10185,    78,  16416,    10,
  16416,    10, -30770, -31408, -32174,  10071,  16418,    1,
 -32374,  16441,    2,  16441,    2,   9428,  10063,  16402,
    0, -32315,  16448,    0,   8918,  10830,  16448,    0,
 -30523,    82, -31419, -31927,   9167,   8402,    77,  16457,
    0,    77,  16419,    6,   9412,   8387,   8916,  16415,
   123,   9938,  16419,    7, -31931,  10959,   9428,   8910,
  16415,   104, -28351, -30397, -31024, -32045,  10964,  10066,
  16464,   1319,   9813,   7892, -32323,  16462,   1384,  16463,
   1241,   8389,    84,  16456,    0,  10575,    68, -32314,
  16421,    64,  10575,   8397,    84, -32301,  16422,    9,
   8912,    67,  16422,    12,    76, -32301,  16412,    33,
 -31924,  10190,   9938,   9793,  16468,    1,  10063,    71,
  16468,    4, -27704, -28983, -29488, -31276, -31913,  10713,
   8916,    77,  16419,    4,  10825,   9283,  16417,    12,
 -31423, -31921,   9426,   9166,    40,  16420,    48,    80,
  16466,   115,  10834,  16451,    0,   8645,  16423,    0,
  10055,   9793, -32315,  16449,    0,   8918,  10830,  16449,
    0,  10575,    84, -32311,  16412,    19,  10830,   9157,
  10565,  16412,    19, -32056,  10962,    69,  16464,   1354,
  10053,  16450,    0,    78, -32052,   9428,    76,  16444,
   182,  10693,    83,  16446,    46,   9416,   8908,  16443,
   180,  16407,    0, -31939, -32292, -10454,    51,  16426,
    13,  16433,    1,  16409,    0, -32290, -10454,    51,
  16426,    13,  16410,    0,  16431,    14, -32323,  16430,
    51,  16433,    1
};
#define kdict(n) sex16(kdict_[(n)-32])