protected final short get_reduce(int state, int sym)
    {
      short tag;
      short[] row = reduce_tab[state];

      /* if we have a null row we go with the default */
      if (row == null)
        return -1;

      for (int probe = 0; probe < row.length; probe++)
	{
	  /* is this entry labeled with our Symbol or the default? */
	  tag = row[probe++];
	  if (tag == sym || tag == -1)
	    {
	      /* return the next entry */
	      return row[probe];
	    }
	}
      /* if we run off the end we return the default (error == -1) */
      return -1;
    }