lalr ()
{
  int ntokens.0;
  int D.3622;
  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.3622 = ntokens.0 + 31;
  tokensetsize.1 = D.3622 / 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;
  unsigned int nstates.3;
  unsigned int D.3626;
  char * state_table.4;
  struct core * * state_table.5;
  short int D.3629;
  unsigned int D.3630;
  unsigned int D.3631;
  struct core * * D.3632;
  register struct core * sp;

  nstates.2 = nstates;
  nstates.3 = (unsigned int) nstates.2;
  D.3626 = nstates.3 * 4;
  state_table.4 = allocate (D.3626);
  state_table = state_table.4;
  sp = first_state;
  goto <D.3365>;
  <D.3364>:
  state_table.5 = state_table;
  D.3629 = sp->number;
  D.3630 = (unsigned int) D.3629;
  D.3631 = D.3630 * 4;
  D.3632 = state_table.5 + D.3631;
  *D.3632 = sp;
  sp = sp->next;
  <D.3365>:
  if (sp != 0B) goto <D.3364>; else goto <D.3366>;
  <D.3366>:
}


set_accessing_symbol ()
{
  int nstates.6;
  unsigned int nstates.7;
  unsigned int D.3635;
  char * accessing_symbol.8;
  short int * accessing_symbol.9;
  short int D.3638;
  unsigned int D.3639;
  unsigned int D.3640;
  short int * D.3641;
  short int D.3642;
  register struct core * sp;

  nstates.6 = nstates;
  nstates.7 = (unsigned int) nstates.6;
  D.3635 = nstates.7 * 2;
  accessing_symbol.8 = allocate (D.3635);
  accessing_symbol = accessing_symbol.8;
  sp = first_state;
  goto <D.3371>;
  <D.3370>:
  accessing_symbol.9 = accessing_symbol;
  D.3638 = sp->number;
  D.3639 = (unsigned int) D.3638;
  D.3640 = D.3639 * 2;
  D.3641 = accessing_symbol.9 + D.3640;
  D.3642 = sp->accessing_symbol;
  *D.3641 = D.3642;
  sp = sp->next;
  <D.3371>:
  if (sp != 0B) goto <D.3370>; else goto <D.3372>;
  <D.3372>:
}


set_shift_table ()
{
  int nstates.10;
  unsigned int nstates.11;
  unsigned int D.3645;
  char * shift_table.12;
  struct shifts * * shift_table.13;
  short int D.3648;
  unsigned int D.3649;
  unsigned int D.3650;
  struct shifts * * D.3651;
  register struct shifts * sp;

  nstates.10 = nstates;
  nstates.11 = (unsigned int) nstates.10;
  D.3645 = nstates.11 * 4;
  shift_table.12 = allocate (D.3645);
  shift_table = shift_table.12;
  sp = first_shift;
  goto <D.3377>;
  <D.3376>:
  shift_table.13 = shift_table;
  D.3648 = sp->number;
  D.3649 = (unsigned int) D.3648;
  D.3650 = D.3649 * 4;
  D.3651 = shift_table.13 + D.3650;
  *D.3651 = sp;
  sp = sp->next;
  <D.3377>:
  if (sp != 0B) goto <D.3376>; else goto <D.3378>;
  <D.3378>:
}


set_reduction_table ()
{
  int nstates.14;
  unsigned int nstates.15;
  unsigned int D.3654;
  char * reduction_table.16;
  struct reductions * * reduction_table.17;
  short int D.3657;
  unsigned int D.3658;
  unsigned int D.3659;
  struct reductions * * D.3660;
  register struct reductions * rp;

  nstates.14 = nstates;
  nstates.15 = (unsigned int) nstates.14;
  D.3654 = nstates.15 * 4;
  reduction_table.16 = allocate (D.3654);
  reduction_table = reduction_table.16;
  rp = first_reduction;
  goto <D.3383>;
  <D.3382>:
  reduction_table.17 = reduction_table;
  D.3657 = rp->number;
  D.3658 = (unsigned int) D.3657;
  D.3659 = D.3658 * 4;
  D.3660 = reduction_table.17 + D.3659;
  *D.3660 = rp;
  rp = rp->next;
  <D.3383>:
  if (rp != 0B) goto <D.3382>; else goto <D.3384>;
  <D.3384>:
}


set_maxrhs ()
{
  short int * ritem.18;
  int nitems.19;
  unsigned int nitems.20;
  unsigned int D.3664;
  short int D.3665;
  register short int * itemp;
  register short int * item_end;
  register int length;
  register int max;

  length = 0;
  max = 0;
  ritem.18 = ritem;
  nitems.19 = nitems;
  nitems.20 = (unsigned int) nitems.19;
  D.3664 = nitems.20 * 2;
  item_end = ritem.18 + D.3664;
  itemp = ritem;
  goto <D.3392>;
  <D.3391>:
  D.3665 = *itemp;
  if (D.3665 >= 0) goto <D.3666>; else goto <D.3667>;
  <D.3666>:
  length = length + 1;
  goto <D.3668>;
  <D.3667>:
  if (length > max) goto <D.3669>; else goto <D.3670>;
  <D.3669>:
  max = length;
  <D.3670>:
  length = 0;
  <D.3668>:
  itemp = itemp + 2;
  <D.3392>:
  if (itemp < item_end) goto <D.3391>; else goto <D.3393>;
  <D.3393>:
  maxrhs = max;
}


initialize_LA ()
{
  int nstates.21;
  int D.3672;
  unsigned int D.3673;
  unsigned int D.3674;
  char * lookaheads.22;
  short int * lookaheads.23;
  unsigned int i.24;
  unsigned int D.3678;
  short int * D.3679;
  short int D.3680;
  struct reductions * * reduction_table.25;
  unsigned int D.3682;
  struct reductions * * D.3683;
  short int D.3686;
  int D.3687;
  unsigned int nstates.26;
  unsigned int D.3689;
  short int * D.3690;
  int tokensetsize.27;
  int D.3692;
  unsigned int D.3693;
  unsigned int D.3694;
  char * LA.28;
  unsigned int k.29;
  unsigned int D.3697;
  char * LAruleno.30;
  unsigned int D.3699;
  char * lookback.31;
  short int * LAruleno.32;
  short int * D.3704;
  short int D.3705;
  register int i;
  register int j;
  register int k;
  register struct reductions * rp;

  nstates.21 = nstates;
  D.3672 = nstates.21 + 1;
  D.3673 = (unsigned int) D.3672;
  D.3674 = D.3673 * 2;
  lookaheads.22 = allocate (D.3674);
  lookaheads = lookaheads.22;
  k = 0;
  i = 0;
  goto <D.3401>;
  <D.3400>:
  lookaheads.23 = lookaheads;
  i.24 = (unsigned int) i;
  D.3678 = i.24 * 2;
  D.3679 = lookaheads.23 + D.3678;
  D.3680 = (short int) k;
  *D.3679 = D.3680;
  reduction_table.25 = reduction_table;
  i.24 = (unsigned int) i;
  D.3682 = i.24 * 4;
  D.3683 = reduction_table.25 + D.3682;
  rp = *D.3683;
  if (rp != 0B) goto <D.3684>; else goto <D.3685>;
  <D.3684>:
  D.3686 = rp->nreds;
  D.3687 = (int) D.3686;
  k = D.3687 + k;
  <D.3685>:
  i = i + 1;
  <D.3401>:
  nstates.21 = nstates;
  if (i < nstates.21) goto <D.3400>; else goto <D.3402>;
  <D.3402>:
  lookaheads.23 = lookaheads;
  nstates.21 = nstates;
  nstates.26 = (unsigned int) nstates.21;
  D.3689 = nstates.26 * 2;
  D.3690 = lookaheads.23 + D.3689;
  D.3680 = (short int) k;
  *D.3690 = D.3680;
  tokensetsize.27 = tokensetsize;
  D.3692 = k * tokensetsize.27;
  D.3693 = (unsigned int) D.3692;
  D.3694 = D.3693 * 4;
  LA.28 = allocate (D.3694);
  LA = LA.28;
  k.29 = (unsigned int) k;
  D.3697 = k.29 * 2;
  LAruleno.30 = allocate (D.3697);
  LAruleno = LAruleno.30;
  k.29 = (unsigned int) k;
  D.3699 = k.29 * 4;
  lookback.31 = allocate (D.3699);
  lookback = lookback.31;
  k = 0;
  i = 0;
  goto <D.3407>;
  <D.3406>:
  reduction_table.25 = reduction_table;
  i.24 = (unsigned int) i;
  D.3682 = i.24 * 4;
  D.3683 = reduction_table.25 + D.3682;
  rp = *D.3683;
  if (rp != 0B) goto <D.3701>; else goto <D.3702>;
  <D.3701>:
  j = 0;
  goto <D.3404>;
  <D.3403>:
  LAruleno.32 = LAruleno;
  k.29 = (unsigned int) k;
  D.3697 = k.29 * 2;
  D.3704 = LAruleno.32 + D.3697;
  D.3705 = rp->rules[j];
  *D.3704 = D.3705;
  k = k + 1;
  j = j + 1;
  <D.3404>:
  D.3686 = rp->nreds;
  D.3687 = (int) D.3686;
  if (D.3687 > j) goto <D.3403>; else goto <D.3405>;
  <D.3405>:
  <D.3702>:
  i = i + 1;
  <D.3407>:
  nstates.21 = nstates;
  if (i < nstates.21) goto <D.3406>; else goto <D.3408>;
  <D.3408>:
}


set_goto_map ()
{
  int nvars.33;
  int D.3707;
  unsigned int D.3708;
  unsigned int D.3709;
  char * D.3710;
  int ntokens.34;
  unsigned int ntokens.35;
  unsigned int D.3713;
  sizetype D.3714;
  short int * goto_map.36;
  char * D.3716;
  short int D.3717;
  int D.3718;
  short int * accessing_symbol.37;
  short int D.3720;
  unsigned int D.3721;
  unsigned int D.3722;
  short int * D.3723;
  short int D.3724;
  int start_symbol.38;
  int ngotos.39;
  int ngotos.40;
  short int * goto_map.41;
  unsigned int symbol.42;
  unsigned int D.3733;
  short int * D.3734;
  short int D.3735;
  short int D.3736;
  unsigned short D.3737;
  unsigned short D.3738;
  short int D.3739;
  unsigned int i.43;
  unsigned int D.3741;
  short int * D.3742;
  short int D.3743;
  short int * D.3744;
  short int D.3745;
  int D.3746;
  int nsyms.44;
  short int D.3748;
  unsigned int nsyms.45;
  unsigned int D.3750;
  short int * D.3751;
  short int D.3752;
  short int * D.3753;
  unsigned int ngotos.46;
  unsigned int D.3755;
  char * from_state.47;
  char * to_state.48;
  short int D.3758;
  unsigned int state2.49;
  unsigned int D.3760;
  short int * D.3761;
  short int D.3762;
  short int * D.3764;
  short int D.3765;
  short int D.3766;
  unsigned short D.3767;
  unsigned short D.3768;
  short int D.3769;
  short int * from_state.50;
  unsigned int k.51;
  unsigned int D.3772;
  short int * D.3773;
  short int D.3774;
  short int * to_state.52;
  short int * D.3776;
  short int D.3777;
  void * D.3778;
  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.33 = nvars;
  D.3707 = nvars.33 + 1;
  D.3708 = (unsigned int) D.3707;
  D.3709 = D.3708 * 2;
  D.3710 = allocate (D.3709);
  ntokens.34 = ntokens;
  ntokens.35 = (unsigned int) ntokens.34;
  D.3713 = ntokens.35 * 2;
  D.3714 = -D.3713;
  goto_map.36 = D.3710 + D.3714;
  goto_map = goto_map.36;
  nvars.33 = nvars;
  D.3707 = nvars.33 + 1;
  D.3708 = (unsigned int) D.3707;
  D.3709 = D.3708 * 2;
  D.3716 = allocate (D.3709);
  ntokens.34 = ntokens;
  ntokens.35 = (unsigned int) ntokens.34;
  D.3713 = ntokens.35 * 2;
  D.3714 = -D.3713;
  temp_map = D.3716 + D.3714;
  ngotos = 0;
  sp = first_shift;
  goto <D.3424>;
  <D.3423>:
  D.3717 = sp->nshifts;
  D.3718 = (int) D.3717;
  i = D.3718 + -1;
  goto <D.3422>;
  <D.3421>:
  {
    extern int fatal ();

    accessing_symbol.37 = accessing_symbol;
    D.3720 = sp->shift[i];
    D.3721 = (unsigned int) D.3720;
    D.3722 = D.3721 * 2;
    D.3723 = accessing_symbol.37 + D.3722;
    D.3724 = *D.3723;
    symbol = (int) D.3724;
    start_symbol.38 = start_symbol;
    if (symbol < start_symbol.38) goto <D.3418>; else goto <D.3726>;
    <D.3726>:
    ngotos.39 = ngotos;
    if (ngotos.39 == 32767) goto <D.3728>; else goto <D.3729>;
    <D.3728>:
    fatal ("too many gotos");
    <D.3729>:
    ngotos.39 = ngotos;
    ngotos.40 = ngotos.39 + 1;
    ngotos = ngotos.40;
    goto_map.41 = goto_map;
    symbol.42 = (unsigned int) symbol;
    D.3733 = symbol.42 * 2;
    D.3734 = goto_map.41 + D.3733;
    D.3735 = *D.3734;
    D.3736 = D.3735;
    D.3737 = (unsigned short) D.3736;
    D.3738 = D.3737 + 1;
    D.3739 = (short int) D.3738;
    *D.3734 = D.3739;
  }
  i = i + -1;
  <D.3422>:
  if (i >= 0) goto <D.3421>; else goto <D.3418>;
  <D.3418>:
  sp = sp->next;
  <D.3424>:
  if (sp != 0B) goto <D.3423>; else goto <D.3425>;
  <D.3425>:
  k = 0;
  i = ntokens;
  goto <D.3427>;
  <D.3426>:
  i.43 = (unsigned int) i;
  D.3741 = i.43 * 2;
  D.3742 = temp_map + D.3741;
  D.3743 = (short int) k;
  *D.3742 = D.3743;
  goto_map.41 = goto_map;
  i.43 = (unsigned int) i;
  D.3741 = i.43 * 2;
  D.3744 = goto_map.41 + D.3741;
  D.3745 = *D.3744;
  D.3746 = (int) D.3745;
  k = D.3746 + k;
  i = i + 1;
  <D.3427>:
  nsyms.44 = nsyms;
  if (i < nsyms.44) goto <D.3426>; else goto <D.3428>;
  <D.3428>:
  i = ntokens;
  goto <D.3430>;
  <D.3429>:
  goto_map.41 = goto_map;
  i.43 = (unsigned int) i;
  D.3741 = i.43 * 2;
  D.3744 = goto_map.41 + D.3741;
  i.43 = (unsigned int) i;
  D.3741 = i.43 * 2;
  D.3742 = temp_map + D.3741;
  D.3748 = *D.3742;
  *D.3744 = D.3748;
  i = i + 1;
  <D.3430>:
  nsyms.44 = nsyms;
  if (i < nsyms.44) goto <D.3429>; else goto <D.3431>;
  <D.3431>:
  goto_map.41 = goto_map;
  nsyms.44 = nsyms;
  nsyms.45 = (unsigned int) nsyms.44;
  D.3750 = nsyms.45 * 2;
  D.3751 = goto_map.41 + D.3750;
  ngotos.39 = ngotos;
  D.3752 = (short int) ngotos.39;
  *D.3751 = D.3752;
  nsyms.44 = nsyms;
  nsyms.45 = (unsigned int) nsyms.44;
  D.3750 = nsyms.45 * 2;
  D.3753 = temp_map + D.3750;
  ngotos.39 = ngotos;
  D.3752 = (short int) ngotos.39;
  *D.3753 = D.3752;
  ngotos.39 = ngotos;
  ngotos.46 = (unsigned int) ngotos.39;
  D.3755 = ngotos.46 * 2;
  from_state.47 = allocate (D.3755);
  from_state = from_state.47;
  ngotos.39 = ngotos;
  ngotos.46 = (unsigned int) ngotos.39;
  D.3755 = ngotos.46 * 2;
  to_state.48 = allocate (D.3755);
  to_state = to_state.48;
  sp = first_shift;
  goto <D.3436>;
  <D.3435>:
  D.3758 = sp->number;
  state1 = (int) D.3758;
  D.3717 = sp->nshifts;
  D.3718 = (int) D.3717;
  i = D.3718 + -1;
  goto <D.3434>;
  <D.3433>:
  D.3720 = sp->shift[i];
  state2 = (int) D.3720;
  accessing_symbol.37 = accessing_symbol;
  state2.49 = (unsigned int) state2;
  D.3760 = state2.49 * 2;
  D.3761 = accessing_symbol.37 + D.3760;
  D.3762 = *D.3761;
  symbol = (int) D.3762;
  start_symbol.38 = start_symbol;
  if (symbol < start_symbol.38) goto <D.3432>; else goto <D.3763>;
  <D.3763>:
  symbol.42 = (unsigned int) symbol;
  D.3733 = symbol.42 * 2;
  D.3764 = temp_map + D.3733;
  D.3765 = *D.3764;
  D.3766 = D.3765;
  D.3767 = (unsigned short) D.3766;
  D.3768 = D.3767 + 1;
  D.3769 = (short int) D.3768;
  *D.3764 = D.3769;
  k = (int) D.3766;
  from_state.50 = from_state;
  k.51 = (unsigned int) k;
  D.3772 = k.51 * 2;
  D.3773 = from_state.50 + D.3772;
  D.3774 = (short int) state1;
  *D.3773 = D.3774;
  to_state.52 = to_state;
  k.51 = (unsigned int) k;
  D.3772 = k.51 * 2;
  D.3776 = to_state.52 + D.3772;
  D.3777 = (short int) state2;
  *D.3776 = D.3777;
  i = i + -1;
  <D.3434>:
  if (i >= 0) goto <D.3433>; else goto <D.3432>;
  <D.3432>:
  sp = sp->next;
  <D.3436>:
  if (sp != 0B) goto <D.3435>; else goto <D.3437>;
  <D.3437>:
  ntokens.34 = ntokens;
  ntokens.35 = (unsigned int) ntokens.34;
  D.3713 = ntokens.35 * 2;
  D.3778 = temp_map + D.3713;
  free (D.3778);
}


map_goto (int state, int symbol)
{
  short int * goto_map.53;
  unsigned int symbol.54;
  unsigned int D.3781;
  short int * D.3782;
  short int D.3783;
  sizetype symbol.55;
  sizetype D.3785;
  sizetype D.3786;
  short int * D.3787;
  short int D.3788;
  int D.3791;
  short int * from_state.56;
  unsigned int middle.57;
  unsigned int D.3794;
  short int * D.3795;
  short int D.3796;
  int D.3799;
  register int high;
  register int low;
  register int middle;
  register int s;
  static const char __PRETTY_FUNCTION__[9] = "map_goto";

  goto_map.53 = goto_map;
  symbol.54 = (unsigned int) symbol;
  D.3781 = symbol.54 * 2;
  D.3782 = goto_map.53 + D.3781;
  D.3783 = *D.3782;
  low = (int) D.3783;
  goto_map.53 = goto_map;
  symbol.55 = (sizetype) symbol;
  D.3785 = symbol.55 + 1;
  D.3786 = D.3785 * 2;
  D.3787 = goto_map.53 + D.3786;
  D.3788 = *D.3787;
  high = (int) D.3788;
  <D.3447>:
  if (low > high) goto <D.3789>; else goto <D.3790>;
  <D.3789>:
  __assert_fail ("low <= high", "lalr.c", 289, &__PRETTY_FUNCTION__);
  <D.3790>:
  D.3791 = low + high;
  middle = D.3791 >> 1;
  from_state.56 = from_state;
  middle.57 = (unsigned int) middle;
  D.3794 = middle.57 * 2;
  D.3795 = from_state.56 + D.3794;
  D.3796 = *D.3795;
  s = (int) D.3796;
  if (s == state) goto <D.3797>; else goto <D.3798>;
  <D.3797>:
  D.3799 = middle;
  return D.3799;
  <D.3798>:
  if (s < state) goto <D.3800>; else goto <D.3801>;
  <D.3800>:
  low = middle + 1;
  goto <D.3802>;
  <D.3801>:
  high = middle + -1;
  <D.3802>:
  goto <D.3447>;
}


initialize_F ()
{
  int ngotos.58;
  int tokensetsize.59;
  unsigned int nwords.60;
  unsigned int D.3807;
  char * F.61;
  unsigned int ngotos.62;
  unsigned int D.3810;
  int D.3811;
  unsigned int D.3812;
  unsigned int D.3813;
  short int * to_state.63;
  unsigned int i.64;
  unsigned int D.3816;
  short int * D.3817;
  short int D.3818;
  struct shifts * * shift_table.65;
  unsigned int stateno.66;
  unsigned int D.3821;
  struct shifts * * D.3822;
  short int D.3825;
  short int * accessing_symbol.67;
  short int D.3827;
  unsigned int D.3828;
  unsigned int D.3829;
  short int * D.3830;
  short int D.3831;
  int start_symbol.68;
  int D.3834;
  unsigned int D.3835;
  unsigned int D.3836;
  unsigned int * D.3837;
  unsigned int D.3838;
  int D.3839;
  unsigned int D.3840;
  unsigned int D.3841;
  char * nullable.69;
  sizetype symbol.70;
  char * D.3844;
  char D.3845;
  int nedges.71;
  unsigned int nedges.72;
  unsigned int D.3850;
  short int * D.3851;
  int D.3852;
  short int D.3853;
  unsigned int D.3856;
  short int * * D.3857;
  int D.3858;
  unsigned int D.3859;
  unsigned int D.3860;
  unsigned int j.73;
  unsigned int D.3862;
  short int * D.3863;
  short int * D.3864;
  short int D.3865;
  unsigned int nedges.74;
  unsigned int D.3867;
  short int * D.3868;
  unsigned int tokensetsize.75;
  unsigned int D.3870;
  unsigned int * F.76;
  unsigned int D.3872;
  unsigned int D.3873;
  short int * D.3874;
  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.58 = ngotos;
  tokensetsize.59 = tokensetsize;
  nwords = ngotos.58 * tokensetsize.59;
  nwords.60 = (unsigned int) nwords;
  D.3807 = nwords.60 * 4;
  F.61 = allocate (D.3807);
  F = F.61;
  ngotos.58 = ngotos;
  ngotos.62 = (unsigned int) ngotos.58;
  D.3810 = ngotos.62 * 4;
  reads = allocate (D.3810);
  ngotos.58 = ngotos;
  D.3811 = ngotos.58 + 1;
  D.3812 = (unsigned int) D.3811;
  D.3813 = D.3812 * 2;
  edge = allocate (D.3813);
  nedges = 0;
  rowp = F;
  i = 0;
  goto <D.3472>;
  <D.3471>:
  to_state.63 = to_state;
  i.64 = (unsigned int) i;
  D.3816 = i.64 * 2;
  D.3817 = to_state.63 + D.3816;
  D.3818 = *D.3817;
  stateno = (int) D.3818;
  shift_table.65 = shift_table;
  stateno.66 = (unsigned int) stateno;
  D.3821 = stateno.66 * 4;
  D.3822 = shift_table.65 + D.3821;
  sp = *D.3822;
  if (sp != 0B) goto <D.3823>; else goto <D.3824>;
  <D.3823>:
  D.3825 = sp->nshifts;
  k = (int) D.3825;
  j = 0;
  goto <D.3464>;
  <D.3463>:
  accessing_symbol.67 = accessing_symbol;
  D.3827 = sp->shift[j];
  D.3828 = (unsigned int) D.3827;
  D.3829 = D.3828 * 2;
  D.3830 = accessing_symbol.67 + D.3829;
  D.3831 = *D.3830;
  symbol = (int) D.3831;
  start_symbol.68 = start_symbol;
  if (symbol >= start_symbol.68) goto <D.3462>; else goto <D.3833>;
  <D.3833>:
  D.3834 = symbol >> 5;
  D.3835 = (unsigned int) D.3834;
  D.3836 = D.3835 * 4;
  D.3837 = rowp + D.3836;
  D.3834 = symbol >> 5;
  D.3835 = (unsigned int) D.3834;
  D.3836 = D.3835 * 4;
  D.3837 = rowp + D.3836;
  D.3838 = *D.3837;
  D.3839 = symbol & 31;
  D.3840 = 1 << D.3839;
  D.3841 = D.3838 | D.3840;
  *D.3837 = D.3841;
  j = j + 1;
  <D.3464>:
  if (j < k) goto <D.3463>; else goto <D.3462>;
  <D.3462>:
  goto <D.3466>;
  <D.3465>:
  accessing_symbol.67 = accessing_symbol;
  D.3827 = sp->shift[j];
  D.3828 = (unsigned int) D.3827;
  D.3829 = D.3828 * 2;
  D.3830 = accessing_symbol.67 + D.3829;
  D.3831 = *D.3830;
  symbol = (int) D.3831;
  nullable.69 = nullable;
  symbol.70 = (sizetype) symbol;
  D.3844 = nullable.69 + symbol.70;
  D.3845 = *D.3844;
  if (D.3845 != 0) goto <D.3846>; else goto <D.3847>;
  <D.3846>:
  nedges.71 = nedges;
  nedges = nedges.71 + 1;
  nedges.72 = (unsigned int) nedges.71;
  D.3850 = nedges.72 * 2;
  D.3851 = edge + D.3850;
  D.3852 = map_goto (stateno, symbol);
  D.3853 = (short int) D.3852;
  *D.3851 = D.3853;
  <D.3847>:
  j = j + 1;
  <D.3466>:
  if (j < k) goto <D.3465>; else goto <D.3467>;
  <D.3467>:
  if (nedges != 0) goto <D.3854>; else goto <D.3855>;
  <D.3854>:
  i.64 = (unsigned int) i;
  D.3856 = i.64 * 4;
  D.3857 = reads + D.3856;
  D.3858 = nedges + 1;
  D.3859 = (unsigned int) D.3858;
  D.3860 = D.3859 * 2;
  rp = allocate (D.3860);
  *D.3857 = rp;
  j = 0;
  goto <D.3469>;
  <D.3468>:
  j.73 = (unsigned int) j;
  D.3862 = j.73 * 2;
  D.3863 = rp + D.3862;
  j.73 = (unsigned int) j;
  D.3862 = j.73 * 2;
  D.3864 = edge + D.3862;
  D.3865 = *D.3864;
  *D.3863 = D.3865;
  j = j + 1;
  <D.3469>:
  if (j < nedges) goto <D.3468>; else goto <D.3470>;
  <D.3470>:
  nedges.74 = (unsigned int) nedges;
  D.3867 = nedges.74 * 2;
  D.3868 = rp + D.3867;
  *D.3868 = -1;
  nedges = 0;
  <D.3855>:
  <D.3824>:
  tokensetsize.59 = tokensetsize;
  tokensetsize.75 = (unsigned int) tokensetsize.59;
  D.3870 = tokensetsize.75 * 4;
  rowp = rowp + D.3870;
  i = i + 1;
  <D.3472>:
  ngotos.58 = ngotos;
  if (i < ngotos.58) goto <D.3471>; else goto <D.3473>;
  <D.3473>:
  F.76 = F;
  F.76 = F;
  D.3872 = *F.76;
  D.3873 = D.3872 | 1;
  *F.76 = D.3873;
  digraph (reads);
  i = 0;
  goto <D.3476>;
  <D.3475>:
  i.64 = (unsigned int) i;
  D.3856 = i.64 * 4;
  D.3857 = reads + D.3856;
  D.3874 = *D.3857;
  if (D.3874 != 0B) goto <D.3875>; else goto <D.3876>;
  <D.3875>:
  i.64 = (unsigned int) i;
  D.3856 = i.64 * 4;
  D.3857 = reads + D.3856;
  D.3874 = *D.3857;
  free (D.3874);
  <D.3876>:
  i = i + 1;
  <D.3476>:
  ngotos.58 = ngotos;
  if (i < ngotos.58) goto <D.3475>; else goto <D.3477>;
  <D.3477>:
  free (reads);
  free (edge);
}


build_relations ()
{
  int ngotos.77;
  unsigned int ngotos.78;
  unsigned int D.3879;
  char * includes.79;
  int D.3881;
  unsigned int D.3882;
  unsigned int D.3883;
  int maxrhs.80;
  int D.3885;
  unsigned int D.3886;
  unsigned int D.3887;
  short int * from_state.81;
  unsigned int i.82;
  unsigned int D.3890;
  short int * D.3891;
  short int D.3892;
  short int * accessing_symbol.83;
  short int * to_state.84;
  short int * D.3895;
  short int D.3896;
  unsigned int D.3897;
  unsigned int D.3898;
  short int * D.3899;
  short int D.3900;
  short int * * derives.85;
  unsigned int symbol1.86;
  unsigned int D.3903;
  short int * * D.3904;
  short int D.3905;
  short int * ritem.87;
  short int * rrhs.88;
  short int D.3908;
  unsigned int D.3909;
  unsigned int D.3910;
  short int * D.3911;
  short int D.3912;
  unsigned int D.3913;
  unsigned int D.3914;
  short int D.3915;
  struct shifts * * shift_table.89;
  unsigned int stateno.90;
  unsigned int D.3918;
  struct shifts * * D.3919;
  short int D.3920;
  short int D.3921;
  unsigned int D.3922;
  short int * D.3923;
  short int D.3924;
  int D.3925;
  int length.91;
  unsigned int length.92;
  unsigned int D.3929;
  short int * D.3930;
  short int D.3931;
  int D.3932;
  int D.3933;
  int start_symbol.93;
  unsigned int length.94;
  unsigned int D.3938;
  short int * D.3939;
  short int D.3940;
  int nedges.95;
  unsigned int nedges.96;
  unsigned int D.3943;
  short int * D.3944;
  int D.3945;
  short int D.3946;
  char * nullable.97;
  sizetype D.3948;
  char * D.3949;
  char D.3950;
  short int * * includes.98;
  unsigned int D.3958;
  short int * * D.3959;
  int D.3960;
  unsigned int D.3961;
  unsigned int D.3962;
  unsigned int j.99;
  unsigned int D.3964;
  short int * D.3965;
  short int * D.3966;
  short int D.3967;
  unsigned int nedges.100;
  unsigned int D.3969;
  short int * D.3970;
  short int * D.3971;
  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.77 = ngotos;
  ngotos.78 = (unsigned int) ngotos.77;
  D.3879 = ngotos.78 * 4;
  includes.79 = allocate (D.3879);
  includes = includes.79;
  ngotos.77 = ngotos;
  D.3881 = ngotos.77 + 1;
  D.3882 = (unsigned int) D.3881;
  D.3883 = D.3882 * 2;
  edge = allocate (D.3883);
  maxrhs.80 = maxrhs;
  D.3885 = maxrhs.80 + 1;
  D.3886 = (unsigned int) D.3885;
  D.3887 = D.3886 * 2;
  states = allocate (D.3887);
  i = 0;
  goto <D.3516>;
  <D.3515>:
  nedges = 0;
  from_state.81 = from_state;
  i.82 = (unsigned int) i;
  D.3890 = i.82 * 2;
  D.3891 = from_state.81 + D.3890;
  D.3892 = *D.3891;
  state1 = (int) D.3892;
  accessing_symbol.83 = accessing_symbol;
  to_state.84 = to_state;
  i.82 = (unsigned int) i;
  D.3890 = i.82 * 2;
  D.3895 = to_state.84 + D.3890;
  D.3896 = *D.3895;
  D.3897 = (unsigned int) D.3896;
  D.3898 = D.3897 * 2;
  D.3899 = accessing_symbol.83 + D.3898;
  D.3900 = *D.3899;
  symbol1 = (int) D.3900;
  derives.85 = derives;
  symbol1.86 = (unsigned int) symbol1;
  D.3903 = symbol1.86 * 4;
  D.3904 = derives.85 + D.3903;
  rulep = *D.3904;
  goto <D.3510>;
  <D.3509>:
  {
    extern int add_lookback_edge ();

    length = 1;
    D.3905 = (short int) state1;
    *states = D.3905;
    stateno = state1;
    ritem.87 = ritem;
    rrhs.88 = rrhs;
    D.3908 = *rulep;
    D.3909 = (unsigned int) D.3908;
    D.3910 = D.3909 * 2;
    D.3911 = rrhs.88 + D.3910;
    D.3912 = *D.3911;
    D.3913 = (unsigned int) D.3912;
    D.3914 = D.3913 * 2;
    rp = ritem.87 + D.3914;
    goto <D.3502>;
    <D.3501>:
    D.3915 = *rp;
    symbol2 = (int) D.3915;
    shift_table.89 = shift_table;
    stateno.90 = (unsigned int) stateno;
    D.3918 = stateno.90 * 4;
    D.3919 = shift_table.89 + D.3918;
    sp = *D.3919;
    D.3920 = sp->nshifts;
    k = (int) D.3920;
    j = 0;
    goto <D.3500>;
    <D.3499>:
    D.3921 = sp->shift[j];
    stateno = (int) D.3921;
    accessing_symbol.83 = accessing_symbol;
    stateno.90 = (unsigned int) stateno;
    D.3922 = stateno.90 * 2;
    D.3923 = accessing_symbol.83 + D.3922;
    D.3924 = *D.3923;
    D.3925 = (int) D.3924;
    if (D.3925 == symbol2) goto <D.3498>; else goto <D.3926>;
    <D.3926>:
    j = j + 1;
    <D.3500>:
    if (j < k) goto <D.3499>; else goto <D.3498>;
    <D.3498>:
    length.91 = length;
    length = length.91 + 1;
    length.92 = (unsigned int) length.91;
    D.3929 = length.92 * 2;
    D.3930 = states + D.3929;
    D.3931 = (short int) stateno;
    *D.3930 = D.3931;
    rp = rp + 2;
    <D.3502>:
    D.3915 = *rp;
    if (D.3915 >= 0) goto <D.3501>; else goto <D.3503>;
    <D.3503>:
    D.3908 = *rulep;
    D.3932 = (int) D.3908;
    add_lookback_edge (stateno, D.3932, i);
    length = length + -1;
    done = 0;
    goto <D.3506>;
    <D.3505>:
    done = 1;
    rp = rp + 4294967294;
    D.3915 = *rp;
    D.3933 = (int) D.3915;
    start_symbol.93 = start_symbol;
    if (D.3933 >= start_symbol.93) goto <D.3935>; else goto <D.3936>;
    <D.3935>:
    length = length + -1;
    length.94 = (unsigned int) length;
    D.3938 = length.94 * 2;
    D.3939 = states + D.3938;
    D.3940 = *D.3939;
    stateno = (int) D.3940;
    nedges.95 = nedges;
    nedges = nedges.95 + 1;
    nedges.96 = (unsigned int) nedges.95;
    D.3943 = nedges.96 * 2;
    D.3944 = edge + D.3943;
    D.3915 = *rp;
    D.3933 = (int) D.3915;
    D.3945 = map_goto (stateno, D.3933);
    D.3946 = (short int) D.3945;
    *D.3944 = D.3946;
    nullable.97 = nullable;
    D.3915 = *rp;
    D.3948 = (sizetype) D.3915;
    D.3949 = nullable.97 + D.3948;
    D.3950 = *D.3949;
    if (D.3950 != 0) goto <D.3951>; else goto <D.3952>;
    <D.3951>:
    if (length > 0) goto <D.3953>; else goto <D.3954>;
    <D.3953>:
    done = 0;
    <D.3954>:
    <D.3952>:
    <D.3936>:
    <D.3506>:
    if (done == 0) goto <D.3505>; else goto <D.3507>;
    <D.3507>:
  }
  rulep = rulep + 2;
  <D.3510>:
  D.3908 = *rulep;
  if (D.3908 >= 0) goto <D.3509>; else goto <D.3511>;
  <D.3511>:
  if (nedges != 0) goto <D.3955>; else goto <D.3956>;
  <D.3955>:
  includes.98 = includes;
  i.82 = (unsigned int) i;
  D.3958 = i.82 * 4;
  D.3959 = includes.98 + D.3958;
  D.3960 = nedges + 1;
  D.3961 = (unsigned int) D.3960;
  D.3962 = D.3961 * 2;
  shortp = allocate (D.3962);
  *D.3959 = shortp;
  j = 0;
  goto <D.3513>;
  <D.3512>:
  j.99 = (unsigned int) j;
  D.3964 = j.99 * 2;
  D.3965 = shortp + D.3964;
  j.99 = (unsigned int) j;
  D.3964 = j.99 * 2;
  D.3966 = edge + D.3964;
  D.3967 = *D.3966;
  *D.3965 = D.3967;
  j = j + 1;
  <D.3513>:
  if (j < nedges) goto <D.3512>; else goto <D.3514>;
  <D.3514>:
  nedges.100 = (unsigned int) nedges;
  D.3969 = nedges.100 * 2;
  D.3970 = shortp + D.3969;
  *D.3970 = -1;
  <D.3956>:
  i = i + 1;
  <D.3516>:
  ngotos.77 = ngotos;
  if (i < ngotos.77) goto <D.3515>; else goto <D.3517>;
  <D.3517>:
  ngotos.77 = ngotos;
  includes.98 = includes;
  new_includes = transpose (includes.98, ngotos.77);
  i = 0;
  goto <D.3519>;
  <D.3518>:
  includes.98 = includes;
  i.82 = (unsigned int) i;
  D.3958 = i.82 * 4;
  D.3959 = includes.98 + D.3958;
  D.3971 = *D.3959;
  if (D.3971 != 0B) goto <D.3972>; else goto <D.3973>;
  <D.3972>:
  includes.98 = includes;
  i.82 = (unsigned int) i;
  D.3958 = i.82 * 4;
  D.3959 = includes.98 + D.3958;
  D.3971 = *D.3959;
  free (D.3971);
  <D.3973>:
  i = i + 1;
  <D.3519>:
  ngotos.77 = ngotos;
  if (i < ngotos.77) goto <D.3518>; else goto <D.3520>;
  <D.3520>:
  includes.98 = includes;
  free (includes.98);
  includes = new_includes;
  free (edge);
  free (states);
}


add_lookback_edge (int stateno, int ruleno, int gotono)
{
  short int * lookaheads.101;
  unsigned int stateno.102;
  unsigned int D.3976;
  short int * D.3977;
  short int D.3978;
  sizetype stateno.103;
  sizetype D.3980;
  sizetype D.3981;
  short int * D.3982;
  short int D.3983;
  short int * LAruleno.104;
  unsigned int i.105;
  unsigned int D.3986;
  short int * D.3987;
  short int D.3988;
  int D.3989;
  _Bool D.3993;
  _Bool D.3994;
  _Bool D.3995;
  struct shorts * * lookback.106;
  unsigned int D.3999;
  struct shorts * * D.4000;
  struct shorts * D.4001;
  short int D.4002;
  register int i;
  register int k;
  register int found;
  register struct shorts * sp;
  static const char __PRETTY_FUNCTION__[18] = "add_lookback_edge";

  lookaheads.101 = lookaheads;
  stateno.102 = (unsigned int) stateno;
  D.3976 = stateno.102 * 2;
  D.3977 = lookaheads.101 + D.3976;
  D.3978 = *D.3977;
  i = (int) D.3978;
  lookaheads.101 = lookaheads;
  stateno.103 = (sizetype) stateno;
  D.3980 = stateno.103 + 1;
  D.3981 = D.3980 * 2;
  D.3982 = lookaheads.101 + D.3981;
  D.3983 = *D.3982;
  k = (int) D.3983;
  found = 0;
  goto <D.3531>;
  <D.3530>:
  LAruleno.104 = LAruleno;
  i.105 = (unsigned int) i;
  D.3986 = i.105 * 2;
  D.3987 = LAruleno.104 + D.3986;
  D.3988 = *D.3987;
  D.3989 = (int) D.3988;
  if (D.3989 == ruleno) goto <D.3990>; else goto <D.3991>;
  <D.3990>:
  found = 1;
  goto <D.3992>;
  <D.3991>:
  i = i + 1;
  <D.3992>:
  <D.3531>:
  D.3993 = found == 0;
  D.3994 = i < k;
  D.3995 = D.3993 & D.3994;
  if (D.3995 != 0) goto <D.3530>; else goto <D.3532>;
  <D.3532>:
  if (found == 0) goto <D.3996>; else goto <D.3997>;
  <D.3996>:
  __assert_fail ("found", "lalr.c", 489, &__PRETTY_FUNCTION__);
  <D.3997>:
  sp = allocate (8);
  lookback.106 = lookback;
  i.105 = (unsigned int) i;
  D.3999 = i.105 * 4;
  D.4000 = lookback.106 + D.3999;
  D.4001 = *D.4000;
  sp->next = D.4001;
  D.4002 = (short int) gotono;
  sp->value = D.4002;
  lookback.106 = lookback;
  i.105 = (unsigned int) i;
  D.3999 = i.105 * 4;
  D.4000 = lookback.106 + D.3999;
  *D.4000 = sp;
}


transpose (short int * * R, int n)
{
  unsigned int n.107;
  unsigned int D.4004;
  unsigned int i.108;
  unsigned int D.4006;
  short int * * D.4007;
  short int * sp.109;
  short int D.4011;
  unsigned int D.4012;
  unsigned int D.4013;
  short int * D.4014;
  short int D.4015;
  short int D.4016;
  unsigned short D.4017;
  unsigned short D.4018;
  short int D.4019;
  short int D.4020;
  unsigned int D.4021;
  unsigned int D.4022;
  short int * D.4023;
  short int D.4024;
  int D.4027;
  unsigned int D.4028;
  unsigned int D.4029;
  short int * * D.4030;
  short int * * D.4031;
  unsigned int k.110;
  unsigned int D.4033;
  short int * D.4034;
  short int * sp.111;
  short int D.4038;
  unsigned int D.4039;
  unsigned int D.4040;
  short int * * D.4041;
  short int * D.4042;
  short int * D.4043;
  short int * D.4044;
  short int D.4045;
  short int * * D.4046;
  register short int * * new_R;
  register short int * * temp_R;
  register short int * nedges;
  register short int * sp;
  register int i;
  register int k;

  n.107 = (unsigned int) n;
  D.4004 = n.107 * 2;
  nedges = allocate (D.4004);
  i = 0;
  goto <D.3548>;
  <D.3547>:
  i.108 = (unsigned int) i;
  D.4006 = i.108 * 4;
  D.4007 = R + D.4006;
  sp = *D.4007;
  if (sp != 0B) goto <D.4008>; else goto <D.4009>;
  <D.4008>:
  goto <D.3545>;
  <D.3544>:
  sp.109 = sp;
  sp = sp.109 + 2;
  D.4011 = *sp.109;
  D.4012 = (unsigned int) D.4011;
  D.4013 = D.4012 * 2;
  D.4014 = nedges + D.4013;
  D.4015 = *D.4014;
  D.4016 = D.4015;
  D.4017 = (unsigned short) D.4016;
  D.4018 = D.4017 + 1;
  D.4019 = (short int) D.4018;
  *D.4014 = D.4019;
  <D.3545>:
  D.4020 = *sp;
  if (D.4020 >= 0) goto <D.3544>; else goto <D.3546>;
  <D.3546>:
  <D.4009>:
  i = i + 1;
  <D.3548>:
  if (i < n) goto <D.3547>; else goto <D.3549>;
  <D.3549>:
  n.107 = (unsigned int) n;
  D.4021 = n.107 * 4;
  new_R = allocate (D.4021);
  n.107 = (unsigned int) n;
  D.4021 = n.107 * 4;
  temp_R = allocate (D.4021);
  i = 0;
  goto <D.3551>;
  <D.3550>:
  i.108 = (unsigned int) i;
  D.4022 = i.108 * 2;
  D.4023 = nedges + D.4022;
  D.4024 = *D.4023;
  k = (int) D.4024;
  if (k > 0) goto <D.4025>; else goto <D.4026>;
  <D.4025>:
  D.4027 = k + 1;
  D.4028 = (unsigned int) D.4027;
  D.4029 = D.4028 * 2;
  sp = allocate (D.4029);
  i.108 = (unsigned int) i;
  D.4006 = i.108 * 4;
  D.4030 = new_R + D.4006;
  *D.4030 = sp;
  i.108 = (unsigned int) i;
  D.4006 = i.108 * 4;
  D.4031 = temp_R + D.4006;
  *D.4031 = sp;
  k.110 = (unsigned int) k;
  D.4033 = k.110 * 2;
  D.4034 = sp + D.4033;
  *D.4034 = -1;
  <D.4026>:
  i = i + 1;
  <D.3551>:
  if (i < n) goto <D.3550>; else goto <D.3552>;
  <D.3552>:
  free (nedges);
  i = 0;
  goto <D.3557>;
  <D.3556>:
  i.108 = (unsigned int) i;
  D.4006 = i.108 * 4;
  D.4007 = R + D.4006;
  sp = *D.4007;
  if (sp != 0B) goto <D.4035>; else goto <D.4036>;
  <D.4035>:
  goto <D.3554>;
  <D.3553>:
  sp.111 = sp;
  sp = sp.111 + 2;
  D.4038 = *sp.111;
  D.4039 = (unsigned int) D.4038;
  D.4040 = D.4039 * 4;
  D.4041 = temp_R + D.4040;
  D.4042 = *D.4041;
  D.4043 = D.4042;
  D.4044 = D.4043 + 2;
  *D.4041 = D.4044;
  D.4045 = (short int) i;
  *D.4043 = D.4045;
  <D.3554>:
  D.4020 = *sp;
  if (D.4020 >= 0) goto <D.3553>; else goto <D.3555>;
  <D.3555>:
  <D.4036>:
  i = i + 1;
  <D.3557>:
  if (i < n) goto <D.3556>; else goto <D.3558>;
  <D.3558>:
  free (temp_R);
  D.4046 = new_R;
  return D.4046;
}


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

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


compute_lookaheads ()
{
  short int * lookaheads.113;
  int nstates.114;
  unsigned int nstates.115;
  unsigned int D.4052;
  short int * D.4053;
  short int D.4054;
  int tokensetsize.116;
  unsigned int tokensetsize.117;
  unsigned int D.4057;
  struct shorts * * lookback.118;
  unsigned int i.119;
  unsigned int D.4060;
  struct shorts * * D.4061;
  unsigned int * F.120;
  short int D.4063;
  int D.4064;
  int D.4065;
  unsigned int D.4066;
  unsigned int D.4067;
  unsigned int * fp2.121;
  unsigned int D.4069;
  unsigned int * fp1.122;
  unsigned int * fp1.123;
  unsigned int D.4072;
  unsigned int D.4073;
  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.113 = lookaheads;
  nstates.114 = nstates;
  nstates.115 = (unsigned int) nstates.114;
  D.4052 = nstates.115 * 2;
  D.4053 = lookaheads.113 + D.4052;
  D.4054 = *D.4053;
  n = (int) D.4054;
  i = 0;
  goto <D.3579>;
  <D.3578>:
  tokensetsize.116 = tokensetsize;
  tokensetsize.117 = (unsigned int) tokensetsize.116;
  D.4057 = tokensetsize.117 * 4;
  fp3 = rowp + D.4057;
  lookback.118 = lookback;
  i.119 = (unsigned int) i;
  D.4060 = i.119 * 4;
  D.4061 = lookback.118 + D.4060;
  sp = *D.4061;
  goto <D.3576>;
  <D.3575>:
  fp1 = rowp;
  F.120 = F;
  D.4063 = sp->value;
  D.4064 = (int) D.4063;
  tokensetsize.116 = tokensetsize;
  D.4065 = D.4064 * tokensetsize.116;
  D.4066 = (unsigned int) D.4065;
  D.4067 = D.4066 * 4;
  fp2 = F.120 + D.4067;
  goto <D.3573>;
  <D.3572>:
  fp2.121 = fp2;
  fp2 = fp2.121 + 4;
  D.4069 = *fp2.121;
  fp1.122 = fp1;
  fp1 = fp1.122 + 4;
  fp1.123 = fp1.122;
  D.4072 = *fp1.123;
  D.4073 = D.4072 | D.4069;
  *fp1.123 = D.4073;
  <D.3573>:
  if (fp1 < fp3) goto <D.3572>; else goto <D.3574>;
  <D.3574>:
  sp = sp->next;
  <D.3576>:
  if (sp != 0B) goto <D.3575>; else goto <D.3577>;
  <D.3577>:
  rowp = fp3;
  i = i + 1;
  <D.3579>:
  if (i < n) goto <D.3578>; else goto <D.3580>;
  <D.3580>:
  i = 0;
  goto <D.3585>;
  <D.3584>:
  lookback.118 = lookback;
  i.119 = (unsigned int) i;
  D.4060 = i.119 * 4;
  D.4061 = lookback.118 + D.4060;
  sp = *D.4061;
  goto <D.3582>;
  <D.3581>:
  next = sp->next;
  free (sp);
  sp = next;
  <D.3582>:
  if (sp != 0B) goto <D.3581>; else goto <D.3583>;
  <D.3583>:
  i = i + 1;
  <D.3585>:
  if (i < n) goto <D.3584>; else goto <D.3586>;
  <D.3586>:
  lookback.118 = lookback;
  free (lookback.118);
  F.120 = F;
  free (F.120);
}


digraph (short int * * relation)
{
  int ngotos.124;
  int infinity.125;
  int D.4076;
  unsigned int D.4077;
  unsigned int D.4078;
  char * INDEX.126;
  char * VERTICES.127;
  short int * INDEX.128;
  unsigned int i.129;
  unsigned int D.4083;
  short int * D.4084;
  short int D.4085;
  short int * * R.130;
  unsigned int D.4089;
  short int * * D.4090;
  short int * D.4091;
  short int * VERTICES.131;
  register int i;

  ngotos.124 = ngotos;
  infinity.125 = ngotos.124 + 2;
  infinity = infinity.125;
  ngotos.124 = ngotos;
  D.4076 = ngotos.124 + 1;
  D.4077 = (unsigned int) D.4076;
  D.4078 = D.4077 * 2;
  INDEX.126 = allocate (D.4078);
  INDEX = INDEX.126;
  ngotos.124 = ngotos;
  D.4076 = ngotos.124 + 1;
  D.4077 = (unsigned int) D.4076;
  D.4078 = D.4077 * 2;
  VERTICES.127 = allocate (D.4078);
  VERTICES = VERTICES.127;
  top = 0;
  R = relation;
  i = 0;
  goto <D.3592>;
  <D.3591>:
  INDEX.128 = INDEX;
  i.129 = (unsigned int) i;
  D.4083 = i.129 * 2;
  D.4084 = INDEX.128 + D.4083;
  *D.4084 = 0;
  i = i + 1;
  <D.3592>:
  ngotos.124 = ngotos;
  if (i < ngotos.124) goto <D.3591>; else goto <D.3593>;
  <D.3593>:
  i = 0;
  goto <D.3597>;
  <D.3596>:
  {
    extern int traverse ();

    INDEX.128 = INDEX;
    i.129 = (unsigned int) i;
    D.4083 = i.129 * 2;
    D.4084 = INDEX.128 + D.4083;
    D.4085 = *D.4084;
    if (D.4085 == 0) goto <D.4086>; else goto <D.4087>;
    <D.4086>:
    R.130 = R;
    i.129 = (unsigned int) i;
    D.4089 = i.129 * 4;
    D.4090 = R.130 + D.4089;
    D.4091 = *D.4090;
    if (D.4091 != 0B) goto <D.4092>; else goto <D.4093>;
    <D.4092>:
    traverse (i);
    <D.4093>:
    <D.4087>:
  }
  i = i + 1;
  <D.3597>:
  ngotos.124 = ngotos;
  if (i < ngotos.124) goto <D.3596>; else goto <D.3598>;
  <D.3598>:
  INDEX.128 = INDEX;
  free (INDEX.128);
  VERTICES.131 = VERTICES;
  free (VERTICES.131);
}


traverse (int i)
{
  short int * VERTICES.132;
  int top.133;
  int top.134;
  unsigned int top.135;
  unsigned int D.4099;
  short int * D.4100;
  short int D.4101;
  short int * INDEX.136;
  unsigned int i.137;
  unsigned int D.4104;
  short int * D.4105;
  short int D.4106;
  unsigned int * F.138;
  int tokensetsize.139;
  int D.4109;
  unsigned int D.4110;
  unsigned int D.4111;
  unsigned int tokensetsize.140;
  unsigned int D.4113;
  short int * * R.141;
  unsigned int D.4115;
  short int * * D.4116;
  unsigned int j.142;
  unsigned int D.4120;
  short int * D.4121;
  short int D.4122;
  short int D.4125;
  int D.4128;
  unsigned int D.4129;
  unsigned int D.4130;
  unsigned int * fp2.143;
  unsigned int D.4132;
  unsigned int * fp1.144;
  unsigned int * fp1.145;
  unsigned int D.4135;
  unsigned int D.4136;
  short int * rp.146;
  short int D.4138;
  int D.4139;
  int top.147;
  int top.148;
  unsigned int top.149;
  unsigned int D.4145;
  short int * D.4146;
  short int D.4147;
  int infinity.150;
  short int D.4149;
  unsigned int * fp2.151;
  unsigned int * fp1.152;
  unsigned int D.4153;
  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.132 = VERTICES;
  top.133 = top;
  top.134 = top.133 + 1;
  top = top.134;
  top.133 = top;
  top.135 = (unsigned int) top.133;
  D.4099 = top.135 * 2;
  D.4100 = VERTICES.132 + D.4099;
  D.4101 = (short int) i;
  *D.4100 = D.4101;
  INDEX.136 = INDEX;
  i.137 = (unsigned int) i;
  D.4104 = i.137 * 2;
  D.4105 = INDEX.136 + D.4104;
  height = top;
  D.4106 = (short int) height;
  *D.4105 = D.4106;
  F.138 = F;
  tokensetsize.139 = tokensetsize;
  D.4109 = i * tokensetsize.139;
  D.4110 = (unsigned int) D.4109;
  D.4111 = D.4110 * 4;
  base = F.138 + D.4111;
  tokensetsize.139 = tokensetsize;
  tokensetsize.140 = (unsigned int) tokensetsize.139;
  D.4113 = tokensetsize.140 * 4;
  fp3 = base + D.4113;
  R.141 = R;
  i.137 = (unsigned int) i;
  D.4115 = i.137 * 4;
  D.4116 = R.141 + D.4115;
  rp = *D.4116;
  if (rp != 0B) goto <D.4117>; else goto <D.4118>;
  <D.4117>:
  goto <D.3613>;
  <D.3612>:
  INDEX.136 = INDEX;
  j.142 = (unsigned int) j;
  D.4120 = j.142 * 2;
  D.4121 = INDEX.136 + D.4120;
  D.4122 = *D.4121;
  if (D.4122 == 0) goto <D.4123>; else goto <D.4124>;
  <D.4123>:
  traverse (j);
  <D.4124>:
  INDEX.136 = INDEX;
  i.137 = (unsigned int) i;
  D.4104 = i.137 * 2;
  D.4105 = INDEX.136 + D.4104;
  D.4125 = *D.4105;
  INDEX.136 = INDEX;
  j.142 = (unsigned int) j;
  D.4120 = j.142 * 2;
  D.4121 = INDEX.136 + D.4120;
  D.4122 = *D.4121;
  if (D.4125 > D.4122) goto <D.4126>; else goto <D.4127>;
  <D.4126>:
  INDEX.136 = INDEX;
  i.137 = (unsigned int) i;
  D.4104 = i.137 * 2;
  D.4105 = INDEX.136 + D.4104;
  INDEX.136 = INDEX;
  j.142 = (unsigned int) j;
  D.4120 = j.142 * 2;
  D.4121 = INDEX.136 + D.4120;
  D.4122 = *D.4121;
  *D.4105 = D.4122;
  <D.4127>:
  fp1 = base;
  F.138 = F;
  tokensetsize.139 = tokensetsize;
  D.4128 = j * tokensetsize.139;
  D.4129 = (unsigned int) D.4128;
  D.4130 = D.4129 * 4;
  fp2 = F.138 + D.4130;
  goto <D.3610>;
  <D.3609>:
  fp2.143 = fp2;
  fp2 = fp2.143 + 4;
  D.4132 = *fp2.143;
  fp1.144 = fp1;
  fp1 = fp1.144 + 4;
  fp1.145 = fp1.144;
  D.4135 = *fp1.145;
  D.4136 = D.4135 | D.4132;
  *fp1.145 = D.4136;
  <D.3610>:
  if (fp1 < fp3) goto <D.3609>; else goto <D.3611>;
  <D.3611>:
  <D.3613>:
  rp.146 = rp;
  rp = rp.146 + 2;
  D.4138 = *rp.146;
  j = (int) D.4138;
  if (j >= 0) goto <D.3612>; else goto <D.3614>;
  <D.3614>:
  <D.4118>:
  INDEX.136 = INDEX;
  i.137 = (unsigned int) i;
  D.4104 = i.137 * 2;
  D.4105 = INDEX.136 + D.4104;
  D.4125 = *D.4105;
  D.4139 = (int) D.4125;
  if (D.4139 == height) goto <D.4140>; else goto <D.4141>;
  <D.4140>:
  <D.3619>:
  VERTICES.132 = VERTICES;
  top.133 = top;
  top.147 = top.133;
  top.148 = top.147 + -1;
  top = top.148;
  top.149 = (unsigned int) top.147;
  D.4145 = top.149 * 2;
  D.4146 = VERTICES.132 + D.4145;
  D.4147 = *D.4146;
  j = (int) D.4147;
  INDEX.136 = INDEX;
  j.142 = (unsigned int) j;
  D.4120 = j.142 * 2;
  D.4121 = INDEX.136 + D.4120;
  infinity.150 = infinity;
  D.4149 = (short int) infinity.150;
  *D.4121 = D.4149;
  if (i == j) goto <D.3615>; else goto <D.4150>;
  <D.4150>:
  fp1 = base;
  F.138 = F;
  tokensetsize.139 = tokensetsize;
  D.4128 = j * tokensetsize.139;
  D.4129 = (unsigned int) D.4128;
  D.4130 = D.4129 * 4;
  fp2 = F.138 + D.4130;
  goto <D.3617>;
  <D.3616>:
  fp2.151 = fp2;
  fp2 = fp2.151 + 4;
  fp1.152 = fp1;
  fp1 = fp1.152 + 4;
  D.4153 = *fp1.152;
  *fp2.151 = D.4153;
  <D.3617>:
  if (fp1 < fp3) goto <D.3616>; else goto <D.3618>;
  <D.3618>:
  goto <D.3619>;
  <D.3615>:
  <D.4141>:
}


