lalr ()
{
  int ntokens.0;
  int D.4241;
  int tokensetsize.1;
  extern int set_state_table ();
  extern int set_accessing_symbol ();
  extern int set_shift_table ();
  extern int set_reduction_table ();
  extern int set_maxrhs ();
  extern int initialize_LA ();
  extern int set_goto_map ();
  extern int initialize_F ();
  extern int build_relations ();
  extern int compute_FOLLOWS ();
  extern int compute_lookaheads ();

  ntokens.0 = ntokens;
  D.4241 = ntokens.0 + 31;
  tokensetsize.1 = D.4241 / 32;
  tokensetsize = tokensetsize.1;
  set_state_table ();
  set_accessing_symbol ();
  set_shift_table ();
  set_reduction_table ();
  set_maxrhs ();
  initialize_LA ();
  set_goto_map ();
  initialize_F ();
  build_relations ();
  compute_FOLLOWS ();
  compute_lookaheads ();
}


set_state_table ()
{
  int nstates.2;
  long unsigned int D.4244;
  unsigned int D.4245;
  unsigned int D.4246;
  char * state_table.3;
  struct core * * state_table.4;
  short int D.4249;
  long unsigned int D.4250;
  long unsigned int D.4251;
  struct core * * D.4252;
  register struct core * sp;

  nstates.2 = nstates;
  D.4244 = (long unsigned int) nstates.2;
  D.4245 = (unsigned int) D.4244;
  D.4246 = D.4245 * 8;
  state_table.3 = allocate (D.4246);
  state_table = state_table.3;
  sp = first_state;
  goto <D.3984>;
  <D.3983>:
  state_table.4 = state_table;
  D.4249 = sp->number;
  D.4250 = (long unsigned int) D.4249;
  D.4251 = D.4250 * 8;
  D.4252 = state_table.4 + D.4251;
  *D.4252 = sp;
  sp = sp->next;
  <D.3984>:
  if (sp != 0B) goto <D.3983>; else goto <D.3985>;
  <D.3985>:
}


set_accessing_symbol ()
{
  int nstates.5;
  long unsigned int D.4254;
  unsigned int D.4255;
  unsigned int D.4256;
  char * accessing_symbol.6;
  short int * accessing_symbol.7;
  short int D.4259;
  long unsigned int D.4260;
  long unsigned int D.4261;
  short int * D.4262;
  short int D.4263;
  register struct core * sp;

  nstates.5 = nstates;
  D.4254 = (long unsigned int) nstates.5;
  D.4255 = (unsigned int) D.4254;
  D.4256 = D.4255 * 2;
  accessing_symbol.6 = allocate (D.4256);
  accessing_symbol = accessing_symbol.6;
  sp = first_state;
  goto <D.3990>;
  <D.3989>:
  accessing_symbol.7 = accessing_symbol;
  D.4259 = sp->number;
  D.4260 = (long unsigned int) D.4259;
  D.4261 = D.4260 * 2;
  D.4262 = accessing_symbol.7 + D.4261;
  D.4263 = sp->accessing_symbol;
  *D.4262 = D.4263;
  sp = sp->next;
  <D.3990>:
  if (sp != 0B) goto <D.3989>; else goto <D.3991>;
  <D.3991>:
}


set_shift_table ()
{
  int nstates.8;
  long unsigned int D.4265;
  unsigned int D.4266;
  unsigned int D.4267;
  char * shift_table.9;
  struct shifts * * shift_table.10;
  short int D.4270;
  long unsigned int D.4271;
  long unsigned int D.4272;
  struct shifts * * D.4273;
  register struct shifts * sp;

  nstates.8 = nstates;
  D.4265 = (long unsigned int) nstates.8;
  D.4266 = (unsigned int) D.4265;
  D.4267 = D.4266 * 8;
  shift_table.9 = allocate (D.4267);
  shift_table = shift_table.9;
  sp = first_shift;
  goto <D.3996>;
  <D.3995>:
  shift_table.10 = shift_table;
  D.4270 = sp->number;
  D.4271 = (long unsigned int) D.4270;
  D.4272 = D.4271 * 8;
  D.4273 = shift_table.10 + D.4272;
  *D.4273 = sp;
  sp = sp->next;
  <D.3996>:
  if (sp != 0B) goto <D.3995>; else goto <D.3997>;
  <D.3997>:
}


set_reduction_table ()
{
  int nstates.11;
  long unsigned int D.4275;
  unsigned int D.4276;
  unsigned int D.4277;
  char * reduction_table.12;
  struct reductions * * reduction_table.13;
  short int D.4280;
  long unsigned int D.4281;
  long unsigned int D.4282;
  struct reductions * * D.4283;
  register struct reductions * rp;

  nstates.11 = nstates;
  D.4275 = (long unsigned int) nstates.11;
  D.4276 = (unsigned int) D.4275;
  D.4277 = D.4276 * 8;
  reduction_table.12 = allocate (D.4277);
  reduction_table = reduction_table.12;
  rp = first_reduction;
  goto <D.4002>;
  <D.4001>:
  reduction_table.13 = reduction_table;
  D.4280 = rp->number;
  D.4281 = (long unsigned int) D.4280;
  D.4282 = D.4281 * 8;
  D.4283 = reduction_table.13 + D.4282;
  *D.4283 = rp;
  rp = rp->next;
  <D.4002>:
  if (rp != 0B) goto <D.4001>; else goto <D.4003>;
  <D.4003>:
}


set_maxrhs ()
{
  short int * ritem.14;
  int nitems.15;
  long unsigned int D.4286;
  long unsigned int D.4287;
  short int D.4288;
  register short int * itemp;
  register short int * item_end;
  register int length;
  register int max;

  length = 0;
  max = 0;
  ritem.14 = ritem;
  nitems.15 = nitems;
  D.4286 = (long unsigned int) nitems.15;
  D.4287 = D.4286 * 2;
  item_end = ritem.14 + D.4287;
  itemp = ritem;
  goto <D.4011>;
  <D.4010>:
  D.4288 = *itemp;
  if (D.4288 >= 0) goto <D.4289>; else goto <D.4290>;
  <D.4289>:
  length = length + 1;
  goto <D.4291>;
  <D.4290>:
  if (length > max) goto <D.4292>; else goto <D.4293>;
  <D.4292>:
  max = length;
  <D.4293>:
  length = 0;
  <D.4291>:
  itemp = itemp + 2;
  <D.4011>:
  if (itemp < item_end) goto <D.4010>; else goto <D.4012>;
  <D.4012>:
  maxrhs = max;
}


initialize_LA ()
{
  int nstates.16;
  int D.4295;
  long unsigned int D.4296;
  unsigned int D.4297;
  unsigned int D.4298;
  char * lookaheads.17;
  short int * lookaheads.18;
  long unsigned int D.4301;
  long unsigned int D.4302;
  short int * D.4303;
  short int D.4304;
  struct reductions * * reduction_table.19;
  long unsigned int D.4306;
  struct reductions * * D.4307;
  short int D.4310;
  int D.4311;
  long unsigned int D.4312;
  long unsigned int D.4313;
  short int * D.4314;
  int tokensetsize.20;
  int D.4316;
  long unsigned int D.4317;
  unsigned int D.4318;
  unsigned int D.4319;
  char * LA.21;
  long unsigned int D.4321;
  unsigned int D.4322;
  unsigned int D.4323;
  char * LAruleno.22;
  unsigned int D.4325;
  char * lookback.23;
  short int * LAruleno.24;
  long unsigned int D.4330;
  short int * D.4331;
  short int D.4332;
  register int i;
  register int j;
  register int k;
  register struct reductions * rp;

  nstates.16 = nstates;
  D.4295 = nstates.16 + 1;
  D.4296 = (long unsigned int) D.4295;
  D.4297 = (unsigned int) D.4296;
  D.4298 = D.4297 * 2;
  lookaheads.17 = allocate (D.4298);
  lookaheads = lookaheads.17;
  k = 0;
  i = 0;
  goto <D.4020>;
  <D.4019>:
  lookaheads.18 = lookaheads;
  D.4301 = (long unsigned int) i;
  D.4302 = D.4301 * 2;
  D.4303 = lookaheads.18 + D.4302;
  D.4304 = (short int) k;
  *D.4303 = D.4304;
  reduction_table.19 = reduction_table;
  D.4301 = (long unsigned int) i;
  D.4306 = D.4301 * 8;
  D.4307 = reduction_table.19 + D.4306;
  rp = *D.4307;
  if (rp != 0B) goto <D.4308>; else goto <D.4309>;
  <D.4308>:
  D.4310 = rp->nreds;
  D.4311 = (int) D.4310;
  k = D.4311 + k;
  <D.4309>:
  i = i + 1;
  <D.4020>:
  nstates.16 = nstates;
  if (i < nstates.16) goto <D.4019>; else goto <D.4021>;
  <D.4021>:
  lookaheads.18 = lookaheads;
  nstates.16 = nstates;
  D.4312 = (long unsigned int) nstates.16;
  D.4313 = D.4312 * 2;
  D.4314 = lookaheads.18 + D.4313;
  D.4304 = (short int) k;
  *D.4314 = D.4304;
  tokensetsize.20 = tokensetsize;
  D.4316 = k * tokensetsize.20;
  D.4317 = (long unsigned int) D.4316;
  D.4318 = (unsigned int) D.4317;
  D.4319 = D.4318 * 4;
  LA.21 = allocate (D.4319);
  LA = LA.21;
  D.4321 = (long unsigned int) k;
  D.4322 = (unsigned int) D.4321;
  D.4323 = D.4322 * 2;
  LAruleno.22 = allocate (D.4323);
  LAruleno = LAruleno.22;
  D.4321 = (long unsigned int) k;
  D.4322 = (unsigned int) D.4321;
  D.4325 = D.4322 * 8;
  lookback.23 = allocate (D.4325);
  lookback = lookback.23;
  k = 0;
  i = 0;
  goto <D.4026>;
  <D.4025>:
  reduction_table.19 = reduction_table;
  D.4301 = (long unsigned int) i;
  D.4306 = D.4301 * 8;
  D.4307 = reduction_table.19 + D.4306;
  rp = *D.4307;
  if (rp != 0B) goto <D.4327>; else goto <D.4328>;
  <D.4327>:
  j = 0;
  goto <D.4023>;
  <D.4022>:
  LAruleno.24 = LAruleno;
  D.4321 = (long unsigned int) k;
  D.4330 = D.4321 * 2;
  D.4331 = LAruleno.24 + D.4330;
  D.4332 = rp->rules[j];
  *D.4331 = D.4332;
  k = k + 1;
  j = j + 1;
  <D.4023>:
  D.4310 = rp->nreds;
  D.4311 = (int) D.4310;
  if (D.4311 > j) goto <D.4022>; else goto <D.4024>;
  <D.4024>:
  <D.4328>:
  i = i + 1;
  <D.4026>:
  nstates.16 = nstates;
  if (i < nstates.16) goto <D.4025>; else goto <D.4027>;
  <D.4027>:
}


set_goto_map ()
{
  int nvars.25;
  int D.4334;
  long unsigned int D.4335;
  unsigned int D.4336;
  unsigned int D.4337;
  char * D.4338;
  int ntokens.26;
  long unsigned int D.4340;
  long unsigned int D.4341;
  sizetype D.4342;
  short int * goto_map.27;
  char * D.4344;
  short int D.4345;
  int D.4346;
  short int * accessing_symbol.28;
  short int D.4348;
  long unsigned int D.4349;
  long unsigned int D.4350;
  short int * D.4351;
  short int D.4352;
  int start_symbol.29;
  int ngotos.30;
  int ngotos.31;
  short int * goto_map.32;
  long unsigned int D.4360;
  long unsigned int D.4361;
  short int * D.4362;
  short int D.4363;
  short int D.4364;
  unsigned short D.4365;
  unsigned short D.4366;
  short int D.4367;
  long unsigned int D.4368;
  long unsigned int D.4369;
  short int * D.4370;
  short int D.4371;
  short int * D.4372;
  short int D.4373;
  int D.4374;
  int nsyms.33;
  short int D.4376;
  long unsigned int D.4377;
  long unsigned int D.4378;
  short int * D.4379;
  short int D.4380;
  short int * D.4381;
  long unsigned int D.4382;
  unsigned int D.4383;
  unsigned int D.4384;
  char * from_state.34;
  char * to_state.35;
  short int D.4387;
  long unsigned int D.4388;
  long unsigned int D.4389;
  short int * D.4390;
  short int D.4391;
  short int * D.4393;
  short int D.4394;
  short int D.4395;
  unsigned short D.4396;
  unsigned short D.4397;
  short int D.4398;
  short int * from_state.36;
  long unsigned int D.4400;
  long unsigned int D.4401;
  short int * D.4402;
  short int D.4403;
  short int * to_state.37;
  short int * D.4405;
  short int D.4406;
  void * D.4407;
  register struct shifts * sp;
  register int i;
  register int symbol;
  register int k;
  register short int * temp_map;
  register int state2;
  register int state1;

  nvars.25 = nvars;
  D.4334 = nvars.25 + 1;
  D.4335 = (long unsigned int) D.4334;
  D.4336 = (unsigned int) D.4335;
  D.4337 = D.4336 * 2;
  D.4338 = allocate (D.4337);
  ntokens.26 = ntokens;
  D.4340 = (long unsigned int) ntokens.26;
  D.4341 = D.4340 * 2;
  D.4342 = -D.4341;
  goto_map.27 = D.4338 + D.4342;
  goto_map = goto_map.27;
  nvars.25 = nvars;
  D.4334 = nvars.25 + 1;
  D.4335 = (long unsigned int) D.4334;
  D.4336 = (unsigned int) D.4335;
  D.4337 = D.4336 * 2;
  D.4344 = allocate (D.4337);
  ntokens.26 = ntokens;
  D.4340 = (long unsigned int) ntokens.26;
  D.4341 = D.4340 * 2;
  D.4342 = -D.4341;
  temp_map = D.4344 + D.4342;
  ngotos = 0;
  sp = first_shift;
  goto <D.4043>;
  <D.4042>:
  D.4345 = sp->nshifts;
  D.4346 = (int) D.4345;
  i = D.4346 + -1;
  goto <D.4041>;
  <D.4040>:
  {
    extern int fatal ();

    accessing_symbol.28 = accessing_symbol;
    D.4348 = sp->shift[i];
    D.4349 = (long unsigned int) D.4348;
    D.4350 = D.4349 * 2;
    D.4351 = accessing_symbol.28 + D.4350;
    D.4352 = *D.4351;
    symbol = (int) D.4352;
    start_symbol.29 = start_symbol;
    if (symbol < start_symbol.29) goto <D.4037>; else goto <D.4354>;
    <D.4354>:
    ngotos.30 = ngotos;
    if (ngotos.30 == 32767) goto <D.4356>; else goto <D.4357>;
    <D.4356>:
    fatal ("too many gotos");
    <D.4357>:
    ngotos.30 = ngotos;
    ngotos.31 = ngotos.30 + 1;
    ngotos = ngotos.31;
    goto_map.32 = goto_map;
    D.4360 = (long unsigned int) symbol;
    D.4361 = D.4360 * 2;
    D.4362 = goto_map.32 + D.4361;
    D.4363 = *D.4362;
    D.4364 = D.4363;
    D.4365 = (unsigned short) D.4364;
    D.4366 = D.4365 + 1;
    D.4367 = (short int) D.4366;
    *D.4362 = D.4367;
  }
  i = i + -1;
  <D.4041>:
  if (i >= 0) goto <D.4040>; else goto <D.4037>;
  <D.4037>:
  sp = sp->next;
  <D.4043>:
  if (sp != 0B) goto <D.4042>; else goto <D.4044>;
  <D.4044>:
  k = 0;
  i = ntokens;
  goto <D.4046>;
  <D.4045>:
  D.4368 = (long unsigned int) i;
  D.4369 = D.4368 * 2;
  D.4370 = temp_map + D.4369;
  D.4371 = (short int) k;
  *D.4370 = D.4371;
  goto_map.32 = goto_map;
  D.4368 = (long unsigned int) i;
  D.4369 = D.4368 * 2;
  D.4372 = goto_map.32 + D.4369;
  D.4373 = *D.4372;
  D.4374 = (int) D.4373;
  k = D.4374 + k;
  i = i + 1;
  <D.4046>:
  nsyms.33 = nsyms;
  if (i < nsyms.33) goto <D.4045>; else goto <D.4047>;
  <D.4047>:
  i = ntokens;
  goto <D.4049>;
  <D.4048>:
  goto_map.32 = goto_map;
  D.4368 = (long unsigned int) i;
  D.4369 = D.4368 * 2;
  D.4372 = goto_map.32 + D.4369;
  D.4368 = (long unsigned int) i;
  D.4369 = D.4368 * 2;
  D.4370 = temp_map + D.4369;
  D.4376 = *D.4370;
  *D.4372 = D.4376;
  i = i + 1;
  <D.4049>:
  nsyms.33 = nsyms;
  if (i < nsyms.33) goto <D.4048>; else goto <D.4050>;
  <D.4050>:
  goto_map.32 = goto_map;
  nsyms.33 = nsyms;
  D.4377 = (long unsigned int) nsyms.33;
  D.4378 = D.4377 * 2;
  D.4379 = goto_map.32 + D.4378;
  ngotos.30 = ngotos;
  D.4380 = (short int) ngotos.30;
  *D.4379 = D.4380;
  nsyms.33 = nsyms;
  D.4377 = (long unsigned int) nsyms.33;
  D.4378 = D.4377 * 2;
  D.4381 = temp_map + D.4378;
  ngotos.30 = ngotos;
  D.4380 = (short int) ngotos.30;
  *D.4381 = D.4380;
  ngotos.30 = ngotos;
  D.4382 = (long unsigned int) ngotos.30;
  D.4383 = (unsigned int) D.4382;
  D.4384 = D.4383 * 2;
  from_state.34 = allocate (D.4384);
  from_state = from_state.34;
  ngotos.30 = ngotos;
  D.4382 = (long unsigned int) ngotos.30;
  D.4383 = (unsigned int) D.4382;
  D.4384 = D.4383 * 2;
  to_state.35 = allocate (D.4384);
  to_state = to_state.35;
  sp = first_shift;
  goto <D.4055>;
  <D.4054>:
  D.4387 = sp->number;
  state1 = (int) D.4387;
  D.4345 = sp->nshifts;
  D.4346 = (int) D.4345;
  i = D.4346 + -1;
  goto <D.4053>;
  <D.4052>:
  D.4348 = sp->shift[i];
  state2 = (int) D.4348;
  accessing_symbol.28 = accessing_symbol;
  D.4388 = (long unsigned int) state2;
  D.4389 = D.4388 * 2;
  D.4390 = accessing_symbol.28 + D.4389;
  D.4391 = *D.4390;
  symbol = (int) D.4391;
  start_symbol.29 = start_symbol;
  if (symbol < start_symbol.29) goto <D.4051>; else goto <D.4392>;
  <D.4392>:
  D.4360 = (long unsigned int) symbol;
  D.4361 = D.4360 * 2;
  D.4393 = temp_map + D.4361;
  D.4394 = *D.4393;
  D.4395 = D.4394;
  D.4396 = (unsigned short) D.4395;
  D.4397 = D.4396 + 1;
  D.4398 = (short int) D.4397;
  *D.4393 = D.4398;
  k = (int) D.4395;
  from_state.36 = from_state;
  D.4400 = (long unsigned int) k;
  D.4401 = D.4400 * 2;
  D.4402 = from_state.36 + D.4401;
  D.4403 = (short int) state1;
  *D.4402 = D.4403;
  to_state.37 = to_state;
  D.4400 = (long unsigned int) k;
  D.4401 = D.4400 * 2;
  D.4405 = to_state.37 + D.4401;
  D.4406 = (short int) state2;
  *D.4405 = D.4406;
  i = i + -1;
  <D.4053>:
  if (i >= 0) goto <D.4052>; else goto <D.4051>;
  <D.4051>:
  sp = sp->next;
  <D.4055>:
  if (sp != 0B) goto <D.4054>; else goto <D.4056>;
  <D.4056>:
  ntokens.26 = ntokens;
  D.4340 = (long unsigned int) ntokens.26;
  D.4341 = D.4340 * 2;
  D.4407 = temp_map + D.4341;
  free (D.4407);
}


map_goto (int state, int symbol)
{
  short int * goto_map.38;
  long unsigned int D.4409;
  long unsigned int D.4410;
  short int * D.4411;
  short int D.4412;
  sizetype D.4413;
  sizetype D.4414;
  sizetype D.4415;
  short int * D.4416;
  short int D.4417;
  int D.4420;
  short int * from_state.39;
  long unsigned int D.4422;
  long unsigned int D.4423;
  short int * D.4424;
  short int D.4425;
  int D.4428;
  register int high;
  register int low;
  register int middle;
  register int s;
  static const char __PRETTY_FUNCTION__[9] = "map_goto";

  goto_map.38 = goto_map;
  D.4409 = (long unsigned int) symbol;
  D.4410 = D.4409 * 2;
  D.4411 = goto_map.38 + D.4410;
  D.4412 = *D.4411;
  low = (int) D.4412;
  goto_map.38 = goto_map;
  D.4413 = (sizetype) symbol;
  D.4414 = D.4413 + 1;
  D.4415 = D.4414 * 2;
  D.4416 = goto_map.38 + D.4415;
  D.4417 = *D.4416;
  high = (int) D.4417;
  <D.4066>:
  if (low > high) goto <D.4418>; else goto <D.4419>;
  <D.4418>:
  __assert_fail ("low <= high", "lalr.c", 289, &__PRETTY_FUNCTION__);
  <D.4419>:
  D.4420 = low + high;
  middle = D.4420 >> 1;
  from_state.39 = from_state;
  D.4422 = (long unsigned int) middle;
  D.4423 = D.4422 * 2;
  D.4424 = from_state.39 + D.4423;
  D.4425 = *D.4424;
  s = (int) D.4425;
  if (s == state) goto <D.4426>; else goto <D.4427>;
  <D.4426>:
  D.4428 = middle;
  return D.4428;
  <D.4427>:
  if (s < state) goto <D.4429>; else goto <D.4430>;
  <D.4429>:
  low = middle + 1;
  goto <D.4431>;
  <D.4430>:
  high = middle + -1;
  <D.4431>:
  goto <D.4066>;
}


initialize_F ()
{
  int ngotos.40;
  int tokensetsize.41;
  long unsigned int D.4435;
  unsigned int D.4436;
  unsigned int D.4437;
  char * F.42;
  long unsigned int D.4439;
  unsigned int D.4440;
  unsigned int D.4441;
  int D.4442;
  long unsigned int D.4443;
  unsigned int D.4444;
  unsigned int D.4445;
  short int * to_state.43;
  long unsigned int D.4447;
  long unsigned int D.4448;
  short int * D.4449;
  short int D.4450;
  struct shifts * * shift_table.44;
  long unsigned int D.4452;
  long unsigned int D.4453;
  struct shifts * * D.4454;
  short int D.4457;
  short int * accessing_symbol.45;
  short int D.4459;
  long unsigned int D.4460;
  long unsigned int D.4461;
  short int * D.4462;
  short int D.4463;
  int start_symbol.46;
  int D.4466;
  long unsigned int D.4467;
  long unsigned int D.4468;
  unsigned int * D.4469;
  unsigned int D.4470;
  int D.4471;
  unsigned int D.4472;
  unsigned int D.4473;
  char * nullable.47;
  sizetype D.4475;
  char * D.4476;
  char D.4477;
  int nedges.48;
  long unsigned int D.4481;
  long unsigned int D.4482;
  short int * D.4483;
  int D.4484;
  short int D.4485;
  long unsigned int D.4488;
  short int * * D.4489;
  int D.4490;
  long unsigned int D.4491;
  unsigned int D.4492;
  unsigned int D.4493;
  long unsigned int D.4494;
  long unsigned int D.4495;
  short int * D.4496;
  short int * D.4497;
  short int D.4498;
  long unsigned int D.4499;
  long unsigned int D.4500;
  short int * D.4501;
  long unsigned int D.4502;
  long unsigned int D.4503;
  unsigned int * F.49;
  unsigned int D.4505;
  unsigned int D.4506;
  short int * D.4507;
  register int i;
  register int j;
  register int k;
  register struct shifts * sp;
  register short int * edge;
  register unsigned int * rowp;
  register short int * rp;
  register short int * * reads;
  register int nedges;
  register int stateno;
  register int symbol;
  register int nwords;
  extern int digraph ();

  ngotos.40 = ngotos;
  tokensetsize.41 = tokensetsize;
  nwords = ngotos.40 * tokensetsize.41;
  D.4435 = (long unsigned int) nwords;
  D.4436 = (unsigned int) D.4435;
  D.4437 = D.4436 * 4;
  F.42 = allocate (D.4437);
  F = F.42;
  ngotos.40 = ngotos;
  D.4439 = (long unsigned int) ngotos.40;
  D.4440 = (unsigned int) D.4439;
  D.4441 = D.4440 * 8;
  reads = allocate (D.4441);
  ngotos.40 = ngotos;
  D.4442 = ngotos.40 + 1;
  D.4443 = (long unsigned int) D.4442;
  D.4444 = (unsigned int) D.4443;
  D.4445 = D.4444 * 2;
  edge = allocate (D.4445);
  nedges = 0;
  rowp = F;
  i = 0;
  goto <D.4091>;
  <D.4090>:
  to_state.43 = to_state;
  D.4447 = (long unsigned int) i;
  D.4448 = D.4447 * 2;
  D.4449 = to_state.43 + D.4448;
  D.4450 = *D.4449;
  stateno = (int) D.4450;
  shift_table.44 = shift_table;
  D.4452 = (long unsigned int) stateno;
  D.4453 = D.4452 * 8;
  D.4454 = shift_table.44 + D.4453;
  sp = *D.4454;
  if (sp != 0B) goto <D.4455>; else goto <D.4456>;
  <D.4455>:
  D.4457 = sp->nshifts;
  k = (int) D.4457;
  j = 0;
  goto <D.4083>;
  <D.4082>:
  accessing_symbol.45 = accessing_symbol;
  D.4459 = sp->shift[j];
  D.4460 = (long unsigned int) D.4459;
  D.4461 = D.4460 * 2;
  D.4462 = accessing_symbol.45 + D.4461;
  D.4463 = *D.4462;
  symbol = (int) D.4463;
  start_symbol.46 = start_symbol;
  if (symbol >= start_symbol.46) goto <D.4081>; else goto <D.4465>;
  <D.4465>:
  D.4466 = symbol >> 5;
  D.4467 = (long unsigned int) D.4466;
  D.4468 = D.4467 * 4;
  D.4469 = rowp + D.4468;
  D.4466 = symbol >> 5;
  D.4467 = (long unsigned int) D.4466;
  D.4468 = D.4467 * 4;
  D.4469 = rowp + D.4468;
  D.4470 = *D.4469;
  D.4471 = symbol & 31;
  D.4472 = 1 << D.4471;
  D.4473 = D.4470 | D.4472;
  *D.4469 = D.4473;
  j = j + 1;
  <D.4083>:
  if (j < k) goto <D.4082>; else goto <D.4081>;
  <D.4081>:
  goto <D.4085>;
  <D.4084>:
  accessing_symbol.45 = accessing_symbol;
  D.4459 = sp->shift[j];
  D.4460 = (long unsigned int) D.4459;
  D.4461 = D.4460 * 2;
  D.4462 = accessing_symbol.45 + D.4461;
  D.4463 = *D.4462;
  symbol = (int) D.4463;
  nullable.47 = nullable;
  D.4475 = (sizetype) symbol;
  D.4476 = nullable.47 + D.4475;
  D.4477 = *D.4476;
  if (D.4477 != 0) goto <D.4478>; else goto <D.4479>;
  <D.4478>:
  nedges.48 = nedges;
  nedges = nedges.48 + 1;
  D.4481 = (long unsigned int) nedges.48;
  D.4482 = D.4481 * 2;
  D.4483 = edge + D.4482;
  D.4484 = map_goto (stateno, symbol);
  D.4485 = (short int) D.4484;
  *D.4483 = D.4485;
  <D.4479>:
  j = j + 1;
  <D.4085>:
  if (j < k) goto <D.4084>; else goto <D.4086>;
  <D.4086>:
  if (nedges != 0) goto <D.4486>; else goto <D.4487>;
  <D.4486>:
  D.4447 = (long unsigned int) i;
  D.4488 = D.4447 * 8;
  D.4489 = reads + D.4488;
  D.4490 = nedges + 1;
  D.4491 = (long unsigned int) D.4490;
  D.4492 = (unsigned int) D.4491;
  D.4493 = D.4492 * 2;
  rp = allocate (D.4493);
  *D.4489 = rp;
  j = 0;
  goto <D.4088>;
  <D.4087>:
  D.4494 = (long unsigned int) j;
  D.4495 = D.4494 * 2;
  D.4496 = rp + D.4495;
  D.4494 = (long unsigned int) j;
  D.4495 = D.4494 * 2;
  D.4497 = edge + D.4495;
  D.4498 = *D.4497;
  *D.4496 = D.4498;
  j = j + 1;
  <D.4088>:
  if (j < nedges) goto <D.4087>; else goto <D.4089>;
  <D.4089>:
  D.4499 = (long unsigned int) nedges;
  D.4500 = D.4499 * 2;
  D.4501 = rp + D.4500;
  *D.4501 = -1;
  nedges = 0;
  <D.4487>:
  <D.4456>:
  tokensetsize.41 = tokensetsize;
  D.4502 = (long unsigned int) tokensetsize.41;
  D.4503 = D.4502 * 4;
  rowp = rowp + D.4503;
  i = i + 1;
  <D.4091>:
  ngotos.40 = ngotos;
  if (i < ngotos.40) goto <D.4090>; else goto <D.4092>;
  <D.4092>:
  F.49 = F;
  F.49 = F;
  D.4505 = *F.49;
  D.4506 = D.4505 | 1;
  *F.49 = D.4506;
  digraph (reads);
  i = 0;
  goto <D.4095>;
  <D.4094>:
  D.4447 = (long unsigned int) i;
  D.4488 = D.4447 * 8;
  D.4489 = reads + D.4488;
  D.4507 = *D.4489;
  if (D.4507 != 0B) goto <D.4508>; else goto <D.4509>;
  <D.4508>:
  D.4447 = (long unsigned int) i;
  D.4488 = D.4447 * 8;
  D.4489 = reads + D.4488;
  D.4507 = *D.4489;
  free (D.4507);
  <D.4509>:
  i = i + 1;
  <D.4095>:
  ngotos.40 = ngotos;
  if (i < ngotos.40) goto <D.4094>; else goto <D.4096>;
  <D.4096>:
  free (reads);
  free (edge);
}


build_relations ()
{
  int ngotos.50;
  long unsigned int D.4511;
  unsigned int D.4512;
  unsigned int D.4513;
  char * includes.51;
  int D.4515;
  long unsigned int D.4516;
  unsigned int D.4517;
  unsigned int D.4518;
  int maxrhs.52;
  int D.4520;
  long unsigned int D.4521;
  unsigned int D.4522;
  unsigned int D.4523;
  short int * from_state.53;
  long unsigned int D.4525;
  long unsigned int D.4526;
  short int * D.4527;
  short int D.4528;
  short int * accessing_symbol.54;
  short int * to_state.55;
  short int * D.4531;
  short int D.4532;
  long unsigned int D.4533;
  long unsigned int D.4534;
  short int * D.4535;
  short int D.4536;
  short int * * derives.56;
  long unsigned int D.4538;
  long unsigned int D.4539;
  short int * * D.4540;
  short int D.4541;
  short int * ritem.57;
  short int * rrhs.58;
  short int D.4544;
  long unsigned int D.4545;
  long unsigned int D.4546;
  short int * D.4547;
  short int D.4548;
  long unsigned int D.4549;
  long unsigned int D.4550;
  short int D.4551;
  struct shifts * * shift_table.59;
  long unsigned int D.4553;
  long unsigned int D.4554;
  struct shifts * * D.4555;
  short int D.4556;
  short int D.4557;
  long unsigned int D.4558;
  short int * D.4559;
  short int D.4560;
  int D.4561;
  int length.60;
  long unsigned int D.4564;
  long unsigned int D.4565;
  short int * D.4566;
  short int D.4567;
  int D.4568;
  int D.4569;
  int start_symbol.61;
  long unsigned int D.4573;
  long unsigned int D.4574;
  short int * D.4575;
  short int D.4576;
  int nedges.62;
  long unsigned int D.4578;
  long unsigned int D.4579;
  short int * D.4580;
  int D.4581;
  short int D.4582;
  char * nullable.63;
  sizetype D.4584;
  char * D.4585;
  char D.4586;
  short int * * includes.64;
  long unsigned int D.4594;
  short int * * D.4595;
  int D.4596;
  long unsigned int D.4597;
  unsigned int D.4598;
  unsigned int D.4599;
  long unsigned int D.4600;
  long unsigned int D.4601;
  short int * D.4602;
  short int * D.4603;
  short int D.4604;
  long unsigned int D.4605;
  long unsigned int D.4606;
  short int * D.4607;
  short int * D.4608;
  register int i;
  register int j;
  register int k;
  register short int * rulep;
  register short int * rp;
  register struct shifts * sp;
  register int length;
  register int nedges;
  register int done;
  register int state1;
  register int stateno;
  register int symbol1;
  register int symbol2;
  register short int * shortp;
  register short int * edge;
  register short int * states;
  register short int * * new_includes;

  ngotos.50 = ngotos;
  D.4511 = (long unsigned int) ngotos.50;
  D.4512 = (unsigned int) D.4511;
  D.4513 = D.4512 * 8;
  includes.51 = allocate (D.4513);
  includes = includes.51;
  ngotos.50 = ngotos;
  D.4515 = ngotos.50 + 1;
  D.4516 = (long unsigned int) D.4515;
  D.4517 = (unsigned int) D.4516;
  D.4518 = D.4517 * 2;
  edge = allocate (D.4518);
  maxrhs.52 = maxrhs;
  D.4520 = maxrhs.52 + 1;
  D.4521 = (long unsigned int) D.4520;
  D.4522 = (unsigned int) D.4521;
  D.4523 = D.4522 * 2;
  states = allocate (D.4523);
  i = 0;
  goto <D.4135>;
  <D.4134>:
  nedges = 0;
  from_state.53 = from_state;
  D.4525 = (long unsigned int) i;
  D.4526 = D.4525 * 2;
  D.4527 = from_state.53 + D.4526;
  D.4528 = *D.4527;
  state1 = (int) D.4528;
  accessing_symbol.54 = accessing_symbol;
  to_state.55 = to_state;
  D.4525 = (long unsigned int) i;
  D.4526 = D.4525 * 2;
  D.4531 = to_state.55 + D.4526;
  D.4532 = *D.4531;
  D.4533 = (long unsigned int) D.4532;
  D.4534 = D.4533 * 2;
  D.4535 = accessing_symbol.54 + D.4534;
  D.4536 = *D.4535;
  symbol1 = (int) D.4536;
  derives.56 = derives;
  D.4538 = (long unsigned int) symbol1;
  D.4539 = D.4538 * 8;
  D.4540 = derives.56 + D.4539;
  rulep = *D.4540;
  goto <D.4129>;
  <D.4128>:
  {
    extern int add_lookback_edge ();

    length = 1;
    D.4541 = (short int) state1;
    *states = D.4541;
    stateno = state1;
    ritem.57 = ritem;
    rrhs.58 = rrhs;
    D.4544 = *rulep;
    D.4545 = (long unsigned int) D.4544;
    D.4546 = D.4545 * 2;
    D.4547 = rrhs.58 + D.4546;
    D.4548 = *D.4547;
    D.4549 = (long unsigned int) D.4548;
    D.4550 = D.4549 * 2;
    rp = ritem.57 + D.4550;
    goto <D.4121>;
    <D.4120>:
    D.4551 = *rp;
    symbol2 = (int) D.4551;
    shift_table.59 = shift_table;
    D.4553 = (long unsigned int) stateno;
    D.4554 = D.4553 * 8;
    D.4555 = shift_table.59 + D.4554;
    sp = *D.4555;
    D.4556 = sp->nshifts;
    k = (int) D.4556;
    j = 0;
    goto <D.4119>;
    <D.4118>:
    D.4557 = sp->shift[j];
    stateno = (int) D.4557;
    accessing_symbol.54 = accessing_symbol;
    D.4553 = (long unsigned int) stateno;
    D.4558 = D.4553 * 2;
    D.4559 = accessing_symbol.54 + D.4558;
    D.4560 = *D.4559;
    D.4561 = (int) D.4560;
    if (D.4561 == symbol2) goto <D.4117>; else goto <D.4562>;
    <D.4562>:
    j = j + 1;
    <D.4119>:
    if (j < k) goto <D.4118>; else goto <D.4117>;
    <D.4117>:
    length.60 = length;
    length = length.60 + 1;
    D.4564 = (long unsigned int) length.60;
    D.4565 = D.4564 * 2;
    D.4566 = states + D.4565;
    D.4567 = (short int) stateno;
    *D.4566 = D.4567;
    rp = rp + 2;
    <D.4121>:
    D.4551 = *rp;
    if (D.4551 >= 0) goto <D.4120>; else goto <D.4122>;
    <D.4122>:
    D.4544 = *rulep;
    D.4568 = (int) D.4544;
    add_lookback_edge (stateno, D.4568, i);
    length = length + -1;
    done = 0;
    goto <D.4125>;
    <D.4124>:
    done = 1;
    rp = rp + 18446744073709551614;
    D.4551 = *rp;
    D.4569 = (int) D.4551;
    start_symbol.61 = start_symbol;
    if (D.4569 >= start_symbol.61) goto <D.4571>; else goto <D.4572>;
    <D.4571>:
    length = length + -1;
    D.4573 = (long unsigned int) length;
    D.4574 = D.4573 * 2;
    D.4575 = states + D.4574;
    D.4576 = *D.4575;
    stateno = (int) D.4576;
    nedges.62 = nedges;
    nedges = nedges.62 + 1;
    D.4578 = (long unsigned int) nedges.62;
    D.4579 = D.4578 * 2;
    D.4580 = edge + D.4579;
    D.4551 = *rp;
    D.4569 = (int) D.4551;
    D.4581 = map_goto (stateno, D.4569);
    D.4582 = (short int) D.4581;
    *D.4580 = D.4582;
    nullable.63 = nullable;
    D.4551 = *rp;
    D.4584 = (sizetype) D.4551;
    D.4585 = nullable.63 + D.4584;
    D.4586 = *D.4585;
    if (D.4586 != 0) goto <D.4587>; else goto <D.4588>;
    <D.4587>:
    if (length > 0) goto <D.4589>; else goto <D.4590>;
    <D.4589>:
    done = 0;
    <D.4590>:
    <D.4588>:
    <D.4572>:
    <D.4125>:
    if (done == 0) goto <D.4124>; else goto <D.4126>;
    <D.4126>:
  }
  rulep = rulep + 2;
  <D.4129>:
  D.4544 = *rulep;
  if (D.4544 >= 0) goto <D.4128>; else goto <D.4130>;
  <D.4130>:
  if (nedges != 0) goto <D.4591>; else goto <D.4592>;
  <D.4591>:
  includes.64 = includes;
  D.4525 = (long unsigned int) i;
  D.4594 = D.4525 * 8;
  D.4595 = includes.64 + D.4594;
  D.4596 = nedges + 1;
  D.4597 = (long unsigned int) D.4596;
  D.4598 = (unsigned int) D.4597;
  D.4599 = D.4598 * 2;
  shortp = allocate (D.4599);
  *D.4595 = shortp;
  j = 0;
  goto <D.4132>;
  <D.4131>:
  D.4600 = (long unsigned int) j;
  D.4601 = D.4600 * 2;
  D.4602 = shortp + D.4601;
  D.4600 = (long unsigned int) j;
  D.4601 = D.4600 * 2;
  D.4603 = edge + D.4601;
  D.4604 = *D.4603;
  *D.4602 = D.4604;
  j = j + 1;
  <D.4132>:
  if (j < nedges) goto <D.4131>; else goto <D.4133>;
  <D.4133>:
  D.4605 = (long unsigned int) nedges;
  D.4606 = D.4605 * 2;
  D.4607 = shortp + D.4606;
  *D.4607 = -1;
  <D.4592>:
  i = i + 1;
  <D.4135>:
  ngotos.50 = ngotos;
  if (i < ngotos.50) goto <D.4134>; else goto <D.4136>;
  <D.4136>:
  ngotos.50 = ngotos;
  includes.64 = includes;
  new_includes = transpose (includes.64, ngotos.50);
  i = 0;
  goto <D.4138>;
  <D.4137>:
  includes.64 = includes;
  D.4525 = (long unsigned int) i;
  D.4594 = D.4525 * 8;
  D.4595 = includes.64 + D.4594;
  D.4608 = *D.4595;
  if (D.4608 != 0B) goto <D.4609>; else goto <D.4610>;
  <D.4609>:
  includes.64 = includes;
  D.4525 = (long unsigned int) i;
  D.4594 = D.4525 * 8;
  D.4595 = includes.64 + D.4594;
  D.4608 = *D.4595;
  free (D.4608);
  <D.4610>:
  i = i + 1;
  <D.4138>:
  ngotos.50 = ngotos;
  if (i < ngotos.50) goto <D.4137>; else goto <D.4139>;
  <D.4139>:
  includes.64 = includes;
  free (includes.64);
  includes = new_includes;
  free (edge);
  free (states);
}


add_lookback_edge (int stateno, int ruleno, int gotono)
{
  short int * lookaheads.65;
  long unsigned int D.4612;
  long unsigned int D.4613;
  short int * D.4614;
  short int D.4615;
  sizetype D.4616;
  sizetype D.4617;
  sizetype D.4618;
  short int * D.4619;
  short int D.4620;
  short int * LAruleno.66;
  long unsigned int D.4622;
  long unsigned int D.4623;
  short int * D.4624;
  short int D.4625;
  int D.4626;
  _Bool D.4630;
  _Bool D.4631;
  _Bool D.4632;
  struct shorts * * lookback.67;
  long unsigned int D.4636;
  struct shorts * * D.4637;
  struct shorts * D.4638;
  short int D.4639;
  register int i;
  register int k;
  register int found;
  register struct shorts * sp;
  static const char __PRETTY_FUNCTION__[18] = "add_lookback_edge";

  lookaheads.65 = lookaheads;
  D.4612 = (long unsigned int) stateno;
  D.4613 = D.4612 * 2;
  D.4614 = lookaheads.65 + D.4613;
  D.4615 = *D.4614;
  i = (int) D.4615;
  lookaheads.65 = lookaheads;
  D.4616 = (sizetype) stateno;
  D.4617 = D.4616 + 1;
  D.4618 = D.4617 * 2;
  D.4619 = lookaheads.65 + D.4618;
  D.4620 = *D.4619;
  k = (int) D.4620;
  found = 0;
  goto <D.4150>;
  <D.4149>:
  LAruleno.66 = LAruleno;
  D.4622 = (long unsigned int) i;
  D.4623 = D.4622 * 2;
  D.4624 = LAruleno.66 + D.4623;
  D.4625 = *D.4624;
  D.4626 = (int) D.4625;
  if (D.4626 == ruleno) goto <D.4627>; else goto <D.4628>;
  <D.4627>:
  found = 1;
  goto <D.4629>;
  <D.4628>:
  i = i + 1;
  <D.4629>:
  <D.4150>:
  D.4630 = found == 0;
  D.4631 = i < k;
  D.4632 = D.4630 & D.4631;
  if (D.4632 != 0) goto <D.4149>; else goto <D.4151>;
  <D.4151>:
  if (found == 0) goto <D.4633>; else goto <D.4634>;
  <D.4633>:
  __assert_fail ("found", "lalr.c", 489, &__PRETTY_FUNCTION__);
  <D.4634>:
  sp = allocate (16);
  lookback.67 = lookback;
  D.4622 = (long unsigned int) i;
  D.4636 = D.4622 * 8;
  D.4637 = lookback.67 + D.4636;
  D.4638 = *D.4637;
  sp->next = D.4638;
  D.4639 = (short int) gotono;
  sp->value = D.4639;
  lookback.67 = lookback;
  D.4622 = (long unsigned int) i;
  D.4636 = D.4622 * 8;
  D.4637 = lookback.67 + D.4636;
  *D.4637 = sp;
}


transpose (short int * * R, int n)
{
  long unsigned int D.4640;
  unsigned int D.4641;
  unsigned int D.4642;
  long unsigned int D.4643;
  long unsigned int D.4644;
  short int * * D.4645;
  short int * sp.68;
  short int D.4649;
  long unsigned int D.4650;
  long unsigned int D.4651;
  short int * D.4652;
  short int D.4653;
  short int D.4654;
  unsigned short D.4655;
  unsigned short D.4656;
  short int D.4657;
  short int D.4658;
  unsigned int D.4659;
  long unsigned int D.4660;
  short int * D.4661;
  short int D.4662;
  int D.4665;
  long unsigned int D.4666;
  unsigned int D.4667;
  unsigned int D.4668;
  short int * * D.4669;
  short int * * D.4670;
  long unsigned int D.4671;
  long unsigned int D.4672;
  short int * D.4673;
  short int * sp.69;
  short int D.4677;
  long unsigned int D.4678;
  long unsigned int D.4679;
  short int * * D.4680;
  short int * D.4681;
  short int * D.4682;
  short int * D.4683;
  short int D.4684;
  short int * * D.4685;
  register short int * * new_R;
  register short int * * temp_R;
  register short int * nedges;
  register short int * sp;
  register int i;
  register int k;

  D.4640 = (long unsigned int) n;
  D.4641 = (unsigned int) D.4640;
  D.4642 = D.4641 * 2;
  nedges = allocate (D.4642);
  i = 0;
  goto <D.4167>;
  <D.4166>:
  D.4643 = (long unsigned int) i;
  D.4644 = D.4643 * 8;
  D.4645 = R + D.4644;
  sp = *D.4645;
  if (sp != 0B) goto <D.4646>; else goto <D.4647>;
  <D.4646>:
  goto <D.4164>;
  <D.4163>:
  sp.68 = sp;
  sp = sp.68 + 2;
  D.4649 = *sp.68;
  D.4650 = (long unsigned int) D.4649;
  D.4651 = D.4650 * 2;
  D.4652 = nedges + D.4651;
  D.4653 = *D.4652;
  D.4654 = D.4653;
  D.4655 = (unsigned short) D.4654;
  D.4656 = D.4655 + 1;
  D.4657 = (short int) D.4656;
  *D.4652 = D.4657;
  <D.4164>:
  D.4658 = *sp;
  if (D.4658 >= 0) goto <D.4163>; else goto <D.4165>;
  <D.4165>:
  <D.4647>:
  i = i + 1;
  <D.4167>:
  if (i < n) goto <D.4166>; else goto <D.4168>;
  <D.4168>:
  D.4640 = (long unsigned int) n;
  D.4641 = (unsigned int) D.4640;
  D.4659 = D.4641 * 8;
  new_R = allocate (D.4659);
  D.4640 = (long unsigned int) n;
  D.4641 = (unsigned int) D.4640;
  D.4659 = D.4641 * 8;
  temp_R = allocate (D.4659);
  i = 0;
  goto <D.4170>;
  <D.4169>:
  D.4643 = (long unsigned int) i;
  D.4660 = D.4643 * 2;
  D.4661 = nedges + D.4660;
  D.4662 = *D.4661;
  k = (int) D.4662;
  if (k > 0) goto <D.4663>; else goto <D.4664>;
  <D.4663>:
  D.4665 = k + 1;
  D.4666 = (long unsigned int) D.4665;
  D.4667 = (unsigned int) D.4666;
  D.4668 = D.4667 * 2;
  sp = allocate (D.4668);
  D.4643 = (long unsigned int) i;
  D.4644 = D.4643 * 8;
  D.4669 = new_R + D.4644;
  *D.4669 = sp;
  D.4643 = (long unsigned int) i;
  D.4644 = D.4643 * 8;
  D.4670 = temp_R + D.4644;
  *D.4670 = sp;
  D.4671 = (long unsigned int) k;
  D.4672 = D.4671 * 2;
  D.4673 = sp + D.4672;
  *D.4673 = -1;
  <D.4664>:
  i = i + 1;
  <D.4170>:
  if (i < n) goto <D.4169>; else goto <D.4171>;
  <D.4171>:
  free (nedges);
  i = 0;
  goto <D.4176>;
  <D.4175>:
  D.4643 = (long unsigned int) i;
  D.4644 = D.4643 * 8;
  D.4645 = R + D.4644;
  sp = *D.4645;
  if (sp != 0B) goto <D.4674>; else goto <D.4675>;
  <D.4674>:
  goto <D.4173>;
  <D.4172>:
  sp.69 = sp;
  sp = sp.69 + 2;
  D.4677 = *sp.69;
  D.4678 = (long unsigned int) D.4677;
  D.4679 = D.4678 * 8;
  D.4680 = temp_R + D.4679;
  D.4681 = *D.4680;
  D.4682 = D.4681;
  D.4683 = D.4682 + 2;
  *D.4680 = D.4683;
  D.4684 = (short int) i;
  *D.4682 = D.4684;
  <D.4173>:
  D.4658 = *sp;
  if (D.4658 >= 0) goto <D.4172>; else goto <D.4174>;
  <D.4174>:
  <D.4675>:
  i = i + 1;
  <D.4176>:
  if (i < n) goto <D.4175>; else goto <D.4177>;
  <D.4177>:
  free (temp_R);
  D.4685 = new_R;
  return D.4685;
}


compute_FOLLOWS ()
{
  short int * * includes.70;
  extern int digraph ();

  includes.70 = includes;
  digraph (includes.70);
}


compute_lookaheads ()
{
  short int * lookaheads.71;
  int nstates.72;
  long unsigned int D.4690;
  long unsigned int D.4691;
  short int * D.4692;
  short int D.4693;
  int tokensetsize.73;
  long unsigned int D.4695;
  long unsigned int D.4696;
  struct shorts * * lookback.74;
  long unsigned int D.4698;
  long unsigned int D.4699;
  struct shorts * * D.4700;
  unsigned int * F.75;
  short int D.4702;
  int D.4703;
  int D.4704;
  long unsigned int D.4705;
  long unsigned int D.4706;
  unsigned int * fp2.76;
  unsigned int D.4708;
  unsigned int * fp1.77;
  unsigned int * fp1.78;
  unsigned int D.4711;
  unsigned int D.4712;
  register int i;
  register int n;
  register unsigned int * fp1;
  register unsigned int * fp2;
  register unsigned int * fp3;
  register struct shorts * sp;
  register struct shorts * next;
  register unsigned int * rowp;

  rowp = LA;
  lookaheads.71 = lookaheads;
  nstates.72 = nstates;
  D.4690 = (long unsigned int) nstates.72;
  D.4691 = D.4690 * 2;
  D.4692 = lookaheads.71 + D.4691;
  D.4693 = *D.4692;
  n = (int) D.4693;
  i = 0;
  goto <D.4198>;
  <D.4197>:
  tokensetsize.73 = tokensetsize;
  D.4695 = (long unsigned int) tokensetsize.73;
  D.4696 = D.4695 * 4;
  fp3 = rowp + D.4696;
  lookback.74 = lookback;
  D.4698 = (long unsigned int) i;
  D.4699 = D.4698 * 8;
  D.4700 = lookback.74 + D.4699;
  sp = *D.4700;
  goto <D.4195>;
  <D.4194>:
  fp1 = rowp;
  F.75 = F;
  D.4702 = sp->value;
  D.4703 = (int) D.4702;
  tokensetsize.73 = tokensetsize;
  D.4704 = D.4703 * tokensetsize.73;
  D.4705 = (long unsigned int) D.4704;
  D.4706 = D.4705 * 4;
  fp2 = F.75 + D.4706;
  goto <D.4192>;
  <D.4191>:
  fp2.76 = fp2;
  fp2 = fp2.76 + 4;
  D.4708 = *fp2.76;
  fp1.77 = fp1;
  fp1 = fp1.77 + 4;
  fp1.78 = fp1.77;
  D.4711 = *fp1.78;
  D.4712 = D.4711 | D.4708;
  *fp1.78 = D.4712;
  <D.4192>:
  if (fp1 < fp3) goto <D.4191>; else goto <D.4193>;
  <D.4193>:
  sp = sp->next;
  <D.4195>:
  if (sp != 0B) goto <D.4194>; else goto <D.4196>;
  <D.4196>:
  rowp = fp3;
  i = i + 1;
  <D.4198>:
  if (i < n) goto <D.4197>; else goto <D.4199>;
  <D.4199>:
  i = 0;
  goto <D.4204>;
  <D.4203>:
  lookback.74 = lookback;
  D.4698 = (long unsigned int) i;
  D.4699 = D.4698 * 8;
  D.4700 = lookback.74 + D.4699;
  sp = *D.4700;
  goto <D.4201>;
  <D.4200>:
  next = sp->next;
  free (sp);
  sp = next;
  <D.4201>:
  if (sp != 0B) goto <D.4200>; else goto <D.4202>;
  <D.4202>:
  i = i + 1;
  <D.4204>:
  if (i < n) goto <D.4203>; else goto <D.4205>;
  <D.4205>:
  lookback.74 = lookback;
  free (lookback.74);
  F.75 = F;
  free (F.75);
}


digraph (short int * * relation)
{
  int ngotos.79;
  int infinity.80;
  int D.4715;
  long unsigned int D.4716;
  unsigned int D.4717;
  unsigned int D.4718;
  char * INDEX.81;
  char * VERTICES.82;
  short int * INDEX.83;
  long unsigned int D.4722;
  long unsigned int D.4723;
  short int * D.4724;
  short int D.4725;
  short int * * R.84;
  long unsigned int D.4729;
  short int * * D.4730;
  short int * D.4731;
  short int * VERTICES.85;
  register int i;

  ngotos.79 = ngotos;
  infinity.80 = ngotos.79 + 2;
  infinity = infinity.80;
  ngotos.79 = ngotos;
  D.4715 = ngotos.79 + 1;
  D.4716 = (long unsigned int) D.4715;
  D.4717 = (unsigned int) D.4716;
  D.4718 = D.4717 * 2;
  INDEX.81 = allocate (D.4718);
  INDEX = INDEX.81;
  ngotos.79 = ngotos;
  D.4715 = ngotos.79 + 1;
  D.4716 = (long unsigned int) D.4715;
  D.4717 = (unsigned int) D.4716;
  D.4718 = D.4717 * 2;
  VERTICES.82 = allocate (D.4718);
  VERTICES = VERTICES.82;
  top = 0;
  R = relation;
  i = 0;
  goto <D.4211>;
  <D.4210>:
  INDEX.83 = INDEX;
  D.4722 = (long unsigned int) i;
  D.4723 = D.4722 * 2;
  D.4724 = INDEX.83 + D.4723;
  *D.4724 = 0;
  i = i + 1;
  <D.4211>:
  ngotos.79 = ngotos;
  if (i < ngotos.79) goto <D.4210>; else goto <D.4212>;
  <D.4212>:
  i = 0;
  goto <D.4216>;
  <D.4215>:
  {
    extern int traverse ();

    INDEX.83 = INDEX;
    D.4722 = (long unsigned int) i;
    D.4723 = D.4722 * 2;
    D.4724 = INDEX.83 + D.4723;
    D.4725 = *D.4724;
    if (D.4725 == 0) goto <D.4726>; else goto <D.4727>;
    <D.4726>:
    R.84 = R;
    D.4722 = (long unsigned int) i;
    D.4729 = D.4722 * 8;
    D.4730 = R.84 + D.4729;
    D.4731 = *D.4730;
    if (D.4731 != 0B) goto <D.4732>; else goto <D.4733>;
    <D.4732>:
    traverse (i);
    <D.4733>:
    <D.4727>:
  }
  i = i + 1;
  <D.4216>:
  ngotos.79 = ngotos;
  if (i < ngotos.79) goto <D.4215>; else goto <D.4217>;
  <D.4217>:
  INDEX.83 = INDEX;
  free (INDEX.83);
  VERTICES.85 = VERTICES;
  free (VERTICES.85);
}


traverse (int i)
{
  short int * VERTICES.86;
  int top.87;
  int top.88;
  long unsigned int D.4738;
  long unsigned int D.4739;
  short int * D.4740;
  short int D.4741;
  short int * INDEX.89;
  long unsigned int D.4743;
  long unsigned int D.4744;
  short int * D.4745;
  short int D.4746;
  unsigned int * F.90;
  int tokensetsize.91;
  int D.4749;
  long unsigned int D.4750;
  long unsigned int D.4751;
  long unsigned int D.4752;
  long unsigned int D.4753;
  short int * * R.92;
  long unsigned int D.4755;
  short int * * D.4756;
  long unsigned int D.4759;
  long unsigned int D.4760;
  short int * D.4761;
  short int D.4762;
  short int D.4765;
  int D.4768;
  long unsigned int D.4769;
  long unsigned int D.4770;
  unsigned int * fp2.93;
  unsigned int D.4772;
  unsigned int * fp1.94;
  unsigned int * fp1.95;
  unsigned int D.4775;
  unsigned int D.4776;
  short int * rp.96;
  short int D.4778;
  int D.4779;
  int top.97;
  int top.98;
  long unsigned int D.4784;
  long unsigned int D.4785;
  short int * D.4786;
  short int D.4787;
  int infinity.99;
  short int D.4789;
  unsigned int * fp2.100;
  unsigned int * fp1.101;
  unsigned int D.4793;
  register unsigned int * fp1;
  register unsigned int * fp2;
  register unsigned int * fp3;
  register int j;
  register short int * rp;
  int height;
  unsigned int * base;

  VERTICES.86 = VERTICES;
  top.87 = top;
  top.88 = top.87 + 1;
  top = top.88;
  top.87 = top;
  D.4738 = (long unsigned int) top.87;
  D.4739 = D.4738 * 2;
  D.4740 = VERTICES.86 + D.4739;
  D.4741 = (short int) i;
  *D.4740 = D.4741;
  INDEX.89 = INDEX;
  D.4743 = (long unsigned int) i;
  D.4744 = D.4743 * 2;
  D.4745 = INDEX.89 + D.4744;
  height = top;
  D.4746 = (short int) height;
  *D.4745 = D.4746;
  F.90 = F;
  tokensetsize.91 = tokensetsize;
  D.4749 = i * tokensetsize.91;
  D.4750 = (long unsigned int) D.4749;
  D.4751 = D.4750 * 4;
  base = F.90 + D.4751;
  tokensetsize.91 = tokensetsize;
  D.4752 = (long unsigned int) tokensetsize.91;
  D.4753 = D.4752 * 4;
  fp3 = base + D.4753;
  R.92 = R;
  D.4743 = (long unsigned int) i;
  D.4755 = D.4743 * 8;
  D.4756 = R.92 + D.4755;
  rp = *D.4756;
  if (rp != 0B) goto <D.4757>; else goto <D.4758>;
  <D.4757>:
  goto <D.4232>;
  <D.4231>:
  INDEX.89 = INDEX;
  D.4759 = (long unsigned int) j;
  D.4760 = D.4759 * 2;
  D.4761 = INDEX.89 + D.4760;
  D.4762 = *D.4761;
  if (D.4762 == 0) goto <D.4763>; else goto <D.4764>;
  <D.4763>:
  traverse (j);
  <D.4764>:
  INDEX.89 = INDEX;
  D.4743 = (long unsigned int) i;
  D.4744 = D.4743 * 2;
  D.4745 = INDEX.89 + D.4744;
  D.4765 = *D.4745;
  INDEX.89 = INDEX;
  D.4759 = (long unsigned int) j;
  D.4760 = D.4759 * 2;
  D.4761 = INDEX.89 + D.4760;
  D.4762 = *D.4761;
  if (D.4765 > D.4762) goto <D.4766>; else goto <D.4767>;
  <D.4766>:
  INDEX.89 = INDEX;
  D.4743 = (long unsigned int) i;
  D.4744 = D.4743 * 2;
  D.4745 = INDEX.89 + D.4744;
  INDEX.89 = INDEX;
  D.4759 = (long unsigned int) j;
  D.4760 = D.4759 * 2;
  D.4761 = INDEX.89 + D.4760;
  D.4762 = *D.4761;
  *D.4745 = D.4762;
  <D.4767>:
  fp1 = base;
  F.90 = F;
  tokensetsize.91 = tokensetsize;
  D.4768 = j * tokensetsize.91;
  D.4769 = (long unsigned int) D.4768;
  D.4770 = D.4769 * 4;
  fp2 = F.90 + D.4770;
  goto <D.4229>;
  <D.4228>:
  fp2.93 = fp2;
  fp2 = fp2.93 + 4;
  D.4772 = *fp2.93;
  fp1.94 = fp1;
  fp1 = fp1.94 + 4;
  fp1.95 = fp1.94;
  D.4775 = *fp1.95;
  D.4776 = D.4775 | D.4772;
  *fp1.95 = D.4776;
  <D.4229>:
  if (fp1 < fp3) goto <D.4228>; else goto <D.4230>;
  <D.4230>:
  <D.4232>:
  rp.96 = rp;
  rp = rp.96 + 2;
  D.4778 = *rp.96;
  j = (int) D.4778;
  if (j >= 0) goto <D.4231>; else goto <D.4233>;
  <D.4233>:
  <D.4758>:
  INDEX.89 = INDEX;
  D.4743 = (long unsigned int) i;
  D.4744 = D.4743 * 2;
  D.4745 = INDEX.89 + D.4744;
  D.4765 = *D.4745;
  D.4779 = (int) D.4765;
  if (D.4779 == height) goto <D.4780>; else goto <D.4781>;
  <D.4780>:
  <D.4238>:
  VERTICES.86 = VERTICES;
  top.87 = top;
  top.97 = top.87;
  top.98 = top.97 + -1;
  top = top.98;
  D.4784 = (long unsigned int) top.97;
  D.4785 = D.4784 * 2;
  D.4786 = VERTICES.86 + D.4785;
  D.4787 = *D.4786;
  j = (int) D.4787;
  INDEX.89 = INDEX;
  D.4759 = (long unsigned int) j;
  D.4760 = D.4759 * 2;
  D.4761 = INDEX.89 + D.4760;
  infinity.99 = infinity;
  D.4789 = (short int) infinity.99;
  *D.4761 = D.4789;
  if (i == j) goto <D.4234>; else goto <D.4790>;
  <D.4790>:
  fp1 = base;
  F.90 = F;
  tokensetsize.91 = tokensetsize;
  D.4768 = j * tokensetsize.91;
  D.4769 = (long unsigned int) D.4768;
  D.4770 = D.4769 * 4;
  fp2 = F.90 + D.4770;
  goto <D.4236>;
  <D.4235>:
  fp2.100 = fp2;
  fp2 = fp2.100 + 4;
  fp1.101 = fp1;
  fp1 = fp1.101 + 4;
  D.4793 = *fp1.101;
  *fp2.100 = D.4793;
  <D.4236>:
  if (fp1 < fp3) goto <D.4235>; else goto <D.4237>;
  <D.4237>:
  goto <D.4238>;
  <D.4234>:
  <D.4781>:
}


