allocate_itemsets ()
{
  int nsyms.0;
  unsigned int nsyms.1;
  unsigned int D.3552;
  short int * ritem.2;
  int nitems.3;
  unsigned int nitems.4;
  unsigned int D.3556;
  short int D.3557;
  unsigned int symbol.5;
  unsigned int D.3561;
  short int * D.3562;
  short int D.3563;
  short int D.3564;
  unsigned short D.3565;
  unsigned short D.3566;
  short int D.3567;
  unsigned int D.3568;
  char * kernel_base.6;
  unsigned int count.7;
  unsigned int D.3571;
  char * kernel_items.8;
  short int * * kernel_base.9;
  unsigned int i.10;
  unsigned int D.3575;
  short int * * D.3576;
  short int * kernel_items.11;
  short int * D.3578;
  unsigned int D.3579;
  short int * D.3580;
  short int D.3581;
  int D.3582;
  char * kernel_end.12;
  register short int * itemp;
  register short int * item_end;
  register int symbol;
  register int i;
  register int count;
  register int max;
  register short int * symbol_count;

  count = 0;
  nsyms.0 = nsyms;
  nsyms.1 = (unsigned int) nsyms.0;
  D.3552 = nsyms.1 * 2;
  symbol_count = allocate (D.3552);
  ritem.2 = ritem;
  nitems.3 = nitems;
  nitems.4 = (unsigned int) nitems.3;
  D.3556 = nitems.4 * 2;
  item_end = ritem.2 + D.3556;
  itemp = ritem;
  goto <D.3342>;
  <D.3341>:
  D.3557 = *itemp;
  symbol = (int) D.3557;
  if (symbol >= 0) goto <D.3558>; else goto <D.3559>;
  <D.3558>:
  count = count + 1;
  symbol.5 = (unsigned int) symbol;
  D.3561 = symbol.5 * 2;
  D.3562 = symbol_count + D.3561;
  D.3563 = *D.3562;
  D.3564 = D.3563;
  D.3565 = (unsigned short) D.3564;
  D.3566 = D.3565 + 1;
  D.3567 = (short int) D.3566;
  *D.3562 = D.3567;
  <D.3559>:
  itemp = itemp + 2;
  <D.3342>:
  if (itemp < item_end) goto <D.3341>; else goto <D.3343>;
  <D.3343>:
  nsyms.0 = nsyms;
  nsyms.1 = (unsigned int) nsyms.0;
  D.3568 = nsyms.1 * 4;
  kernel_base.6 = allocate (D.3568);
  kernel_base = kernel_base.6;
  count.7 = (unsigned int) count;
  D.3571 = count.7 * 2;
  kernel_items.8 = allocate (D.3571);
  kernel_items = kernel_items.8;
  count = 0;
  max = 0;
  i = 0;
  goto <D.3345>;
  <D.3344>:
  kernel_base.9 = kernel_base;
  i.10 = (unsigned int) i;
  D.3575 = i.10 * 4;
  D.3576 = kernel_base.9 + D.3575;
  kernel_items.11 = kernel_items;
  count.7 = (unsigned int) count;
  D.3571 = count.7 * 2;
  D.3578 = kernel_items.11 + D.3571;
  *D.3576 = D.3578;
  i.10 = (unsigned int) i;
  D.3579 = i.10 * 2;
  D.3580 = symbol_count + D.3579;
  D.3581 = *D.3580;
  D.3582 = (int) D.3581;
  count = D.3582 + count;
  i.10 = (unsigned int) i;
  D.3579 = i.10 * 2;
  D.3580 = symbol_count + D.3579;
  D.3581 = *D.3580;
  D.3582 = (int) D.3581;
  if (D.3582 > max) goto <D.3583>; else goto <D.3584>;
  <D.3583>:
  i.10 = (unsigned int) i;
  D.3579 = i.10 * 2;
  D.3580 = symbol_count + D.3579;
  D.3581 = *D.3580;
  max = (int) D.3581;
  <D.3584>:
  i = i + 1;
  <D.3345>:
  nsyms.0 = nsyms;
  if (i < nsyms.0) goto <D.3344>; else goto <D.3346>;
  <D.3346>:
  shift_symbol = symbol_count;
  nsyms.0 = nsyms;
  nsyms.1 = (unsigned int) nsyms.0;
  D.3568 = nsyms.1 * 4;
  kernel_end.12 = allocate (D.3568);
  kernel_end = kernel_end.12;
}


allocate_storage ()
{
  int nsyms.13;
  unsigned int nsyms.14;
  unsigned int D.3588;
  char * shiftset.15;
  int nrules.16;
  int D.3591;
  unsigned int D.3592;
  unsigned int D.3593;
  char * redset.17;
  int nitems.18;
  unsigned int nitems.19;
  unsigned int D.3597;
  char * state_set.20;

  allocate_itemsets ();
  nsyms.13 = nsyms;
  nsyms.14 = (unsigned int) nsyms.13;
  D.3588 = nsyms.14 * 2;
  shiftset.15 = allocate (D.3588);
  shiftset = shiftset.15;
  nrules.16 = nrules;
  D.3591 = nrules.16 + 1;
  D.3592 = (unsigned int) D.3591;
  D.3593 = D.3592 * 2;
  redset.17 = allocate (D.3593);
  redset = redset.17;
  nitems.18 = nitems;
  nitems.19 = (unsigned int) nitems.18;
  D.3597 = nitems.19 * 4;
  state_set.20 = allocate (D.3597);
  state_set = state_set.20;
}


append_states ()
{
  short int * shift_symbol.21;
  unsigned int i.22;
  unsigned int D.3601;
  short int * D.3602;
  short int D.3603;
  unsigned int j.23;
  unsigned int D.3605;
  short int * D.3606;
  sizetype j.24;
  sizetype D.3608;
  sizetype D.3609;
  short int * D.3610;
  short int D.3611;
  int D.3613;
  short int D.3614;
  int nshifts.25;
  short int * shiftset.26;
  short int * D.3617;
  int D.3618;
  short int D.3619;
  register int i;
  register int j;
  register int symbol;

  i = 1;
  goto <D.3358>;
  <D.3357>:
  shift_symbol.21 = shift_symbol;
  i.22 = (unsigned int) i;
  D.3601 = i.22 * 2;
  D.3602 = shift_symbol.21 + D.3601;
  D.3603 = *D.3602;
  symbol = (int) D.3603;
  j = i;
  goto <D.3355>;
  <D.3354>:
  shift_symbol.21 = shift_symbol;
  j.23 = (unsigned int) j;
  D.3605 = j.23 * 2;
  D.3606 = shift_symbol.21 + D.3605;
  shift_symbol.21 = shift_symbol;
  j.24 = (sizetype) j;
  D.3608 = j.24 + 2147483647;
  D.3609 = D.3608 * 2;
  D.3610 = shift_symbol.21 + D.3609;
  D.3611 = *D.3610;
  *D.3606 = D.3611;
  j = j + -1;
  <D.3355>:
  if (j > 0) goto <D.3612>; else goto <D.3356>;
  <D.3612>:
  shift_symbol.21 = shift_symbol;
  j.24 = (sizetype) j;
  D.3608 = j.24 + 2147483647;
  D.3609 = D.3608 * 2;
  D.3610 = shift_symbol.21 + D.3609;
  D.3611 = *D.3610;
  D.3613 = (int) D.3611;
  if (D.3613 > symbol) goto <D.3354>; else goto <D.3356>;
  <D.3356>:
  shift_symbol.21 = shift_symbol;
  j.23 = (unsigned int) j;
  D.3605 = j.23 * 2;
  D.3606 = shift_symbol.21 + D.3605;
  D.3614 = (short int) symbol;
  *D.3606 = D.3614;
  i = i + 1;
  <D.3358>:
  nshifts.25 = nshifts;
  if (i < nshifts.25) goto <D.3357>; else goto <D.3359>;
  <D.3359>:
  i = 0;
  goto <D.3361>;
  <D.3360>:
  shift_symbol.21 = shift_symbol;
  i.22 = (unsigned int) i;
  D.3601 = i.22 * 2;
  D.3602 = shift_symbol.21 + D.3601;
  D.3603 = *D.3602;
  symbol = (int) D.3603;
  shiftset.26 = shiftset;
  i.22 = (unsigned int) i;
  D.3601 = i.22 * 2;
  D.3617 = shiftset.26 + D.3601;
  D.3618 = get_state (symbol);
  D.3619 = (short int) D.3618;
  *D.3617 = D.3619;
  i = i + 1;
  <D.3361>:
  nshifts.25 = nshifts;
  if (i < nshifts.25) goto <D.3360>; else goto <D.3362>;
  <D.3362>:
}


free_storage ()
{
  short int * shift_symbol.27;
  short int * redset.28;
  short int * shiftset.29;
  short int * * kernel_base.30;
  short int * * kernel_end.31;
  short int * kernel_items.32;
  struct core * * state_set.33;

  shift_symbol.27 = shift_symbol;
  free (shift_symbol.27);
  redset.28 = redset;
  free (redset.28);
  shiftset.29 = shiftset;
  free (shiftset.29);
  kernel_base.30 = kernel_base;
  free (kernel_base.30);
  kernel_end.31 = kernel_end;
  free (kernel_end.31);
  kernel_items.32 = kernel_items;
  free (kernel_items.32);
  state_set.33 = state_set;
  free (state_set.33);
}


generate_states ()
{
  int nitems.34;
  unsigned int nitems.35;
  unsigned int D.3629;
  char * itemset.36;
  int nrules.37;
  int D.3632;
  int D.3633;
  unsigned int D.3634;
  unsigned int D.3635;
  char * ruleset.38;
  struct core * this_state.39;
  short int D.3638;
  int D.3639;
  short int[1] * D.3640;
  int nshifts.40;
  struct core * this_state.41;
  extern int set_first_derives ();
  extern int initialize_states ();
  extern int finalize_closure ();

  allocate_storage ();
  nitems.34 = nitems;
  nitems.35 = (unsigned int) nitems.34;
  D.3629 = nitems.35 * 2;
  itemset.36 = allocate (D.3629);
  itemset = itemset.36;
  nrules.37 = nrules;
  D.3632 = nrules.37 + 31;
  D.3633 = D.3632 / 32;
  D.3634 = (unsigned int) D.3633;
  D.3635 = D.3634 * 4;
  ruleset.38 = allocate (D.3635);
  ruleset = ruleset.38;
  set_first_derives ();
  initialize_states ();
  goto <D.3378>;
  <D.3377>:
  {
    extern int closure ();
    extern int save_reductions ();
    extern int new_itemsets ();
    extern int save_shifts ();

    this_state.39 = this_state;
    D.3638 = this_state.39->nitems;
    D.3639 = (int) D.3638;
    this_state.39 = this_state;
    D.3640 = &this_state.39->items;
    closure (D.3640, D.3639);
    save_reductions ();
    new_itemsets ();
    append_states ();
    nshifts.40 = nshifts;
    if (nshifts.40 > 0) goto <D.3642>; else goto <D.3643>;
    <D.3642>:
    save_shifts ();
    <D.3643>:
    this_state.39 = this_state;
    this_state.41 = this_state.39->next;
    this_state = this_state.41;
  }
  <D.3378>:
  this_state.39 = this_state;
  if (this_state.39 != 0B) goto <D.3377>; else goto <D.3379>;
  <D.3379>:
  finalize_closure ();
  free_storage ();
}


get_state (int symbol)
{
  short int * * kernel_base.42;
  unsigned int symbol.43;
  unsigned int D.3647;
  short int * * D.3648;
  short int * * kernel_end.44;
  short int * * D.3650;
  int iend.45;
  int isp1.46;
  int D.3653;
  short int D.3654;
  int nitems.47;
  struct core * * state_set.48;
  unsigned int key.49;
  unsigned int D.3661;
  struct core * * D.3662;
  short int D.3665;
  int D.3666;
  short int * isp1.50;
  short int D.3670;
  short int * isp2.51;
  short int D.3672;
  _Bool D.3675;
  _Bool D.3676;
  _Bool D.3677;
  struct core * D.3680;
  struct core * D.3684;
  int D.3686;
  short int D.3687;
  register int key;
  register short int * isp1;
  register short int * isp2;
  register short int * iend;
  register struct core * sp;
  register int found;
  register int n;
  static const char __PRETTY_FUNCTION__[10] = "get_state";

  kernel_base.42 = kernel_base;
  symbol.43 = (unsigned int) symbol;
  D.3647 = symbol.43 * 4;
  D.3648 = kernel_base.42 + D.3647;
  isp1 = *D.3648;
  kernel_end.44 = kernel_end;
  symbol.43 = (unsigned int) symbol;
  D.3647 = symbol.43 * 4;
  D.3650 = kernel_end.44 + D.3647;
  iend = *D.3650;
  iend.45 = (int) iend;
  isp1.46 = (int) isp1;
  D.3653 = iend.45 - isp1.46;
  n = D.3653 /[ex] 2;
  D.3654 = *isp1;
  key = (int) D.3654;
  if (key < 0) goto <D.3655>; else goto <D.3657>;
  <D.3657>:
  nitems.47 = nitems;
  if (key >= nitems.47) goto <D.3655>; else goto <D.3656>;
  <D.3655>:
  __assert_fail ("0 <= key && key < nitems", "lr0.c", 213, &__PRETTY_FUNCTION__);
  <D.3656>:
  state_set.48 = state_set;
  key.49 = (unsigned int) key;
  D.3661 = key.49 * 4;
  D.3662 = state_set.48 + D.3661;
  sp = *D.3662;
  if (sp != 0B) goto <D.3663>; else goto <D.3664>;
  <D.3663>:
  found = 0;
  goto <D.3399>;
  <D.3398>:
  D.3665 = sp->nitems;
  D.3666 = (int) D.3665;
  if (D.3666 == n) goto <D.3667>; else goto <D.3668>;
  <D.3667>:
  found = 1;
  kernel_base.42 = kernel_base;
  symbol.43 = (unsigned int) symbol;
  D.3647 = symbol.43 * 4;
  D.3648 = kernel_base.42 + D.3647;
  isp1 = *D.3648;
  isp2 = &sp->items;
  goto <D.3396>;
  <D.3395>:
  isp1.50 = isp1;
  isp1 = isp1.50 + 2;
  D.3670 = *isp1.50;
  isp2.51 = isp2;
  isp2 = isp2.51 + 2;
  D.3672 = *isp2.51;
  if (D.3670 != D.3672) goto <D.3673>; else goto <D.3674>;
  <D.3673>:
  found = 0;
  <D.3674>:
  <D.3396>:
  D.3675 = found != 0;
  D.3676 = isp1 < iend;
  D.3677 = D.3675 & D.3676;
  if (D.3677 != 0) goto <D.3395>; else goto <D.3397>;
  <D.3397>:
  <D.3668>:
  if (found == 0) goto <D.3678>; else goto <D.3679>;
  <D.3678>:
  D.3680 = sp->link;
  if (D.3680 != 0B) goto <D.3681>; else goto <D.3682>;
  <D.3681>:
  sp = sp->link;
  goto <D.3683>;
  <D.3682>:
  D.3684 = new_state (symbol);
  sp->link = D.3684;
  sp = sp->link;
  found = 1;
  <D.3683>:
  <D.3679>:
  <D.3399>:
  if (found == 0) goto <D.3398>; else goto <D.3400>;
  <D.3400>:
  goto <D.3685>;
  <D.3664>:
  state_set.48 = state_set;
  key.49 = (unsigned int) key;
  D.3661 = key.49 * 4;
  D.3662 = state_set.48 + D.3661;
  sp = new_state (symbol);
  *D.3662 = sp;
  <D.3685>:
  D.3687 = sp->number;
  D.3686 = (int) D.3687;
  return D.3686;
}


initialize_states ()
{
  short int * * derives.52;
  int start_symbol.53;
  unsigned int start_symbol.54;
  unsigned int D.3692;
  short int * * D.3693;
  unsigned int i.55;
  unsigned int D.3695;
  short int * D.3696;
  short int D.3697;
  unsigned int D.3698;
  unsigned int D.3699;
  short int D.3702;
  short int * rrhs.56;
  unsigned int D.3704;
  unsigned int D.3705;
  short int * D.3706;
  short int D.3707;
  struct core * this_state.57;
  struct core * last_state.58;
  register int i;
  register short int * start_derives;
  register struct core * p;
  extern int no_space ();

  derives.52 = derives;
  start_symbol.53 = start_symbol;
  start_symbol.54 = (unsigned int) start_symbol.53;
  D.3692 = start_symbol.54 * 4;
  D.3693 = derives.52 + D.3692;
  start_derives = *D.3693;
  i = 0;
  goto <D.3408>;
  <D.3407>:
  // predicted unlikely by continue predictor.
  goto <D.3406>;
  <D.3406>:
  i = i + 1;
  <D.3408>:
  i.55 = (unsigned int) i;
  D.3695 = i.55 * 2;
  D.3696 = start_derives + D.3695;
  D.3697 = *D.3696;
  if (D.3697 >= 0) goto <D.3407>; else goto <D.3409>;
  <D.3409>:
  i.55 = (unsigned int) i;
  D.3698 = i.55 + 8;
  D.3699 = D.3698 * 2;
  p = malloc (D.3699);
  if (p == 0B) goto <D.3700>; else goto <D.3701>;
  <D.3700>:
  no_space ();
  <D.3701>:
  p->next = 0B;
  p->link = 0B;
  p->number = 0;
  p->accessing_symbol = 0;
  D.3702 = (short int) i;
  p->nitems = D.3702;
  i = 0;
  goto <D.3412>;
  <D.3411>:
  rrhs.56 = rrhs;
  i.55 = (unsigned int) i;
  D.3695 = i.55 * 2;
  D.3696 = start_derives + D.3695;
  D.3697 = *D.3696;
  D.3704 = (unsigned int) D.3697;
  D.3705 = D.3704 * 2;
  D.3706 = rrhs.56 + D.3705;
  D.3707 = *D.3706;
  p->items[i] = D.3707;
  i = i + 1;
  <D.3412>:
  i.55 = (unsigned int) i;
  D.3695 = i.55 * 2;
  D.3696 = start_derives + D.3695;
  D.3697 = *D.3696;
  if (D.3697 >= 0) goto <D.3411>; else goto <D.3413>;
  <D.3413>:
  this_state = p;
  this_state.57 = this_state;
  last_state = this_state.57;
  last_state.58 = last_state;
  first_state = last_state.58;
  nstates = 1;
}


new_itemsets ()
{
  short int * * kernel_end.59;
  unsigned int i.60;
  unsigned int D.3712;
  short int * * D.3713;
  int nsyms.61;
  short int * isp.62;
  short int D.3716;
  short int * ritem.63;
  unsigned int D.3718;
  short int * D.3719;
  short int D.3720;
  unsigned int symbol.64;
  unsigned int D.3724;
  short int * * D.3725;
  short int * shift_symbol.65;
  int shiftcount.66;
  unsigned int shiftcount.67;
  unsigned int D.3731;
  short int * D.3732;
  short int D.3733;
  short int * * kernel_base.68;
  short int * * D.3735;
  short int * ksp.69;
  unsigned short D.3737;
  unsigned short D.3738;
  short int D.3739;
  short int * itemsetend.70;
  register int i;
  register int shiftcount;
  register short int * isp;
  register short int * ksp;
  register int symbol;

  i = 0;
  goto <D.3423>;
  <D.3422>:
  kernel_end.59 = kernel_end;
  i.60 = (unsigned int) i;
  D.3712 = i.60 * 4;
  D.3713 = kernel_end.59 + D.3712;
  *D.3713 = 0B;
  i = i + 1;
  <D.3423>:
  nsyms.61 = nsyms;
  if (i < nsyms.61) goto <D.3422>; else goto <D.3424>;
  <D.3424>:
  shiftcount = 0;
  isp = itemset;
  goto <D.3426>;
  <D.3425>:
  isp.62 = isp;
  isp = isp.62 + 2;
  D.3716 = *isp.62;
  i = (int) D.3716;
  ritem.63 = ritem;
  i.60 = (unsigned int) i;
  D.3718 = i.60 * 2;
  D.3719 = ritem.63 + D.3718;
  D.3720 = *D.3719;
  symbol = (int) D.3720;
  if (symbol > 0) goto <D.3721>; else goto <D.3722>;
  <D.3721>:
  kernel_end.59 = kernel_end;
  symbol.64 = (unsigned int) symbol;
  D.3724 = symbol.64 * 4;
  D.3725 = kernel_end.59 + D.3724;
  ksp = *D.3725;
  if (ksp == 0B) goto <D.3726>; else goto <D.3727>;
  <D.3726>:
  shift_symbol.65 = shift_symbol;
  shiftcount.66 = shiftcount;
  shiftcount = shiftcount.66 + 1;
  shiftcount.67 = (unsigned int) shiftcount.66;
  D.3731 = shiftcount.67 * 2;
  D.3732 = shift_symbol.65 + D.3731;
  D.3733 = (short int) symbol;
  *D.3732 = D.3733;
  kernel_base.68 = kernel_base;
  symbol.64 = (unsigned int) symbol;
  D.3724 = symbol.64 * 4;
  D.3735 = kernel_base.68 + D.3724;
  ksp = *D.3735;
  <D.3727>:
  ksp.69 = ksp;
  ksp = ksp.69 + 2;
  D.3737 = (unsigned short) i;
  D.3738 = D.3737 + 1;
  D.3739 = (short int) D.3738;
  *ksp.69 = D.3739;
  kernel_end.59 = kernel_end;
  symbol.64 = (unsigned int) symbol;
  D.3724 = symbol.64 * 4;
  D.3725 = kernel_end.59 + D.3724;
  *D.3725 = ksp;
  <D.3722>:
  <D.3426>:
  itemsetend.70 = itemsetend;
  if (isp < itemsetend.70) goto <D.3425>; else goto <D.3427>;
  <D.3427>:
  nshifts = shiftcount;
}


new_state (int symbol)
{
  int nstates.71;
  short int * * kernel_base.72;
  unsigned int symbol.73;
  unsigned int D.3746;
  short int * * D.3747;
  short int * * kernel_end.74;
  short int * * D.3749;
  int iend.75;
  int isp1.76;
  int D.3752;
  unsigned int n.77;
  unsigned int D.3754;
  unsigned int D.3755;
  short int D.3756;
  short int D.3757;
  short int D.3758;
  short int * isp2.78;
  short int * isp1.79;
  short int D.3761;
  struct core * last_state.80;
  int nstates.81;
  struct core * D.3764;
  register int n;
  register struct core * p;
  register short int * isp1;
  register short int * isp2;
  register short int * iend;
  extern int fatal ();

  nstates.71 = nstates;
  if (nstates.71 > 32766) goto <D.3742>; else goto <D.3743>;
  <D.3742>:
  fatal ("too many states");
  <D.3743>:
  kernel_base.72 = kernel_base;
  symbol.73 = (unsigned int) symbol;
  D.3746 = symbol.73 * 4;
  D.3747 = kernel_base.72 + D.3746;
  isp1 = *D.3747;
  kernel_end.74 = kernel_end;
  symbol.73 = (unsigned int) symbol;
  D.3746 = symbol.73 * 4;
  D.3749 = kernel_end.74 + D.3746;
  iend = *D.3749;
  iend.75 = (int) iend;
  isp1.76 = (int) isp1;
  D.3752 = iend.75 - isp1.76;
  n = D.3752 /[ex] 2;
  n.77 = (unsigned int) n;
  D.3754 = n.77 + 7;
  D.3755 = D.3754 * 2;
  p = allocate (D.3755);
  D.3756 = (short int) symbol;
  p->accessing_symbol = D.3756;
  nstates.71 = nstates;
  D.3757 = (short int) nstates.71;
  p->number = D.3757;
  D.3758 = (short int) n;
  p->nitems = D.3758;
  isp2 = &p->items;
  goto <D.3438>;
  <D.3437>:
  isp2.78 = isp2;
  isp2 = isp2.78 + 2;
  isp1.79 = isp1;
  isp1 = isp1.79 + 2;
  D.3761 = *isp1.79;
  *isp2.78 = D.3761;
  <D.3438>:
  if (isp1 < iend) goto <D.3437>; else goto <D.3439>;
  <D.3439>:
  last_state.80 = last_state;
  last_state.80->next = p;
  last_state = p;
  nstates.71 = nstates;
  nstates.81 = nstates.71 + 1;
  nstates = nstates.81;
  D.3764 = p;
  return D.3764;
}


show_cores ()
{
  char * * symbol_name.82;
  short int D.3769;
  unsigned int D.3770;
  unsigned int D.3771;
  char * * D.3772;
  char * D.3773;
  short int D.3774;
  int D.3775;
  short int D.3776;
  short int D.3777;
  short int * ritem.83;
  unsigned int j.84;
  unsigned int D.3780;
  short int * D.3781;
  short int D.3782;
  short int * rlhs.85;
  unsigned int D.3784;
  unsigned int D.3785;
  short int * D.3786;
  short int D.3787;
  unsigned int D.3788;
  unsigned int D.3789;
  char * * D.3790;
  char * D.3791;
  short int * rrhs.86;
  short int * D.3793;
  short int D.3794;
  int j.87;
  unsigned int j.88;
  unsigned int D.3797;
  short int * D.3798;
  short int D.3799;
  unsigned int D.3800;
  unsigned int D.3801;
  char * * D.3802;
  char * D.3803;
  int j.89;
  unsigned int j.90;
  unsigned int D.3806;
  short int * D.3807;
  short int D.3808;
  unsigned int D.3809;
  unsigned int D.3810;
  char * * D.3811;
  char * D.3812;
  struct _IO_FILE * stdout.91;
  struct core * p;
  int i;
  int j;
  int k;
  int n;
  int itemno;

  k = 0;
  p = first_state;
  goto <D.3462>;
  <D.3461>:
  if (k != 0) goto <D.3766>; else goto <D.3767>;
  <D.3766>:
  printf ("\n");
  <D.3767>:
  symbol_name.82 = symbol_name;
  D.3769 = p->accessing_symbol;
  D.3770 = (unsigned int) D.3769;
  D.3771 = D.3770 * 4;
  D.3772 = symbol_name.82 + D.3771;
  D.3773 = *D.3772;
  D.3774 = p->number;
  D.3775 = (int) D.3774;
  printf ("state %d, number = %d, accessing symbol = %s\n", k, D.3775, D.3773);
  D.3776 = p->nitems;
  n = (int) D.3776;
  i = 0;
  goto <D.3459>;
  <D.3458>:
  D.3777 = p->items[i];
  itemno = (int) D.3777;
  printf ("%4d  ", itemno);
  j = itemno;
  goto <D.3450>;
  <D.3449>:
  j = j + 1;
  <D.3450>:
  ritem.83 = ritem;
  j.84 = (unsigned int) j;
  D.3780 = j.84 * 2;
  D.3781 = ritem.83 + D.3780;
  D.3782 = *D.3781;
  if (D.3782 >= 0) goto <D.3449>; else goto <D.3451>;
  <D.3451>:
  symbol_name.82 = symbol_name;
  rlhs.85 = rlhs;
  ritem.83 = ritem;
  j.84 = (unsigned int) j;
  D.3780 = j.84 * 2;
  D.3781 = ritem.83 + D.3780;
  D.3782 = *D.3781;
  D.3784 = (unsigned int) D.3782;
  D.3785 = D.3784 * 4294967294;
  D.3786 = rlhs.85 + D.3785;
  D.3787 = *D.3786;
  D.3788 = (unsigned int) D.3787;
  D.3789 = D.3788 * 4;
  D.3790 = symbol_name.82 + D.3789;
  D.3791 = *D.3790;
  printf ("%s :", D.3791);
  rrhs.86 = rrhs;
  ritem.83 = ritem;
  j.84 = (unsigned int) j;
  D.3780 = j.84 * 2;
  D.3781 = ritem.83 + D.3780;
  D.3782 = *D.3781;
  D.3784 = (unsigned int) D.3782;
  D.3785 = D.3784 * 4294967294;
  D.3793 = rrhs.86 + D.3785;
  D.3794 = *D.3793;
  j = (int) D.3794;
  goto <D.3453>;
  <D.3452>:
  symbol_name.82 = symbol_name;
  ritem.83 = ritem;
  j.87 = j;
  j = j.87 + 1;
  j.88 = (unsigned int) j.87;
  D.3797 = j.88 * 2;
  D.3798 = ritem.83 + D.3797;
  D.3799 = *D.3798;
  D.3800 = (unsigned int) D.3799;
  D.3801 = D.3800 * 4;
  D.3802 = symbol_name.82 + D.3801;
  D.3803 = *D.3802;
  printf (" %s", D.3803);
  <D.3453>:
  if (j < itemno) goto <D.3452>; else goto <D.3454>;
  <D.3454>:
  printf (" .");
  goto <D.3456>;
  <D.3455>:
  symbol_name.82 = symbol_name;
  ritem.83 = ritem;
  j.89 = j;
  j = j.89 + 1;
  j.90 = (unsigned int) j.89;
  D.3806 = j.90 * 2;
  D.3807 = ritem.83 + D.3806;
  D.3808 = *D.3807;
  D.3809 = (unsigned int) D.3808;
  D.3810 = D.3809 * 4;
  D.3811 = symbol_name.82 + D.3810;
  D.3812 = *D.3811;
  printf (" %s", D.3812);
  <D.3456>:
  ritem.83 = ritem;
  j.84 = (unsigned int) j;
  D.3780 = j.84 * 2;
  D.3781 = ritem.83 + D.3780;
  D.3782 = *D.3781;
  if (D.3782 >= 0) goto <D.3455>; else goto <D.3457>;
  <D.3457>:
  printf ("\n");
  stdout.91 = stdout;
  fflush (stdout.91);
  i = i + 1;
  <D.3459>:
  if (i < n) goto <D.3458>; else goto <D.3460>;
  <D.3460>:
  k = k + 1;
  p = p->next;
  <D.3462>:
  if (p != 0B) goto <D.3461>; else goto <D.3463>;
  <D.3463>:
}


printf (const char * restrict __fmt)
{
  int D.3814;

  D.3814 = __printf_chk (1, __fmt, __builtin_va_arg_pack ());
  return D.3814;
}


show_ritems ()
{
  short int * ritem.92;
  unsigned int i.93;
  unsigned int D.3818;
  short int * D.3819;
  short int D.3820;
  int D.3821;
  int nitems.94;
  int i;

  i = 0;
  goto <D.3468>;
  <D.3467>:
  ritem.92 = ritem;
  i.93 = (unsigned int) i;
  D.3818 = i.93 * 2;
  D.3819 = ritem.92 + D.3818;
  D.3820 = *D.3819;
  D.3821 = (int) D.3820;
  printf ("ritem[%d] = %d\n", i, D.3821);
  i = i + 1;
  <D.3468>:
  nitems.94 = nitems;
  if (i < nitems.94) goto <D.3467>; else goto <D.3469>;
  <D.3469>:
}


show_rrhs ()
{
  short int * rrhs.95;
  unsigned int i.96;
  unsigned int D.3825;
  short int * D.3826;
  short int D.3827;
  int D.3828;
  int nrules.97;
  int i;

  i = 0;
  goto <D.3474>;
  <D.3473>:
  rrhs.95 = rrhs;
  i.96 = (unsigned int) i;
  D.3825 = i.96 * 2;
  D.3826 = rrhs.95 + D.3825;
  D.3827 = *D.3826;
  D.3828 = (int) D.3827;
  printf ("rrhs[%d] = %d\n", i, D.3828);
  i = i + 1;
  <D.3474>:
  nrules.97 = nrules;
  if (i < nrules.97) goto <D.3473>; else goto <D.3475>;
  <D.3475>:
}


show_shifts ()
{
  short int D.3832;
  int D.3833;
  short int D.3834;
  int D.3835;
  short int D.3836;
  int D.3837;
  struct shifts * p;
  int i;
  int j;
  int k;

  k = 0;
  p = first_shift;
  goto <D.3486>;
  <D.3485>:
  if (k != 0) goto <D.3830>; else goto <D.3831>;
  <D.3830>:
  printf ("\n");
  <D.3831>:
  D.3832 = p->nshifts;
  D.3833 = (int) D.3832;
  D.3834 = p->number;
  D.3835 = (int) D.3834;
  printf ("shift %d, number = %d, nshifts = %d\n", k, D.3835, D.3833);
  D.3832 = p->nshifts;
  j = (int) D.3832;
  i = 0;
  goto <D.3483>;
  <D.3482>:
  D.3836 = p->shift[i];
  D.3837 = (int) D.3836;
  printf ("\t%d\n", D.3837);
  i = i + 1;
  <D.3483>:
  if (i < j) goto <D.3482>; else goto <D.3484>;
  <D.3484>:
  k = k + 1;
  p = p->next;
  <D.3486>:
  if (p != 0B) goto <D.3485>; else goto <D.3487>;
  <D.3487>:
}


save_shifts ()
{
  int nshifts.98;
  unsigned int nshifts.99;
  unsigned int D.3840;
  unsigned int D.3841;
  struct core * this_state.100;
  short int D.3843;
  short int D.3844;
  short int * shiftset.101;
  unsigned int D.3846;
  short int * sp2.102;
  short int * sp1.103;
  short int D.3849;
  struct shifts * last_shift.104;
  register struct shifts * p;
  register short int * sp1;
  register short int * sp2;
  register short int * send;

  nshifts.98 = nshifts;
  nshifts.99 = (unsigned int) nshifts.98;
  D.3840 = nshifts.99 + 5;
  D.3841 = D.3840 * 2;
  p = allocate (D.3841);
  this_state.100 = this_state;
  D.3843 = this_state.100->number;
  p->number = D.3843;
  nshifts.98 = nshifts;
  D.3844 = (short int) nshifts.98;
  p->nshifts = D.3844;
  sp1 = shiftset;
  sp2 = &p->shift;
  shiftset.101 = shiftset;
  nshifts.98 = nshifts;
  nshifts.99 = (unsigned int) nshifts.98;
  D.3846 = nshifts.99 * 2;
  send = shiftset.101 + D.3846;
  goto <D.3495>;
  <D.3494>:
  sp2.102 = sp2;
  sp2 = sp2.102 + 2;
  sp1.103 = sp1;
  sp1 = sp1.103 + 2;
  D.3849 = *sp1.103;
  *sp2.102 = D.3849;
  <D.3495>:
  if (sp1 < send) goto <D.3494>; else goto <D.3496>;
  <D.3496>:
  last_shift.104 = last_shift;
  if (last_shift.104 != 0B) goto <D.3851>; else goto <D.3852>;
  <D.3851>:
  last_shift.104 = last_shift;
  last_shift.104->next = p;
  last_shift = p;
  goto <D.3853>;
  <D.3852>:
  first_shift = p;
  last_shift = p;
  <D.3853>:
}


save_reductions ()
{
  short int * ritem.105;
  short int D.3855;
  unsigned int D.3856;
  unsigned int D.3857;
  short int * D.3858;
  short int D.3859;
  short int * redset.106;
  int count.107;
  unsigned int count.108;
  unsigned int D.3865;
  short int * D.3866;
  unsigned short D.3867;
  unsigned short D.3868;
  short int D.3869;
  short int * itemsetend.109;
  unsigned int count.110;
  unsigned int D.3874;
  unsigned int D.3875;
  struct core * this_state.111;
  short int D.3877;
  short int D.3878;
  unsigned int D.3879;
  short int * rp2.112;
  short int * rp1.113;
  short int D.3882;
  struct reductions * last_reduction.114;
  register short int * isp;
  register short int * rp1;
  register short int * rp2;
  register int item;
  register int count;
  register struct reductions * p;
  register short int * rend;

  count = 0;
  isp = itemset;
  goto <D.3507>;
  <D.3506>:
  ritem.105 = ritem;
  D.3855 = *isp;
  D.3856 = (unsigned int) D.3855;
  D.3857 = D.3856 * 2;
  D.3858 = ritem.105 + D.3857;
  D.3859 = *D.3858;
  item = (int) D.3859;
  if (item < 0) goto <D.3860>; else goto <D.3861>;
  <D.3860>:
  redset.106 = redset;
  count.107 = count;
  count = count.107 + 1;
  count.108 = (unsigned int) count.107;
  D.3865 = count.108 * 2;
  D.3866 = redset.106 + D.3865;
  D.3867 = (unsigned short) item;
  D.3868 = -D.3867;
  D.3869 = (short int) D.3868;
  *D.3866 = D.3869;
  <D.3861>:
  isp = isp + 2;
  <D.3507>:
  itemsetend.109 = itemsetend;
  if (isp < itemsetend.109) goto <D.3506>; else goto <D.3508>;
  <D.3508>:
  if (count != 0) goto <D.3871>; else goto <D.3872>;
  <D.3871>:
  count.110 = (unsigned int) count;
  D.3874 = count.110 + 5;
  D.3875 = D.3874 * 2;
  p = allocate (D.3875);
  this_state.111 = this_state;
  D.3877 = this_state.111->number;
  p->number = D.3877;
  D.3878 = (short int) count;
  p->nreds = D.3878;
  rp1 = redset;
  rp2 = &p->rules;
  count.110 = (unsigned int) count;
  D.3879 = count.110 * 2;
  rend = rp1 + D.3879;
  goto <D.3510>;
  <D.3509>:
  rp2.112 = rp2;
  rp2 = rp2.112 + 2;
  rp1.113 = rp1;
  rp1 = rp1.113 + 2;
  D.3882 = *rp1.113;
  *rp2.112 = D.3882;
  <D.3510>:
  if (rp1 < rend) goto <D.3509>; else goto <D.3511>;
  <D.3511>:
  last_reduction.114 = last_reduction;
  if (last_reduction.114 != 0B) goto <D.3884>; else goto <D.3885>;
  <D.3884>:
  last_reduction.114 = last_reduction;
  last_reduction.114->next = p;
  last_reduction = p;
  goto <D.3886>;
  <D.3885>:
  first_reduction = p;
  last_reduction = p;
  <D.3886>:
  <D.3872>:
}


set_derives ()
{
  int nsyms.115;
  unsigned int nsyms.116;
  unsigned int D.3889;
  char * derives.117;
  int nvars.118;
  int nrules.119;
  int D.3893;
  unsigned int D.3894;
  unsigned int D.3895;
  short int * * derives.120;
  unsigned int lhs.121;
  unsigned int D.3898;
  short int * * D.3899;
  unsigned int k.122;
  unsigned int D.3901;
  short int * D.3902;
  short int * rlhs.123;
  unsigned int i.124;
  unsigned int D.3905;
  short int * D.3906;
  short int D.3907;
  int D.3908;
  short int D.3911;
  register int i;
  register int k;
  register int lhs;
  register short int * rules;

  nsyms.115 = nsyms;
  nsyms.116 = (unsigned int) nsyms.115;
  D.3889 = nsyms.116 * 4;
  derives.117 = allocate (D.3889);
  derives = derives.117;
  nvars.118 = nvars;
  nrules.119 = nrules;
  D.3893 = nvars.118 + nrules.119;
  D.3894 = (unsigned int) D.3893;
  D.3895 = D.3894 * 2;
  rules = allocate (D.3895);
  k = 0;
  lhs = start_symbol;
  goto <D.3522>;
  <D.3521>:
  derives.120 = derives;
  lhs.121 = (unsigned int) lhs;
  D.3898 = lhs.121 * 4;
  D.3899 = derives.120 + D.3898;
  k.122 = (unsigned int) k;
  D.3901 = k.122 * 2;
  D.3902 = rules + D.3901;
  *D.3899 = D.3902;
  i = 0;
  goto <D.3519>;
  <D.3518>:
  rlhs.123 = rlhs;
  i.124 = (unsigned int) i;
  D.3905 = i.124 * 2;
  D.3906 = rlhs.123 + D.3905;
  D.3907 = *D.3906;
  D.3908 = (int) D.3907;
  if (D.3908 == lhs) goto <D.3909>; else goto <D.3910>;
  <D.3909>:
  k.122 = (unsigned int) k;
  D.3901 = k.122 * 2;
  D.3902 = rules + D.3901;
  D.3911 = (short int) i;
  *D.3902 = D.3911;
  k = k + 1;
  <D.3910>:
  i = i + 1;
  <D.3519>:
  nrules.119 = nrules;
  if (i < nrules.119) goto <D.3518>; else goto <D.3520>;
  <D.3520>:
  k.122 = (unsigned int) k;
  D.3901 = k.122 * 2;
  D.3902 = rules + D.3901;
  *D.3902 = -1;
  k = k + 1;
  lhs = lhs + 1;
  <D.3522>:
  nsyms.115 = nsyms;
  if (lhs < nsyms.115) goto <D.3521>; else goto <D.3523>;
  <D.3523>:
}


free_derives ()
{
  short int * * derives.125;
  int start_symbol.126;
  unsigned int start_symbol.127;
  unsigned int D.3915;
  short int * * D.3916;
  short int * D.3917;

  derives.125 = derives;
  start_symbol.126 = start_symbol;
  start_symbol.127 = (unsigned int) start_symbol.126;
  D.3915 = start_symbol.127 * 4;
  D.3916 = derives.125 + D.3915;
  D.3917 = *D.3916;
  free (D.3917);
  derives.125 = derives;
  free (derives.125);
}


set_nullable ()
{
  int nsyms.128;
  unsigned int nsyms.129;
  void * nullable.130;
  char * nullable.131;
  sizetype i.132;
  char * D.3925;
  sizetype j.133;
  char * D.3927;
  char D.3928;
  short int * ritem.134;
  unsigned int i.135;
  unsigned int D.3933;
  short int * D.3934;
  short int D.3935;
  short int * rlhs.136;
  unsigned int j.137;
  unsigned int D.3940;
  short int * D.3941;
  short int D.3942;
  int nitems.138;
  register int i;
  register int j;
  register int empty;
  int done;
  extern int no_space ();

  nsyms.128 = nsyms;
  nsyms.129 = (unsigned int) nsyms.128;
  nullable.130 = malloc (nsyms.129);
  nullable = nullable.130;
  nullable.131 = nullable;
  if (nullable.131 == 0B) goto <D.3922>; else goto <D.3923>;
  <D.3922>:
  no_space ();
  <D.3923>:
  i = 0;
  goto <D.3533>;
  <D.3532>:
  nullable.131 = nullable;
  i.132 = (sizetype) i;
  D.3925 = nullable.131 + i.132;
  *D.3925 = 0;
  i = i + 1;
  <D.3533>:
  nsyms.128 = nsyms;
  if (i < nsyms.128) goto <D.3532>; else goto <D.3534>;
  <D.3534>:
  done = 0;
  goto <D.3542>;
  <D.3541>:
  done = 1;
  i = 1;
  goto <D.3539>;
  <D.3538>:
  empty = 1;
  goto <D.3536>;
  <D.3535>:
  nullable.131 = nullable;
  j.133 = (sizetype) j;
  D.3927 = nullable.131 + j.133;
  D.3928 = *D.3927;
  if (D.3928 == 0) goto <D.3929>; else goto <D.3930>;
  <D.3929>:
  empty = 0;
  <D.3930>:
  i = i + 1;
  <D.3536>:
  ritem.134 = ritem;
  i.135 = (unsigned int) i;
  D.3933 = i.135 * 2;
  D.3934 = ritem.134 + D.3933;
  D.3935 = *D.3934;
  j = (int) D.3935;
  if (j >= 0) goto <D.3535>; else goto <D.3537>;
  <D.3537>:
  if (empty != 0) goto <D.3936>; else goto <D.3937>;
  <D.3936>:
  rlhs.136 = rlhs;
  j.137 = (unsigned int) j;
  D.3940 = j.137 * 4294967294;
  D.3941 = rlhs.136 + D.3940;
  D.3942 = *D.3941;
  j = (int) D.3942;
  nullable.131 = nullable;
  j.133 = (sizetype) j;
  D.3927 = nullable.131 + j.133;
  D.3928 = *D.3927;
  if (D.3928 == 0) goto <D.3943>; else goto <D.3944>;
  <D.3943>:
  nullable.131 = nullable;
  j.133 = (sizetype) j;
  D.3927 = nullable.131 + j.133;
  *D.3927 = 1;
  done = 0;
  <D.3944>:
  <D.3937>:
  i = i + 1;
  <D.3539>:
  nitems.138 = nitems;
  if (i < nitems.138) goto <D.3538>; else goto <D.3540>;
  <D.3540>:
  <D.3542>:
  if (done == 0) goto <D.3541>; else goto <D.3543>;
  <D.3543>:
}


free_nullable ()
{
  char * nullable.139;

  nullable.139 = nullable;
  free (nullable.139);
}


lr0 ()
{
  set_derives ();
  set_nullable ();
  generate_states ();
}


