/*
 * Automatically generated from the files:
 *	/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/producers/cpp/syntax/syntax.sid
 * and
 *	/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/producers/cpp/syntax/syntax.act
 * by:
 *	/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj/utilities/sid/sid
 */

/* BEGINNING OF HEADER */

#define __SID_SPLIT

/*
 *    		 Crown Copyright (c) 1997, 1998
 *
 *    This TenDRA(r) Computer Program is subject to Copyright
 *    owned by the United Kingdom Secretary of State for Defence
 *    acting through the Defence Evaluation and Research Agency
 *    (DERA).  It is made available to Recipients with a
 *    royalty-free licence for its use, reproduction, transfer
 *    to other parties and amendment for any purpose not excluding
 *    product development provided that any such use et cetera
 *    shall be deemed to be acceptance of the following conditions:-
 *
 *        (1) Its Recipients shall ensure that this Notice is
 *        reproduced upon any copies or amended versions of it;
 *
 *        (2) Any amended version of it shall be clearly marked to
 *        show both the nature of and the organisation responsible
 *        for the relevant amendment or amendments;
 *
 *        (3) Its onward transfer from a recipient to another
 *        party shall be deemed to be that party's acceptance of
 *        these conditions;
 *
 *        (4) DERA gives no warranty or assurance as to its
 *        quality or suitability for any purpose and DERA accepts
 *        no liability whatsoever in relation to any use to which
 *        it may be put.
 */


#include "config.h"
#include "producer.h"
#include "c_types.h"
#include "ctype_ops.h"
#include "exp_ops.h"
#include "hashid_ops.h"
#include "id_ops.h"
#include "nspace_ops.h"
#include "type_ops.h"
#include "error.h"
#include "catalog.h"
#include "option.h"
#include "access.h"
#include "allocate.h"
#include "assign.h"
#include "basetype.h"
#include "cast.h"
#include "chktype.h"
#include "class.h"
#include "constant.h"
#include "construct.h"
#include "convert.h"
#include "declare.h"
#include "derive.h"
#include "dump.h"
#include "exception.h"
#include "expression.h"
#include "function.h"
#include "hash.h"
#include "identifier.h"
#include "initialise.h"
#include "inttype.h"
#include "label.h"
#include "lex.h"
#include "literal.h"
#include "member.h"
#include "namespace.h"
#include "parse.h"
#include "pragma.h"
#include "predict.h"
#include "preproc.h"
#include "redeclare.h"
#include "rewrite.h"
#include "statement.h"
#include "symbols.h"
#include "template.h"
#include "tokdef.h"
#include "token.h"
#include "typeid.h"
#include "variable.h"


/*
 *    COMPOUND TYPE ALIASES
 *
 *    These are the aliases for the compound types used in the parser.
 */

typedef LIST (EXP) SID_LIST_EXP;
typedef LIST (TYPE) SID_LIST_TYPE;


/*
 *    FUNCTION DECLARATIONS
 *
 *    The function declarations are included at this point so that the
 *    type definitions are in scope.
 */

#include "syntax.h"


/*
 *    COMPILATION MODE
 *
 *    The output of sid is automatically generated.  Hence it is not
 *    necessarily appropriate to apply the same level of checking to this
 *    as to the rest of the program.  These pragmas describe the relaxations
 *    allowed for the sid output.
 */

#if FS_TENDRA
#pragma TenDRA begin
#pragma TenDRA const conditional allow
#pragma TenDRA unreachable code allow
#pragma TenDRA variable analysis off
#endif



/* BEGINNING OF STATIC VARIABLES */

int ZI0;

/* BEGINNING OF FUNCTION DEFINITIONS */

void
ZR513 (BASE_TYPE *ZO515)
{
    BASE_TYPE ZI515;

    switch (CURRENT_TERMINAL) {
      case lex_bool:
	{
	    ADVANCE_LEXER;
	    {
 (ZI515) = btype_bool; 
	    }
	}
	break;
      case lex_bottom:
	{
	    ADVANCE_LEXER;
	    {
 (ZI515) = btype_bottom; 
	    }
	}
	break;
      case lex_char:
	{
	    ADVANCE_LEXER;
	    {
 (ZI515) = btype_char; 
	    }
	}
	break;
      case lex_double:
	{
	    ADVANCE_LEXER;
	    {
 (ZI515) = btype_double; 
	    }
	}
	break;
      case lex_float:
	{
	    ADVANCE_LEXER;
	    {
 (ZI515) = btype_float; 
	    }
	}
	break;
      case lex_int:
	{
	    ADVANCE_LEXER;
	    {
 (ZI515) = btype_int; 
	    }
	}
	break;
      case lex_long:
	{
	    ADVANCE_LEXER;
	    {
 (ZI515) = btype_long; 
	    }
	}
	break;
      case lex_ptrdiff_Ht:
	{
	    ADVANCE_LEXER;
	    {
 (ZI515) = btype_ptrdiff_t; 
	    }
	}
	break;
      case lex_short:
	{
	    ADVANCE_LEXER;
	    {
 (ZI515) = btype_short; 
	    }
	}
	break;
      case lex_signed:
	{
	    ADVANCE_LEXER;
	    {
 (ZI515) = btype_signed; 
	    }
	}
	break;
      case lex_size_Ht:
	{
	    ADVANCE_LEXER;
	    {
 (ZI515) = btype_size_t; 
	    }
	}
	break;
      case lex_unsigned:
	{
	    ADVANCE_LEXER;
	    {
 (ZI515) = btype_unsigned; 
	    }
	}
	break;
      case lex_void:
	{
	    ADVANCE_LEXER;
	    {
 (ZI515) = btype_void; 
	    }
	}
	break;
      case lex_wchar_Ht:
	{
	    ADVANCE_LEXER;
	    {
 (ZI515) = btype_wchar_t; 
	    }
	}
	break;
      case 358:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO515 = ZI515;
}

void
ZR1271 (NAMESPACE *ZI429, EXP *ZO1244)
{
    EXP ZI1244;

    switch (CURRENT_TERMINAL) {
      case lex_type_Hname: case lex_template_Htype:
	{
	    IDENTIFIER ZI464;
	    IDENTIFIER ZI423;
	    TYPE ZI1270;
	    BASE_TYPE ZI515;
	    CV_SPEC ZI788;
	    TYPE ZI418;
	    SID_LIST_EXP ZI501;
	    EXP ZI435;

	    {
		switch (CURRENT_TERMINAL) {
		  case lex_template_Htype:
		    {
			{

    IDENTIFIER id = crt_token->pp_data.tok.id;
    PPTOKEN *args = crt_token->pp_data.tok.args;
    ZI464 = parse_type_template (id, args, 0);
    crt_templ_qualifier = 1;
    RESCAN_LEXER;
			}
			ADVANCE_LEXER;
		    }
		    break;
		  case lex_type_Hname:
		    {
			{

    ZI464 = crt_token->pp_data.id.use;
			}
			ADVANCE_LEXER;
		    }
		    break;
		  default:
		    goto ZL1;
		}
	    }
	    {

    crt_id_qualifier = qual_nested;
    qual_namespace = (*ZI429);
	    }
	    {

    (ZI423) = check_id ((*ZI429), (ZI464), 0);
    last_namespace = (*ZI429);
	    }
	    {

    MAKE_type_pre (cv_none, btype_alias, crt_id_qualifier, (ZI1270));
    COPY_id (type_name ((ZI1270)), (ZI423));
    have_type_specifier = 1;
	    }
	    {
 (ZI515) = btype_none; 
	    }
	    {
 (ZI788) = cv_none; 
	    }
	    {

    (ZI418) = complete_pre_type ((ZI515), (ZI1270), (ZI788), 1);
    have_type_specifier = 0;
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_open_Hround:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    ZR504 (&ZI501);
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      case 358:
		RESTORE_LEXER;
		goto ZL1;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI435) = make_func_cast_exp ((ZI418), (ZI501));
	    }
	    ZR1245 (ZI435, &ZI1244);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case lex_identifier: case lex_namespace_Hname: case lex_destructor_Hname:
      case lex_template_Hid: case lex_operator: case lex_template:
	{
	    int ZI484;
	    IDENTIFIER ZI482;
	    IDENTIFIER ZI423;
	    EXP ZI435;

	    ZR479 (*ZI429, &ZI484);
	    ZR480 (*ZI429, &ZI482);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    crt_id_qualifier = qual_nested;
    qual_namespace = (*ZI429);
	    }
	    {

    (ZI423) = check_id ((*ZI429), (ZI482), (ZI484));
    last_namespace = (*ZI429);
	    }
	    {

    (ZI435) = make_id_exp ((ZI423));
	    }
	    ZR1245 (ZI435, &ZI1244);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case 358:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO1244 = ZI1244;
}

void
ZR1144 (TYPE ZI1142, TYPE *ZO1143)
{
    TYPE ZI1143;

  ZL2_1144:;
    switch (CURRENT_TERMINAL) {
      case lex_open_Hround: case lex_open_Hsquare_H1: case lex_weak:
	{
	    TYPE ZI484;
	    TYPE ZI418;

	    ZR957 (&ZI484);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI418) = (IS_NULL_type ((ZI1142)) ? (ZI484): inject_pre_type ((ZI1142), (ZI484), 0));
	    }
	    ZI1142 = ZI418;
	    goto ZL2_1144;
	}
	/*UNREACHED*/
      default:
	{
	    ZI1143 = ZI1142;
	}
	break;
      case 358:
	return;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO1143 = ZI1143;
}

void
ZR890 (BASE_TYPE *ZI879, TYPE *ZI880, CV_SPEC *ZI881, BASE_TYPE *ZO515, TYPE *ZO418, CV_SPEC *ZO788)
{
    BASE_TYPE ZI515;
    TYPE ZI418;
    CV_SPEC ZI788;

    if ((CURRENT_TERMINAL) == 358) {
	return;
    }
    {
	TYPE ZI578;
	BASE_TYPE ZI1395;
	TYPE ZI1396;
	CV_SPEC ZI1397;
	BASE_TYPE ZI883;
	TYPE ZI884;
	CV_SPEC ZI885;

	{

    /* Resolve type-specifiers from other declarators */
    (ZI0) = predict_tspec (0);
	}
	if (!ZI0)
	    goto ZL2;
	{

    (ZI578) = NULL_type;
	}
	ZR877 (ZI578, &ZI1395, &ZI1396, &ZI1397);
	ZR890 (&ZI1395, &ZI1396, &ZI1397, &ZI883, &ZI884, &ZI885);
	if ((CURRENT_TERMINAL) == 358) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	{

    if ((*ZI879) & (ZI883)) {
	(ZI515) = join_pre_types ((*ZI879), (ZI883));
    } else {
	(ZI515) = ((*ZI879) | (ZI883));
    }
	}
	{

    /* Join two partial types */
    if (IS_NULL_type ((*ZI880))) {
	(ZI418) = (ZI884);
    } else if (IS_NULL_type ((ZI884))) {
	(ZI418) = (*ZI880);
    } else {
	report (crt_loc, ERR_dcl_type_simple_many ((*ZI880), (ZI884)));
	(ZI418) = (ZI884);
    }
	}
	{

    CV_SPEC c = ((*ZI881) & (ZI885));
    if (c) report (crt_loc, ERR_dcl_type_cv_dup (c));
    (ZI788) = ((*ZI881) | (ZI885));
	}
	goto ZL0;
    }
    /*UNREACHED*/
  ZL2:;
    switch (CURRENT_TERMINAL) {
      default:
	{
	    ZI515 = *ZI879;
	    ZI418 = *ZI880;
	    ZI788 = *ZI881;
	}
	break;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO515 = ZI515;
    *ZO418 = ZI418;
    *ZO788 = ZI788;
}

void
ZR1399 (NAMESPACE *ZI1398, IDENTIFIER *ZO423)
{
    IDENTIFIER ZI423;

    switch (CURRENT_TERMINAL) {
      case lex_identifier: case lex_namespace_Hname: case lex_destructor_Hname:
      case lex_template_Hid: case lex_operator: case lex_template:
	{
	    int ZI484;
	    IDENTIFIER ZI482;

	    ZR479 (*ZI1398, &ZI484);
	    ZR480 (*ZI1398, &ZI482);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI423) = check_id ((*ZI1398), (ZI482), (ZI484));
    last_namespace = (*ZI1398);
	    }
	}
	break;
      case lex_compl_H1:
	{
	    IDENTIFIER ZI523;
	    BASE_TYPE ZI524;
	    QUALIFIER ZI459;
	    int ZI460;
	    IDENTIFIER ZI526;
	    BASE_TYPE ZI527;
	    IDENTIFIER ZI482;

	    {

    (ZI523) = DEREF_id (nspace_name ((*ZI1398)));
	    }
	    {
 (ZI524) = btype_none; 
	    }
	    {

    (ZI459) = crt_id_qualifier;
    (ZI460) = crt_templ_qualifier;
	    }
	    {
		{
		    switch (CURRENT_TERMINAL) {
		      case lex_compl_H1:
			break;
		      default:
			goto ZL1;
		    }
		    ADVANCE_LEXER;
		}
	    }
	    ZR520 (&ZI526, &ZI527);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    crt_id_qualifier = (ZI459);
    crt_templ_qualifier = (ZI460);
	    }
	    {

    (ZI482) = make_pseudo_destr ((ZI523), (ZI524), (ZI526), (ZI527));
	    }
	    {

    (ZI423) = check_id ((*ZI1398), (ZI482), 0);
    last_namespace = (*ZI1398);
	    }
	}
	break;
      case 358:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO423 = ZI423;
}

void
ZR1272 (NAMESPACE *ZI429, EXP *ZO1244)
{
    EXP ZI1244;

    switch (CURRENT_TERMINAL) {
      case lex_type_Hname: case lex_template_Htype:
	{
	    IDENTIFIER ZI464;
	    IDENTIFIER ZI423;
	    TYPE ZI1270;
	    BASE_TYPE ZI515;
	    CV_SPEC ZI788;
	    TYPE ZI418;
	    SID_LIST_EXP ZI501;
	    EXP ZI435;

	    {
		switch (CURRENT_TERMINAL) {
		  case lex_template_Htype:
		    {
			{

    IDENTIFIER id = crt_token->pp_data.tok.id;
    PPTOKEN *args = crt_token->pp_data.tok.args;
    ZI464 = parse_type_template (id, args, 0);
    crt_templ_qualifier = 1;
    RESCAN_LEXER;
			}
			ADVANCE_LEXER;
		    }
		    break;
		  case lex_type_Hname:
		    {
			{

    ZI464 = crt_token->pp_data.id.use;
			}
			ADVANCE_LEXER;
		    }
		    break;
		  default:
		    goto ZL1;
		}
	    }
	    {

    crt_id_qualifier = qual_full;
    qual_namespace = (*ZI429);
	    }
	    {

    (ZI423) = check_id ((*ZI429), (ZI464), 0);
    last_namespace = (*ZI429);
	    }
	    {

    MAKE_type_pre (cv_none, btype_alias, crt_id_qualifier, (ZI1270));
    COPY_id (type_name ((ZI1270)), (ZI423));
    have_type_specifier = 1;
	    }
	    {
 (ZI515) = btype_none; 
	    }
	    {
 (ZI788) = cv_none; 
	    }
	    {

    (ZI418) = complete_pre_type ((ZI515), (ZI1270), (ZI788), 1);
    have_type_specifier = 0;
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_open_Hround:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    ZR504 (&ZI501);
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      case 358:
		RESTORE_LEXER;
		goto ZL1;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI435) = make_func_cast_exp ((ZI418), (ZI501));
	    }
	    ZR1245 (ZI435, &ZI1244);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case lex_identifier: case lex_namespace_Hname: case lex_destructor_Hname:
      case lex_template_Hid: case lex_operator: case lex_template:
	{
	    int ZI484;
	    IDENTIFIER ZI482;
	    IDENTIFIER ZI423;
	    EXP ZI435;

	    ZR479 (*ZI429, &ZI484);
	    ZR480 (*ZI429, &ZI482);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    crt_id_qualifier = qual_full;
    qual_namespace = (*ZI429);
	    }
	    {

    (ZI423) = check_id ((*ZI429), (ZI482), (ZI484));
    last_namespace = (*ZI429);
	    }
	    {

    (ZI435) = make_id_exp ((ZI423));
	    }
	    ZR1245 (ZI435, &ZI1244);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case 358:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO1244 = ZI1244;
}

void
ZR1022 (NAMESPACE ZI516)
{
    if ((CURRENT_TERMINAL) == 358) {
	return;
    }
  ZL2_1022:;
    {
	ZR1021 (ZI516);
	{
	    switch (CURRENT_TERMINAL) {
	      case lex_comma:
		{
		    ADVANCE_LEXER;
		    goto ZL2_1022;
		}
		/*UNREACHED*/
	      case 358:
		RESTORE_LEXER;
		goto ZL1;
	      default:
		break;
	    }
	}
    }
    return;
  ZL1:;
    SAVE_LEXER (358);
    return;
}

void
ZR1273 (EXP *ZO1244)
{
    EXP ZI1244;

    switch (CURRENT_TERMINAL) {
      case lex_type_Hname: case lex_template_Htype:
	{
	    IDENTIFIER ZI464;
	    NAMESPACE ZI429;
	    IDENTIFIER ZI423;
	    TYPE ZI1270;
	    BASE_TYPE ZI515;
	    CV_SPEC ZI788;
	    TYPE ZI418;
	    SID_LIST_EXP ZI501;
	    EXP ZI435;

	    {
		switch (CURRENT_TERMINAL) {
		  case lex_template_Htype:
		    {
			{

    IDENTIFIER id = crt_token->pp_data.tok.id;
    PPTOKEN *args = crt_token->pp_data.tok.args;
    ZI464 = parse_type_template (id, args, 0);
    crt_templ_qualifier = 1;
    RESCAN_LEXER;
			}
			ADVANCE_LEXER;
		    }
		    break;
		  case lex_type_Hname:
		    {
			{

    ZI464 = crt_token->pp_data.id.use;
			}
			ADVANCE_LEXER;
		    }
		    break;
		  default:
		    goto ZL1;
		}
	    }
	    {

    (ZI429) = global_namespace;
    crt_id_qualifier = qual_top;
    qual_namespace = (ZI429);
	    }
	    {

    (ZI423) = check_id ((ZI429), (ZI464), 0);
    last_namespace = (ZI429);
	    }
	    {

    MAKE_type_pre (cv_none, btype_alias, crt_id_qualifier, (ZI1270));
    COPY_id (type_name ((ZI1270)), (ZI423));
    have_type_specifier = 1;
	    }
	    {
 (ZI515) = btype_none; 
	    }
	    {
 (ZI788) = cv_none; 
	    }
	    {

    (ZI418) = complete_pre_type ((ZI515), (ZI1270), (ZI788), 1);
    have_type_specifier = 0;
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_open_Hround:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    ZR504 (&ZI501);
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      case 358:
		RESTORE_LEXER;
		goto ZL1;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI435) = make_func_cast_exp ((ZI418), (ZI501));
	    }
	    ZR1245 (ZI435, &ZI1244);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case lex_identifier: case lex_namespace_Hname: case lex_destructor_Hname:
      case lex_template_Hid: case lex_operator: case lex_template:
	{
	    NAMESPACE ZI429;
	    int ZI484;
	    IDENTIFIER ZI482;
	    IDENTIFIER ZI423;
	    EXP ZI435;

	    {

    (ZI429) = global_namespace;
    crt_id_qualifier = qual_top;
    qual_namespace = (ZI429);
	    }
	    ZR479 (ZI429, &ZI484);
	    ZR480 (ZI429, &ZI482);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI423) = check_id ((ZI429), (ZI482), (ZI484));
    last_namespace = (ZI429);
	    }
	    {

    (ZI435) = make_id_exp ((ZI423));
	    }
	    ZR1245 (ZI435, &ZI1244);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case 358:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO1244 = ZI1244;
}

void
ZR913 (TYPE ZI578, BASE_TYPE *ZO515, TYPE *ZO418, CV_SPEC *ZO788, DECL_SPEC *ZO693)
{
    BASE_TYPE ZI515;
    TYPE ZI418;
    CV_SPEC ZI788;
    DECL_SPEC ZI693;

    if ((CURRENT_TERMINAL) == 358) {
	return;
    }
    {
	BASE_TYPE ZI879;
	TYPE ZI880;
	CV_SPEC ZI881;
	DECL_SPEC ZI914;

	ZR911 (ZI578, &ZI879, &ZI880, &ZI881, &ZI914);
	if ((CURRENT_TERMINAL) == 358) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	{

    /* A type-name can be a declarator-id */
    if (have_type_specifier && crt_lex_token == lex_type_Hname) {
	crt_lex_token = lex_identifier;
    }
	}
	{
	    switch (CURRENT_TERMINAL) {
	      case lex_type_Hname: case lex_template_Htype: case lex_nested_Hname:
	      case lex_full_Hname: case lex_complex_Htype: case lex_colon_Hcolon:
	      case lex_auto: case lex_char: case lex_const:
	      case lex_double: case lex_enum: case lex_extern:
	      case lex_float: case lex_int: case lex_long:
	      case lex_register: case lex_short: case lex_signed:
	      case lex_static: case lex_struct: case lex_typedef:
	      case lex_union: case lex_unsigned: case lex_void:
	      case lex_volatile: case lex_restrict: case lex_bool:
	      case lex_class: case lex_explicit: case lex_friend:
	      case lex_inline: case lex_mutable: case lex_typename:
	      case lex_virtual: case lex_wchar_Ht: case lex_bottom:
	      case lex_overload: case lex_ptrdiff_Ht: case lex_size_Ht:
		{
		    BASE_TYPE ZI883;
		    TYPE ZI884;
		    CV_SPEC ZI885;
		    DECL_SPEC ZI916;

		    ZR913 (ZI578, &ZI883, &ZI884, &ZI885, &ZI916);
		    if ((CURRENT_TERMINAL) == 358) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		    {

    if ((ZI879) & (ZI883)) {
	(ZI515) = join_pre_types ((ZI879), (ZI883));
    } else {
	(ZI515) = ((ZI879) | (ZI883));
    }
		    }
		    {

    /* Join two partial types */
    if (IS_NULL_type ((ZI880))) {
	(ZI418) = (ZI884);
    } else if (IS_NULL_type ((ZI884))) {
	(ZI418) = (ZI880);
    } else {
	report (crt_loc, ERR_dcl_type_simple_many ((ZI880), (ZI884)));
	(ZI418) = (ZI884);
    }
		    }
		    {

    CV_SPEC c = ((ZI881) & (ZI885));
    if (c) report (crt_loc, ERR_dcl_type_cv_dup (c));
    (ZI788) = ((ZI881) | (ZI885));
		    }
		    {

    /* Combine two declaration specifiers */
    DECL_SPEC d = (((ZI914) & (ZI916)) & dspec_duplicate);
    if (d) report (crt_loc, ERR_dcl_spec_dup (d));
    (ZI693) = ((ZI914) | (ZI916));
		    }
		}
		break;
	      default:
		{
		    ZI515 = ZI879;
		    ZI418 = ZI880;
		    ZI788 = ZI881;
		    ZI693 = ZI914;
		}
		break;
	    }
	}
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO515 = ZI515;
    *ZO418 = ZI418;
    *ZO788 = ZI788;
    *ZO693 = ZI693;
}

void
ZR419 (void)
{
    if ((CURRENT_TERMINAL) == 358) {
	return;
    }
    {
	{
	    {
		switch (CURRENT_TERMINAL) {
		  case lex_close_Hsquare_H1:
		    break;
		  default:
		    goto ZL1;
		}
		ADVANCE_LEXER;
	    }
	}
    }
    return;
  ZL1:;
    {
	int ZI418;

	{
 (ZI418) = lex_close_Hsquare_H1; 
	}
	{

    /* Expected symbol */
    int p = primary_form (crt_lex_token);
    if (p != (ZI418)) report (crt_loc, ERR_lex_expect ((ZI418)));
	}
    }
}

void
ZR480 (NAMESPACE ZI429, IDENTIFIER *ZO423)
{
    IDENTIFIER ZI423;

    switch (CURRENT_TERMINAL) {
      case lex_destructor_Hname:
	{
	    {

    ZI423 = crt_token->pp_data.id.use;
	    }
	    ADVANCE_LEXER;
	}
	break;
      case lex_identifier:
	{
	    {

    ZI423 = crt_token->pp_data.id.use;
	    }
	    ADVANCE_LEXER;
	}
	break;
      case lex_namespace_Hname:
	{
	    {

    ZI423 = crt_token->pp_data.id.use;
	    }
	    ADVANCE_LEXER;
	}
	break;
      case lex_template_Hid:
	{
	    {

    IDENTIFIER id = crt_token->pp_data.tok.id;
    PPTOKEN *args = crt_token->pp_data.tok.args;
    ZI423 = parse_id_template (id, args, 0);
    crt_templ_qualifier = 1;
    RESCAN_LEXER;
	    }
	    ADVANCE_LEXER;
	}
	break;
      case lex_operator:
	{
	    {

    if (add_nested_nspace ((ZI429))) {
	RESCAN_LEXER;
    }
	    }
	    parse_operator (&ZI423);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    if (remove_nested_nspace ((ZI429))) {
	RESCAN_LEXER;
    }
	    }
	}
	break;
      case 358:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO423 = ZI423;
}

void
ZR951 (IDENTIFIER ZI423, TYPE *ZO418, int *ZO562)
{
    TYPE ZI418;
    int ZI562;

    switch (CURRENT_TERMINAL) {
      case lex_open_Hround:
	{
	    ADVANCE_LEXER;
	    {
		{
		    {

    /* Resolve function-style initialisers from function declarators */
    (ZI0) = predict_init ();
		    }
		    if (!ZI0)
			goto ZL3;
		    {
 (ZI562) = 1; 
		    }
		    {

    (ZI418) = NULL_type;
		    }
		    goto ZL2;
		}
		/*UNREACHED*/
	      ZL3:;
		switch (CURRENT_TERMINAL) {
		  case lex_type_Hname: case lex_template_Htype: case lex_nested_Hname:
		  case lex_full_Hname: case lex_complex_Htype: case lex_close_Hround:
		  case lex_ellipsis: case lex_colon_Hcolon: case lex_auto:
		  case lex_char: case lex_const: case lex_double:
		  case lex_enum: case lex_extern: case lex_float:
		  case lex_int: case lex_long: case lex_register:
		  case lex_short: case lex_signed: case lex_static:
		  case lex_struct: case lex_typedef: case lex_union:
		  case lex_unsigned: case lex_void: case lex_volatile:
		  case lex_restrict: case lex_bool: case lex_class:
		  case lex_explicit: case lex_friend: case lex_inline:
		  case lex_mutable: case lex_typename: case lex_virtual:
		  case lex_wchar_Ht: case lex_bottom: case lex_overload:
		  case lex_ptrdiff_Ht: case lex_size_Ht:
		    {
			int ZI948;

			{
 (ZI948) = 0; 
			}
			{

    func_type_defn (0);
    begin_param ((ZI423));
    have_type_declaration = TYPE_DECL_NONE;
    have_func_declarator = 0;
			}
			ZR949 (ZI948, &ZI418);
			if ((CURRENT_TERMINAL) == 358) {
			    RESTORE_LEXER;
			    goto ZL1;
			}
			{

    end_param ();
    have_type_declaration = TYPE_DECL_NONE;
    have_func_declarator = 1;
			}
			{
 (ZI562) = 0; 
			}
		    }
		    break;
		  default:
		    goto ZL1;
		}
	      ZL2:;
	    }
	}
	break;
      case lex_weak:
	{
	    int ZI948;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_open_Hround:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    {
 (ZI948) = 1; 
	    }
	    {

    func_type_defn (0);
    begin_param ((ZI423));
    have_type_declaration = TYPE_DECL_NONE;
    have_func_declarator = 0;
	    }
	    ZR949 (ZI948, &ZI418);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    end_param ();
    have_type_declaration = TYPE_DECL_NONE;
    have_func_declarator = 1;
	    }
	    {
 (ZI562) = 0; 
	    }
	}
	break;
      case lex_open_Hsquare_H1:
	{
	    EXP ZI435;

	    {
		{
		    switch (CURRENT_TERMINAL) {
		      case lex_open_Hsquare_H1:
			break;
		      default:
			goto ZL1;
		    }
		    ADVANCE_LEXER;
		}
	    }
	    ZR958 (&ZI435);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    NAT n = make_array_dim ((ZI435));
    MAKE_type_array (cv_none, NULL_type, n, (ZI418));
	    }
	    {
		{
		    switch (CURRENT_TERMINAL) {
		      case lex_close_Hsquare_H1:
			break;
		      default:
			goto ZL1;
		    }
		    ADVANCE_LEXER;
		}
	    }
	    {
 (ZI562) = 0; 
	    }
	}
	break;
      case 358:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO418 = ZI418;
    *ZO562 = ZI562;
}

void
ZR976 (TYPE ZI578, int ZI501, IDENTIFIER *ZO463)
{
    IDENTIFIER ZI463;

    if ((CURRENT_TERMINAL) == 358) {
	return;
    }
    {
	BASE_TYPE ZI515;
	TYPE ZI880;
	CV_SPEC ZI881;
	DECL_SPEC ZI914;
	TYPE ZI884;
	DECL_SPEC ZI916;
	TYPE ZI418;
	IDENTIFIER ZI423;
	EXP ZI435;

	ZR913 (ZI578, &ZI515, &ZI880, &ZI881, &ZI914);
	if ((CURRENT_TERMINAL) == 358) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	{

    /* Complete a declaration specifier and a type */
    (ZI916) = complete_dspec ((ZI914), (ZI515), (ZI880), (ZI881));
    (ZI884) = complete_pre_type ((ZI515), (ZI880), (ZI881), 0);
    have_type_specifier = 0;
	}
	{

    crt_templ_qualifier = 0;
	}
	ZR966 (ZI884, &ZI418, &ZI423);
	if ((CURRENT_TERMINAL) == 358) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	{

    (ZI463) = make_param_decl ((ZI916), (ZI418), (ZI423), (ZI501));
    have_type_declaration = TYPE_DECL_NONE;
    have_func_declarator = 0;
	}
	{
	    switch (CURRENT_TERMINAL) {
	      case lex_assign:
		{
		    EXP ZI497;

		    ADVANCE_LEXER;
		    {

    in_default_arg++;
		    }
		    {
			{
			    {

    (ZI0) = (in_class_defn && (ZI501) == CONTEXT_PARAMETER);
			    }
			    if (!ZI0)
				goto ZL4;
			    {

    (ZI497) = skip_default_arg ((ZI463));
			    }
			    goto ZL3;
			}
			/*UNREACHED*/
		      ZL4:;
			switch (CURRENT_TERMINAL) {
			  case lex_identifier: case lex_type_Hname: case lex_namespace_Hname:
			  case lex_destructor_Hname: case lex_template_Hid: case lex_template_Htype:
			  case lex_nested_Hname: case lex_full_Hname: case lex_char_Hexp:
			  case lex_wchar_Hexp: case lex_string_Hexp: case lex_wstring_Hexp:
			  case lex_integer_Hexp: case lex_floating_Hexp: case lex_complex_Hexp:
			  case lex_complex_Htype: case lex_and_H1: case lex_compl_H1:
			  case lex_minus: case lex_minus_Hminus: case lex_not_H1:
			  case lex_open_Hround: case lex_plus: case lex_plus_Hplus:
			  case lex_star: case lex_colon_Hcolon: case lex_abs:
			  case lex_char: case lex_double: case lex_float:
			  case lex_int: case lex_long: case lex_short:
			  case lex_signed: case lex_sizeof: case lex_unsigned:
			  case lex_void: case lex_bool: case lex_const_Hcast:
			  case lex_delete: case lex_dynamic_Hcast: case lex_false:
			  case lex_new: case lex_operator: case lex_reinterpret_Hcast:
			  case lex_static_Hcast: case lex_this: case lex_throw:
			  case lex_true: case lex_typeid: case lex_wchar_Ht:
			  case lex_alignof: case lex_bottom: case lex_discard:
			  case lex_ellipsis_Hexp: case lex_ptrdiff_Ht: case lex_size_Ht:
			  case lex_vtable:
			    {
				ZR653 (&ZI497);
				if ((CURRENT_TERMINAL) == 358) {
				    RESTORE_LEXER;
				    goto ZL1;
				}
			    }
			    break;
			  default:
			    goto ZL1;
			}
		      ZL3:;
		    }
		    {

    in_default_arg--;
		    }
		    ZI435 = ZI497;
		}
		break;
	      default:
		{
		    {

    (ZI435) = NULL_exp;
		    }
		}
		break;
	    }
	}
	{

    init_param ((ZI463), (ZI435));
	}
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO463 = ZI463;
}

void
ZR1403 (NAMESPACE *ZI429, IDENTIFIER *ZI1401, IDENTIFIER *ZO423)
{
    IDENTIFIER ZI423;

    switch (CURRENT_TERMINAL) {
      case lex_colon_Hcolon:
	{
	    BASE_TYPE ZI524;
	    NAMESPACE ZI525;
	    QUALIFIER ZI459;
	    int ZI460;
	    IDENTIFIER ZI526;
	    BASE_TYPE ZI527;
	    IDENTIFIER ZI482;

	    ADVANCE_LEXER;
	    {
 (ZI524) = btype_none; 
	    }
	    ZI525 = *ZI429;
	    {

    (ZI459) = crt_id_qualifier;
    (ZI460) = crt_templ_qualifier;
	    }
	    {
		{
		    switch (CURRENT_TERMINAL) {
		      case lex_compl_H1:
			break;
		      default:
			goto ZL1;
		    }
		    ADVANCE_LEXER;
		}
	    }
	    ZR520 (&ZI526, &ZI527);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    crt_id_qualifier = (ZI459);
    crt_templ_qualifier = (ZI460);
	    }
	    {

    (ZI482) = make_pseudo_destr ((*ZI1401), (ZI524), (ZI526), (ZI527));
	    }
	    {

    (ZI423) = check_id ((ZI525), (ZI482), 0);
    last_namespace = (ZI525);
	    }
	}
	break;
      default:
	{
	    ZI423 = *ZI1401;
	}
	break;
      case 358:
	return;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO423 = ZI423;
}

void
ZR440 (EXP *ZO435)
{
    EXP ZI435;

    switch (CURRENT_TERMINAL) {
      case lex_false:
	{
	    ADVANCE_LEXER;
	    {

    (ZI435) = make_bool_exp (BOOL_FALSE, exp_int_lit_tag);
	    }
	}
	break;
      case lex_true:
	{
	    ADVANCE_LEXER;
	    {

    (ZI435) = make_bool_exp (BOOL_TRUE, exp_int_lit_tag);
	    }
	}
	break;
      case 358:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO435 = ZI435;
}

void
ZR1150 (EXP ZI1148, EXP *ZO1149)
{
    EXP ZI1149;

  ZL2_1150:;
    switch (CURRENT_TERMINAL) {
      case lex_hash_Helif:
	{
	    EXP ZI501;
	    EXP ZI562;

	    ZI501 = ZI1148;
	    {

    ZI562 = crt_token->pp_data.exp;
	    }
	    ADVANCE_LEXER;
	    {

    EXP c = make_else_cond (crt_hash_cond);
    crt_hash_cond = make_if_cond ((ZI562), c);
	    }
	    {

    target_decl (lex_elif, (ZI562));
	    }
	    ZR1033 ();
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    } else {
		ZI1148 = ZI501;
		goto ZL2_1150;
	    }
	}
	/*UNREACHED*/
      default:
	{
	    ZI1149 = ZI1148;
	}
	break;
      case 358:
	return;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO1149 = ZI1149;
}

void
ZR430 (NAMESPACE *ZO429)
{
    NAMESPACE ZI429;

    switch (CURRENT_TERMINAL) {
      case lex_full_Hname:
	{
	    {

    ZI429 = crt_token->pp_data.ns;
	    }
	    ADVANCE_LEXER;
	    {

    crt_id_qualifier = qual_full;
    qual_namespace = (ZI429);
	    }
	}
	break;
      case lex_nested_Hname:
	{
	    {

    ZI429 = crt_token->pp_data.ns;
	    }
	    ADVANCE_LEXER;
	    {

    crt_id_qualifier = qual_nested;
    qual_namespace = (ZI429);
	    }
	}
	break;
      case 358:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO429 = ZI429;
}

void
ZR703 (EXP *ZO435)
{
    EXP ZI435;

    if ((CURRENT_TERMINAL) == 358) {
	return;
    }
    {
	EXP ZI497;
	EXP ZI501;
	int ZI674;
	EXP ZI460;

	ZR702 (&ZI497, &ZI501, &ZI674);
	{
	    switch (CURRENT_TERMINAL) {
	      case lex_hash_Helse:
		{
		    int ZI578;

		    ADVANCE_LEXER;
		    {

    crt_hash_cond = make_else_cond (crt_hash_cond);
		    }
		    {

    (ZI578) = unreached_code;
    if ((ZI578)) {
	if (!unreached_last) {
	    report (crt_loc, ERR_stmt_stmt_unreach ());
	    unreached_last = 1;
	}
    } else {
	unreached_last = 0;
    }
		    }
		    ZR682 (&ZI460);
		    if ((CURRENT_TERMINAL) == 358) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		}
		break;
	      default:
		{
		    {

    (ZI460) = NULL_exp;
		    }
		}
		break;
	      case 358:
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	{

    crt_hash_cond = (ZI501);
	}
	switch (CURRENT_TERMINAL) {
	  case lex_hash_Hendif:
	    break;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
	{
 unreached_prev = (ZI674); 
	}
	{

    (ZI435) = end_hash_if_stmt ((ZI497), (ZI460));
	}
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO435 = ZI435;
}

void
ZR1407 (NAMESPACE *ZI429, IDENTIFIER *ZI1405, IDENTIFIER *ZO423)
{
    IDENTIFIER ZI423;

    switch (CURRENT_TERMINAL) {
      case lex_colon_Hcolon:
	{
	    BASE_TYPE ZI524;
	    NAMESPACE ZI525;
	    QUALIFIER ZI459;
	    int ZI460;
	    IDENTIFIER ZI526;
	    BASE_TYPE ZI527;
	    IDENTIFIER ZI482;

	    ADVANCE_LEXER;
	    {
 (ZI524) = btype_none; 
	    }
	    ZI525 = *ZI429;
	    {

    (ZI459) = crt_id_qualifier;
    (ZI460) = crt_templ_qualifier;
	    }
	    {
		{
		    switch (CURRENT_TERMINAL) {
		      case lex_compl_H1:
			break;
		      default:
			goto ZL1;
		    }
		    ADVANCE_LEXER;
		}
	    }
	    ZR520 (&ZI526, &ZI527);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    crt_id_qualifier = (ZI459);
    crt_templ_qualifier = (ZI460);
	    }
	    {

    (ZI482) = make_pseudo_destr ((*ZI1405), (ZI524), (ZI526), (ZI527));
	    }
	    {

    (ZI423) = check_id ((ZI525), (ZI482), 0);
    last_namespace = (ZI525);
	    }
	}
	break;
      default:
	{
	    ZI423 = *ZI1405;
	}
	break;
      case 358:
	return;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO423 = ZI423;
}

void
ZR521 (NAMESPACE ZI429, IDENTIFIER *ZO423)
{
    IDENTIFIER ZI423;

    switch (CURRENT_TERMINAL) {
      case lex_colon_Hcolon:
	{
	    ADVANCE_LEXER;
	    ZR1318 (&ZI429, &ZI423);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case lex_full_Hname:
	{
	    NAMESPACE ZI1321;

	    {

    ZI1321 = crt_token->pp_data.ns;
	    }
	    ADVANCE_LEXER;
	    ZR1322 (&ZI429, &ZI1321, &ZI423);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case lex_nested_Hname:
	{
	    NAMESPACE ZI1319;

	    {

    ZI1319 = crt_token->pp_data.ns;
	    }
	    ADVANCE_LEXER;
	    ZR1320 (&ZI429, &ZI1319, &ZI423);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case lex_char: case lex_double: case lex_float:
      case lex_int: case lex_long: case lex_short:
      case lex_signed: case lex_unsigned: case lex_void:
      case lex_bool: case lex_wchar_Ht: case lex_bottom:
      case lex_ptrdiff_Ht: case lex_size_Ht:
	{
	    BASE_TYPE ZI524;
	    IDENTIFIER ZI523;
	    NAMESPACE ZI525;
	    QUALIFIER ZI459;
	    int ZI460;
	    IDENTIFIER ZI526;
	    BASE_TYPE ZI527;
	    IDENTIFIER ZI482;

	    ZR513 (&ZI524);
	    switch (CURRENT_TERMINAL) {
	      case lex_colon_Hcolon:
		break;
	      case 358:
		RESTORE_LEXER;
		goto ZL1;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI523) = NULL_id;
    crt_id_qualifier = qual_none;
    qual_namespace = NULL_nspace;
	    }
	    ZI525 = ZI429;
	    {

    (ZI459) = crt_id_qualifier;
    (ZI460) = crt_templ_qualifier;
	    }
	    {
		{
		    switch (CURRENT_TERMINAL) {
		      case lex_compl_H1:
			break;
		      default:
			goto ZL1;
		    }
		    ADVANCE_LEXER;
		}
	    }
	    ZR520 (&ZI526, &ZI527);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    crt_id_qualifier = (ZI459);
    crt_templ_qualifier = (ZI460);
	    }
	    {

    (ZI482) = make_pseudo_destr ((ZI523), (ZI524), (ZI526), (ZI527));
	    }
	    {

    (ZI423) = check_id ((ZI525), (ZI482), 0);
    last_namespace = (ZI525);
	    }
	}
	break;
      case lex_compl_H1:
	{
	    IDENTIFIER ZI526;
	    BASE_TYPE ZI527;

	    {
		{
		    switch (CURRENT_TERMINAL) {
		      case lex_compl_H1:
			break;
		      default:
			goto ZL1;
		    }
		    ADVANCE_LEXER;
		}
	    }
	    ZR520 (&ZI526, &ZI527);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    crt_id_qualifier = qual_none;
    crt_templ_qualifier = 0;
    qual_namespace = NULL_nspace;
	    }
	    {

    (ZI423) = make_pseudo_destr ((ZI526), (ZI527), (ZI526), (ZI527));
	    }
	}
	break;
      case lex_identifier: case lex_namespace_Hname: case lex_destructor_Hname:
      case lex_template_Hid: case lex_operator:
	{
	    IDENTIFIER ZI482;

	    ZR480 (ZI429, &ZI482);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    crt_id_qualifier = qual_none;
    crt_templ_qualifier = 0;
    qual_namespace = NULL_nspace;
	    }
	    {

    (ZI423) = check_id ((ZI429), (ZI482), 0);
    last_namespace = (ZI429);
	    }
	}
	break;
      case lex_type_Hname: case lex_template_Htype:
	{
	    IDENTIFIER ZI464;
	    IDENTIFIER ZI1315;

	    ZR476 (&ZI464);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI1315) = check_id ((ZI429), (ZI464), 0);
    last_namespace = (ZI429);
	    }
	    ZR1317 (&ZI429, &ZI1315, &ZI423);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case 358:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO423 = ZI423;
}

void
ZR911 (TYPE ZI578, BASE_TYPE *ZO515, TYPE *ZO418, CV_SPEC *ZO788, DECL_SPEC *ZO693)
{
    BASE_TYPE ZI515;
    TYPE ZI418;
    CV_SPEC ZI788;
    DECL_SPEC ZI693;

    switch (CURRENT_TERMINAL) {
      case lex_type_Hname: case lex_template_Htype: case lex_nested_Hname:
      case lex_full_Hname: case lex_complex_Htype: case lex_colon_Hcolon:
      case lex_char: case lex_const: case lex_double:
      case lex_enum: case lex_float: case lex_int:
      case lex_long: case lex_short: case lex_signed:
      case lex_struct: case lex_union: case lex_unsigned:
      case lex_void: case lex_volatile: case lex_restrict:
      case lex_bool: case lex_class: case lex_typename:
      case lex_wchar_Ht: case lex_bottom: case lex_ptrdiff_Ht:
      case lex_size_Ht:
	{
	    ZR877 (ZI578, &ZI515, &ZI418, &ZI788);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {
 (ZI693) = dspec_none; 
	    }
	}
	break;
      case lex_auto: case lex_extern: case lex_register:
      case lex_static: case lex_typedef: case lex_explicit:
      case lex_friend: case lex_inline: case lex_mutable:
      case lex_virtual: case lex_overload:
	{
	    {
		switch (CURRENT_TERMINAL) {
		  case lex_friend:
		    {
			ADVANCE_LEXER;
			{
 (ZI693) = dspec_friend; 
			}
		    }
		    break;
		  case lex_typedef:
		    {
			ADVANCE_LEXER;
			{
 (ZI693) = dspec_typedef; 
			}
		    }
		    break;
		  case lex_explicit: case lex_inline: case lex_virtual:
		  case lex_overload:
		    {
			ZR904 (&ZI693);
			if ((CURRENT_TERMINAL) == 358) {
			    RESTORE_LEXER;
			    goto ZL1;
			}
		    }
		    break;
		  case lex_auto: case lex_extern: case lex_register:
		  case lex_static: case lex_mutable:
		    {
			ZR899 (&ZI693);
			if ((CURRENT_TERMINAL) == 358) {
			    RESTORE_LEXER;
			    goto ZL1;
			}
		    }
		    break;
		  default:
		    goto ZL1;
		}
	    }
	    {

    if (have_type_specifier) report (crt_loc, ERR_dcl_spec_order ((ZI693)));
	    }
	    {
 (ZI515) = btype_none; 
	    }
	    {

    (ZI418) = NULL_type;
	    }
	    {
 (ZI788) = cv_none; 
	    }
	}
	break;
      case 358:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO515 = ZI515;
    *ZO418 = ZI418;
    *ZO788 = ZI788;
    *ZO693 = ZI693;
}

void
parse_init (IDENTIFIER ZI463, EXP *ZO435)
{
    EXP ZI435;

    if ((CURRENT_TERMINAL) == 358) {
	return;
    }
    {
	ZR1003 (ZI463, &ZI435);
	if ((CURRENT_TERMINAL) == 358) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
    }
    goto ZL0;
  ZL1:;
    {
	{

    /* Syntax errors */
    ERROR err = ERR_lex_parse (crt_token);
    report (crt_loc, err);
    have_syntax_error = 1;
	}
	{

    (ZI435) = NULL_exp;
	}
    }
  ZL0:;
    *ZO435 = ZI435;
}

void
ZR1154 (TYPE ZI1152, TYPE *ZO1153)
{
    TYPE ZI1153;

  ZL2_1154:;
    switch (CURRENT_TERMINAL) {
      case lex_open_Hsquare_H1:
	{
	    EXP ZI435;
	    TYPE ZI484;
	    TYPE ZI418;

	    {
		{
		    switch (CURRENT_TERMINAL) {
		      case lex_open_Hsquare_H1:
			break;
		      default:
			goto ZL1;
		    }
		    ADVANCE_LEXER;
		}
	    }
	    ZR655 (&ZI435);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    NAT n = make_array_dim ((ZI435));
    MAKE_type_array (cv_none, NULL_type, n, (ZI484));
	    }
	    {

    (ZI418) = (IS_NULL_type ((ZI1152)) ? (ZI484): inject_pre_type ((ZI1152), (ZI484), 0));
	    }
	    {
		{
		    switch (CURRENT_TERMINAL) {
		      case lex_close_Hsquare_H1:
			break;
		      default:
			goto ZL1;
		    }
		    ADVANCE_LEXER;
		}
	    }
	    ZI1152 = ZI418;
	    goto ZL2_1154;
	}
	/*UNREACHED*/
      default:
	{
	    ZI1153 = ZI1152;
	}
	break;
      case 358:
	return;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO1153 = ZI1153;
}

void
ZR1032 (TYPE ZI418, DECL_SPEC ZI693)
{
    if ((CURRENT_TERMINAL) == 358) {
	return;
    }
  ZL2_1032:;
    {
	BASE_TYPE ZI1253;
	TYPE ZI1254;
	CV_SPEC ZI1255;
	DECL_SPEC ZI1256;
	BASE_TYPE ZI515;
	TYPE ZI880;
	CV_SPEC ZI881;
	DECL_SPEC ZI914;
	DECL_SPEC ZI916;
	EXP ZI435;

	{

    /* Resolve declaration-specifiers from other declarators */
    (ZI0) = predict_dspec (0);
	}
	if (!ZI0)
	    goto ZL3;
	ZR911 (ZI418, &ZI1253, &ZI1254, &ZI1255, &ZI1256);
	ZR922 (&ZI418, &ZI1253, &ZI1254, &ZI1255, &ZI1256, &ZI515, &ZI880, &ZI881, &ZI914);
	if ((CURRENT_TERMINAL) == 358) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	{

    /* Combine two declaration specifiers */
    DECL_SPEC d = (((ZI693) & (ZI914)) & dspec_duplicate);
    if (d) report (crt_loc, ERR_dcl_spec_dup (d));
    (ZI916) = ((ZI693) | (ZI914));
	}
	ZR1257 (&ZI418, &ZI515, &ZI880, &ZI881, &ZI916);
	if ((CURRENT_TERMINAL) == 358) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	{

    (ZI435) = NULL_exp;
	}
	{

    external_declaration ((ZI435), 1);
	}
	goto ZL2_1032;
    }
    /*UNREACHED*/
  ZL3:;
    switch (CURRENT_TERMINAL) {
      case lex_extern:
	{
	    EXP ZI435;

	    ZR1067 (ZI418, ZI693, &ZI435);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    external_declaration ((ZI435), 1);
	    }
	    goto ZL2_1032;
	}
	/*UNREACHED*/
      case lex_export: case lex_template:
	{
	    EXP ZI435;

	    ZR1077 (ZI418, ZI693, &ZI435);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    external_declaration ((ZI435), 1);
	    }
	    goto ZL2_1032;
	}
	/*UNREACHED*/
      case lex_identifier: case lex_type_Hname: case lex_namespace_Hname:
      case lex_statement_Hname: case lex_destructor_Hname: case lex_template_Hid:
      case lex_template_Htype: case lex_nested_Hname: case lex_full_Hname:
      case lex_nested_Hname_Hstar: case lex_full_Hname_Hstar: case lex_and_H1:
      case lex_open_Hround: case lex_semicolon: case lex_star:
      case lex_colon_Hcolon: case lex_operator:
	{
	    BASE_TYPE ZI515;
	    TYPE ZI880;
	    CV_SPEC ZI1258;
	    EXP ZI435;

	    {
 (ZI515) = btype_none; 
	    }
	    {

    (ZI880) = NULL_type;
	    }
	    {
 (ZI1258) = cv_none; 
	    }
	    ZR1259 (&ZI418, &ZI693, &ZI515, &ZI880, &ZI1258, &ZI435);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    external_declaration ((ZI435), 1);
	    }
	    goto ZL2_1032;
	}
	/*UNREACHED*/
      case lex_hash_Hif: case lex_hash_Hpragma: case lex_asm:
      case lex_namespace: case lex_using:
	{
	    {

    if (!IS_NULL_type ((ZI418))) report (crt_loc, ERR_temp_decl_bad ());
    UNUSED ((ZI693));
	    }
	    ZR1260 ();
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    } else {
		goto ZL2_1032;
	    }
	}
	/*UNREACHED*/
      default:
	break;
    }
    return;
  ZL1:;
    SAVE_LEXER (358);
    return;
}

void
ZR957 (TYPE *ZO418)
{
    TYPE ZI418;

    switch (CURRENT_TERMINAL) {
      case lex_open_Hround:
	{
	    IDENTIFIER ZI423;
	    int ZI948;

	    ADVANCE_LEXER;
	    {

    (ZI423) = NULL_id;
    crt_id_qualifier = qual_none;
    qual_namespace = NULL_nspace;
	    }
	    {
 (ZI948) = 0; 
	    }
	    {

    func_type_defn (0);
    begin_param ((ZI423));
    have_type_declaration = TYPE_DECL_NONE;
    have_func_declarator = 0;
	    }
	    ZR949 (ZI948, &ZI418);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    end_param ();
    have_type_declaration = TYPE_DECL_NONE;
    have_func_declarator = 1;
	    }
	}
	break;
      case lex_weak:
	{
	    IDENTIFIER ZI423;
	    int ZI948;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_open_Hround:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI423) = NULL_id;
    crt_id_qualifier = qual_none;
    qual_namespace = NULL_nspace;
	    }
	    {
 (ZI948) = 1; 
	    }
	    {

    func_type_defn (0);
    begin_param ((ZI423));
    have_type_declaration = TYPE_DECL_NONE;
    have_func_declarator = 0;
	    }
	    ZR949 (ZI948, &ZI418);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    end_param ();
    have_type_declaration = TYPE_DECL_NONE;
    have_func_declarator = 1;
	    }
	}
	break;
      case lex_open_Hsquare_H1:
	{
	    EXP ZI435;

	    {
		{
		    switch (CURRENT_TERMINAL) {
		      case lex_open_Hsquare_H1:
			break;
		      default:
			goto ZL1;
		    }
		    ADVANCE_LEXER;
		}
	    }
	    ZR958 (&ZI435);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    NAT n = make_array_dim ((ZI435));
    MAKE_type_array (cv_none, NULL_type, n, (ZI418));
	    }
	    {
		{
		    switch (CURRENT_TERMINAL) {
		      case lex_close_Hsquare_H1:
			break;
		      default:
			goto ZL1;
		    }
		    ADVANCE_LEXER;
		}
	    }
	}
	break;
      case 358:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO418 = ZI418;
}

void
ZR1410 (NAMESPACE *ZI429, IDENTIFIER *ZI1408, IDENTIFIER *ZO423)
{
    IDENTIFIER ZI423;

    switch (CURRENT_TERMINAL) {
      case lex_colon_Hcolon:
	{
	    BASE_TYPE ZI524;
	    NAMESPACE ZI525;
	    QUALIFIER ZI459;
	    int ZI460;
	    IDENTIFIER ZI526;
	    BASE_TYPE ZI527;
	    IDENTIFIER ZI482;

	    ADVANCE_LEXER;
	    {
 (ZI524) = btype_none; 
	    }
	    ZI525 = *ZI429;
	    {

    (ZI459) = crt_id_qualifier;
    (ZI460) = crt_templ_qualifier;
	    }
	    {
		{
		    switch (CURRENT_TERMINAL) {
		      case lex_compl_H1:
			break;
		      default:
			goto ZL1;
		    }
		    ADVANCE_LEXER;
		}
	    }
	    ZR520 (&ZI526, &ZI527);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    crt_id_qualifier = (ZI459);
    crt_templ_qualifier = (ZI460);
	    }
	    {

    (ZI482) = make_pseudo_destr ((*ZI1408), (ZI524), (ZI526), (ZI527));
	    }
	    {

    (ZI423) = check_id ((ZI525), (ZI482), 0);
    last_namespace = (ZI525);
	    }
	}
	break;
      default:
	{
	    ZI423 = *ZI1408;
	}
	break;
      case 358:
	return;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (358);
    return;
  ZL0:;
    *ZO423 = ZI423;
}

void
ZR685 (EXP ZI562, EXP *ZO435)
{
    EXP ZI435;

    if ((CURRENT_TERMINAL) == 358) {
	return;
    }
    {
	DECL_SPEC ZI693;
	TYPE ZI418;
	EXP ZI1517;
	EXP ZI1556;
	EXP ZI497;

	{

    /* Resolve declaration-statements from expression-statements */
    int b = predict_decl ();
    if (b) in_declaration++;
    (ZI0) = b;
	}
	if (!ZI0)
	    goto ZL2;
	{
 (ZI693) = dspec_none; 
	}
	{

    (ZI418) = NULL_type;
	}
	ZR691 (ZI418, ZI693, &ZI1517);
	if ((CURRENT_TERMINAL) == 358) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	{

    (ZI1556) = (ZI1517);
    in_declaration--;
	}
	{

    unreached_fall = 1;
	}
	{

    (ZI497) = add_compound_stmt ((ZI562), (ZI1556));
	}
	{

    (ZI435) = end_compound_stmt ((ZI497));
	}
	{

    RESCAN_LEXER;
	}
	goto ZL0;
    }
    /*UNREACHED*/
  ZL2:;
    switch (CURRENT_TERMINAL) {
      case lex_alignof:
	{
	    int ZI454;
	    EXP ZI1457;
	    EXP ZI1456;
	    EXP ZI1455;
	    EXP ZI1454;
	    EXP ZI1453;
	    EXP ZI1452;
	    EXP ZI1451;
	    EXP ZI1450;
	    EXP ZI1449;
	    EXP ZI1448;
	    EXP ZI1447;
	    EXP ZI1446;
	    EXP ZI1268;
	    EXP ZI1292;
	    EXP ZI1527;
	    int ZI674;
	    EXP ZI1573;
	    EXP ZI497;

	    ADVANCE_LEXER;
	    {
 (ZI454) = lex_alignof; 
	    }
	    ZR597 (ZI454, &ZI1457);
	    ZR1241 (ZI1457, &ZI1456);
	    ZR1237 (ZI1456, &ZI1455);
	    ZR1233 (ZI1455, &ZI1454);
	    ZR1229 (ZI1454, &ZI1453);
	    ZR1225 (ZI1453, &ZI1452);
	    ZR1221 (ZI1452, &ZI1451);
	    ZR1217 (ZI1451, &ZI1450);
	    ZR1213 (ZI1450, &ZI1449);
	    ZR1209 (ZI1449, &ZI1448);
	    ZR1205 (ZI1448, &ZI1447);
	    ZR1201 (ZI1447, &ZI1446);
	    ZR1197 (ZI1446, &ZI1268);
	    ZR1269 (&ZI1268, &ZI1292);
	    ZR1294 (&ZI1292, &ZI1527);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI674) = unreached_code;
    if ((ZI674)) {
	if (!unreached_last) {
	    report (crt_loc, ERR_stmt_stmt_unreach ());
	    unreached_last = 1;
	}
    } else {
	unreached_last = 0;
    }
	    }
	    {

    (ZI1573) = make_exp_stmt ((ZI1527));
	    }
	    {

    unreached_fall = 1;
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_semicolon:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI497) = add_compound_stmt ((ZI562), (ZI1573));
	    }
	    {

    (ZI435) = end_compound_stmt ((ZI497));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      case lex_colon_Hcolon:
	{
	    EXP ZI1563;
	    EXP ZI497;

	    ADVANCE_LEXER;
	    ZR1479 (&ZI1563);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI497) = add_compound_stmt ((ZI562), (ZI1563));
	    }
	    {

    (ZI435) = end_compound_stmt ((ZI497));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      case lex_complex_Hexp:
	{
	    EXP ZI1284;
	    EXP ZI1457;
	    EXP ZI1456;
	    EXP ZI1455;
	    EXP ZI1454;
	    EXP ZI1453;
	    EXP ZI1452;
	    EXP ZI1451;
	    EXP ZI1450;
	    EXP ZI1449;
	    EXP ZI1448;
	    EXP ZI1447;
	    EXP ZI1446;
	    EXP ZI1268;
	    EXP ZI1292;
	    EXP ZI1537;
	    int ZI674;
	    EXP ZI1583;
	    EXP ZI497;

	    {

    IDENTIFIER id = crt_token->pp_data.tok.id;
    PPTOKEN *args = crt_token->pp_data.tok.args;
    ZI1284 = parse_exp_token (id, args);
    RESCAN_LEXER;
	    }
	    ADVANCE_LEXER;
	    ZR1245 (ZI1284, &ZI1457);
	    ZR1241 (ZI1457, &ZI1456);
	    ZR1237 (ZI1456, &ZI1455);
	    ZR1233 (ZI1455, &ZI1454);
	    ZR1229 (ZI1454, &ZI1453);
	    ZR1225 (ZI1453, &ZI1452);
	    ZR1221 (ZI1452, &ZI1451);
	    ZR1217 (ZI1451, &ZI1450);
	    ZR1213 (ZI1450, &ZI1449);
	    ZR1209 (ZI1449, &ZI1448);
	    ZR1205 (ZI1448, &ZI1447);
	    ZR1201 (ZI1447, &ZI1446);
	    ZR1197 (ZI1446, &ZI1268);
	    ZR1269 (&ZI1268, &ZI1292);
	    ZR1294 (&ZI1292, &ZI1537);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI674) = unreached_code;
    if ((ZI674)) {
	if (!unreached_last) {
	    report (crt_loc, ERR_stmt_stmt_unreach ());
	    unreached_last = 1;
	}
    } else {
	unreached_last = 0;
    }
	    }
	    {

    (ZI1583) = make_exp_stmt ((ZI1537));
	    }
	    {

    unreached_fall = 1;
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_semicolon:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI497) = add_compound_stmt ((ZI562), (ZI1583));
	    }
	    {

    (ZI435) = end_compound_stmt ((ZI497));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      case lex_complex_Hstmt:
	{
	    EXP ZI1515;
	    EXP ZI1553;
	    EXP ZI497;

	    {

    IDENTIFIER id = crt_token->pp_data.tok.id;
    PPTOKEN *args = crt_token->pp_data.tok.args;
    ZI1515 = parse_exp_token (id, args);
    RESCAN_LEXER;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI1553) = make_exp_stmt ((ZI1515));
	    }
	    {

    (ZI497) = add_compound_stmt ((ZI562), (ZI1553));
	    }
	    {

    (ZI435) = end_compound_stmt ((ZI497));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      case lex_complex_Htype:
	{
	    TYPE ZI1270;
	    BASE_TYPE ZI515;
	    CV_SPEC ZI788;
	    TYPE ZI418;
	    SID_LIST_EXP ZI501;
	    EXP ZI1287;
	    EXP ZI1457;
	    EXP ZI1456;
	    EXP ZI1455;
	    EXP ZI1454;
	    EXP ZI1453;
	    EXP ZI1452;
	    EXP ZI1451;
	    EXP ZI1450;
	    EXP ZI1449;
	    EXP ZI1448;
	    EXP ZI1447;
	    EXP ZI1446;
	    EXP ZI1268;
	    EXP ZI1292;
	    EXP ZI1539;
	    int ZI674;
	    EXP ZI1585;
	    EXP ZI497;

	    {

    IDENTIFIER id = crt_token->pp_data.tok.id;
    PPTOKEN *args = crt_token->pp_data.tok.args;
    ZI1270 = parse_type_token (id, args);
    have_type_declaration = TYPE_DECL_NONE;
    have_type_specifier = 1;
    RESCAN_LEXER;
	    }
	    ADVANCE_LEXER;
	    {
 (ZI515) = btype_none; 
	    }
	    {
 (ZI788) = cv_none; 
	    }
	    {

    (ZI418) = complete_pre_type ((ZI515), (ZI1270), (ZI788), 1);
    have_type_specifier = 0;
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_open_Hround:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    ZR504 (&ZI501);
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      case 358:
		RESTORE_LEXER;
		goto ZL1;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI1287) = make_func_cast_exp ((ZI418), (ZI501));
	    }
	    ZR1245 (ZI1287, &ZI1457);
	    ZR1241 (ZI1457, &ZI1456);
	    ZR1237 (ZI1456, &ZI1455);
	    ZR1233 (ZI1455, &ZI1454);
	    ZR1229 (ZI1454, &ZI1453);
	    ZR1225 (ZI1453, &ZI1452);
	    ZR1221 (ZI1452, &ZI1451);
	    ZR1217 (ZI1451, &ZI1450);
	    ZR1213 (ZI1450, &ZI1449);
	    ZR1209 (ZI1449, &ZI1448);
	    ZR1205 (ZI1448, &ZI1447);
	    ZR1201 (ZI1447, &ZI1446);
	    ZR1197 (ZI1446, &ZI1268);
	    ZR1269 (&ZI1268, &ZI1292);
	    ZR1294 (&ZI1292, &ZI1539);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI674) = unreached_code;
    if ((ZI674)) {
	if (!unreached_last) {
	    report (crt_loc, ERR_stmt_stmt_unreach ());
	    unreached_last = 1;
	}
    } else {
	unreached_last = 0;
    }
	    }
	    {

    (ZI1585) = make_exp_stmt ((ZI1539));
	    }
	    {

    unreached_fall = 1;
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_semicolon:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI497) = add_compound_stmt ((ZI562), (ZI1585));
	    }
	    {

    (ZI435) = end_compound_stmt ((ZI497));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      case lex_const_Hcast:
	{
	    TYPE ZI418;
	    EXP ZI1465;
	    int ZI555;
	    EXP ZI1276;
	    EXP ZI1457;
	    EXP ZI1456;
	    EXP ZI1455;
	    EXP ZI1454;
	    EXP ZI1453;
	    EXP ZI1452;
	    EXP ZI1451;
	    EXP ZI1450;
	    EXP ZI1449;
	    EXP ZI1448;
	    EXP ZI1447;
	    EXP ZI1446;
	    EXP ZI1268;
	    EXP ZI1292;
	    EXP ZI1530;
	    int ZI674;
	    EXP ZI1576;
	    EXP ZI497;

	    ADVANCE_LEXER;
	    ZR556 (&ZI418, &ZI1465, &ZI555);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    /* n is the number of type definitions in t */
    (ZI1276) = make_const_cast_exp ((ZI418), (ZI1465), (ZI555));
	    }
	    ZR1245 (ZI1276, &ZI1457);
	    ZR1241 (ZI1457, &ZI1456);
	    ZR1237 (ZI1456, &ZI1455);
	    ZR1233 (ZI1455, &ZI1454);
	    ZR1229 (ZI1454, &ZI1453);
	    ZR1225 (ZI1453, &ZI1452);
	    ZR1221 (ZI1452, &ZI1451);
	    ZR1217 (ZI1451, &ZI1450);
	    ZR1213 (ZI1450, &ZI1449);
	    ZR1209 (ZI1449, &ZI1448);
	    ZR1205 (ZI1448, &ZI1447);
	    ZR1201 (ZI1447, &ZI1446);
	    ZR1197 (ZI1446, &ZI1268);
	    ZR1269 (&ZI1268, &ZI1292);
	    ZR1294 (&ZI1292, &ZI1530);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI674) = unreached_code;
    if ((ZI674)) {
	if (!unreached_last) {
	    report (crt_loc, ERR_stmt_stmt_unreach ());
	    unreached_last = 1;
	}
    } else {
	unreached_last = 0;
    }
	    }
	    {

    (ZI1576) = make_exp_stmt ((ZI1530));
	    }
	    {

    unreached_fall = 1;
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_semicolon:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI497) = add_compound_stmt ((ZI562), (ZI1576));
	    }
	    {

    (ZI435) = end_compound_stmt ((ZI497));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      case lex_destructor_Hname:
	{
	    IDENTIFIER ZI482;
	    IDENTIFIER ZI423;
	    EXP ZI1288;
	    EXP ZI1457;
	    EXP ZI1456;
	    EXP ZI1455;
	    EXP ZI1454;
	    EXP ZI1453;
	    EXP ZI1452;
	    EXP ZI1451;
	    EXP ZI1450;
	    EXP ZI1449;
	    EXP ZI1448;
	    EXP ZI1447;
	    EXP ZI1446;
	    EXP ZI1268;
	    EXP ZI1292;
	    EXP ZI1542;
	    int ZI674;
	    EXP ZI1588;
	    EXP ZI497;

	    {

    ZI482 = crt_token->pp_data.id.use;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI423) = check_id (NULL_nspace, (ZI482), 0);
    crt_id_qualifier = qual_none;
    last_namespace = crt_namespace;
	    }
	    {

    (ZI1288) = make_id_exp ((ZI423));
	    }
	    ZR1245 (ZI1288, &ZI1457);
	    ZR1241 (ZI1457, &ZI1456);
	    ZR1237 (ZI1456, &ZI1455);
	    ZR1233 (ZI1455, &ZI1454);
	    ZR1229 (ZI1454, &ZI1453);
	    ZR1225 (ZI1453, &ZI1452);
	    ZR1221 (ZI1452, &ZI1451);
	    ZR1217 (ZI1451, &ZI1450);
	    ZR1213 (ZI1450, &ZI1449);
	    ZR1209 (ZI1449, &ZI1448);
	    ZR1205 (ZI1448, &ZI1447);
	    ZR1201 (ZI1447, &ZI1446);
	    ZR1197 (ZI1446, &ZI1268);
	    ZR1269 (&ZI1268, &ZI1292);
	    ZR1294 (&ZI1292, &ZI1542);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI674) = unreached_code;
    if ((ZI674)) {
	if (!unreached_last) {
	    report (crt_loc, ERR_stmt_stmt_unreach ());
	    unreached_last = 1;
	}
    } else {
	unreached_last = 0;
    }
	    }
	    {

    (ZI1588) = make_exp_stmt ((ZI1542));
	    }
	    {

    unreached_fall = 1;
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_semicolon:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI497) = add_compound_stmt ((ZI562), (ZI1588));
	    }
	    {

    (ZI435) = end_compound_stmt ((ZI497));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      case lex_discard:
	{
	    EXP ZI1458;
	    EXP ZI1457;
	    EXP ZI1456;
	    EXP ZI1455;
	    EXP ZI1454;
	    EXP ZI1453;
	    EXP ZI1452;
	    EXP ZI1451;
	    EXP ZI1450;
	    EXP ZI1449;
	    EXP ZI1448;
	    EXP ZI1447;
	    EXP ZI1446;
	    EXP ZI1268;
	    EXP ZI1292;
	    EXP ZI1519;
	    int ZI674;
	    EXP ZI1565;
	    EXP ZI497;

	    ADVANCE_LEXER;
	    ZR585 (&ZI1458);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI1457) = make_cast_exp (type_void, (ZI1458), 0);
	    }
	    ZR1241 (ZI1457, &ZI1456);
	    ZR1237 (ZI1456, &ZI1455);
	    ZR1233 (ZI1455, &ZI1454);
	    ZR1229 (ZI1454, &ZI1453);
	    ZR1225 (ZI1453, &ZI1452);
	    ZR1221 (ZI1452, &ZI1451);
	    ZR1217 (ZI1451, &ZI1450);
	    ZR1213 (ZI1450, &ZI1449);
	    ZR1209 (ZI1449, &ZI1448);
	    ZR1205 (ZI1448, &ZI1447);
	    ZR1201 (ZI1447, &ZI1446);
	    ZR1197 (ZI1446, &ZI1268);
	    ZR1269 (&ZI1268, &ZI1292);
	    ZR1294 (&ZI1292, &ZI1519);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI674) = unreached_code;
    if ((ZI674)) {
	if (!unreached_last) {
	    report (crt_loc, ERR_stmt_stmt_unreach ());
	    unreached_last = 1;
	}
    } else {
	unreached_last = 0;
    }
	    }
	    {

    (ZI1565) = make_exp_stmt ((ZI1519));
	    }
	    {

    unreached_fall = 1;
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_semicolon:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI497) = add_compound_stmt ((ZI562), (ZI1565));
	    }
	    {

    (ZI435) = end_compound_stmt ((ZI497));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      case lex_dynamic_Hcast:
	{
	    TYPE ZI418;
	    EXP ZI1468;
	    int ZI555;
	    EXP ZI1279;
	    EXP ZI1457;
	    EXP ZI1456;
	    EXP ZI1455;
	    EXP ZI1454;
	    EXP ZI1453;
	    EXP ZI1452;
	    EXP ZI1451;
	    EXP ZI1450;
	    EXP ZI1449;
	    EXP ZI1448;
	    EXP ZI1447;
	    EXP ZI1446;
	    EXP ZI1268;
	    EXP ZI1292;
	    EXP ZI1533;
	    int ZI674;
	    EXP ZI1579;
	    EXP ZI497;

	    ADVANCE_LEXER;
	    ZR556 (&ZI418, &ZI1468, &ZI555);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    /* n is the number of type definitions in t */
    (ZI1279) = make_dynamic_cast_exp ((ZI418), (ZI1468), (ZI555));
	    }
	    ZR1245 (ZI1279, &ZI1457);
	    ZR1241 (ZI1457, &ZI1456);
	    ZR1237 (ZI1456, &ZI1455);
	    ZR1233 (ZI1455, &ZI1454);
	    ZR1229 (ZI1454, &ZI1453);
	    ZR1225 (ZI1453, &ZI1452);
	    ZR1221 (ZI1452, &ZI1451);
	    ZR1217 (ZI1451, &ZI1450);
	    ZR1213 (ZI1450, &ZI1449);
	    ZR1209 (ZI1449, &ZI1448);
	    ZR1205 (ZI1448, &ZI1447);
	    ZR1201 (ZI1447, &ZI1446);
	    ZR1197 (ZI1446, &ZI1268);
	    ZR1269 (&ZI1268, &ZI1292);
	    ZR1294 (&ZI1292, &ZI1533);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI674) = unreached_code;
    if ((ZI674)) {
	if (!unreached_last) {
	    report (crt_loc, ERR_stmt_stmt_unreach ());
	    unreached_last = 1;
	}
    } else {
	unreached_last = 0;
    }
	    }
	    {

    (ZI1579) = make_exp_stmt ((ZI1533));
	    }
	    {

    unreached_fall = 1;
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_semicolon:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI497) = add_compound_stmt ((ZI562), (ZI1579));
	    }
	    {

    (ZI435) = end_compound_stmt ((ZI497));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      case lex_ellipsis_Hexp:
	{
	    EXP ZI1282;
	    EXP ZI1457;
	    EXP ZI1456;
	    EXP ZI1455;
	    EXP ZI1454;
	    EXP ZI1453;
	    EXP ZI1452;
	    EXP ZI1451;
	    EXP ZI1450;
	    EXP ZI1449;
	    EXP ZI1448;
	    EXP ZI1447;
	    EXP ZI1446;
	    EXP ZI1268;
	    EXP ZI1292;
	    EXP ZI1536;
	    int ZI674;
	    EXP ZI1582;
	    EXP ZI497;

	    ADVANCE_LEXER;
	    {

    (ZI1282) = make_ellipsis_exp ();
	    }
	    ZR1245 (ZI1282, &ZI1457);
	    ZR1241 (ZI1457, &ZI1456);
	    ZR1237 (ZI1456, &ZI1455);
	    ZR1233 (ZI1455, &ZI1454);
	    ZR1229 (ZI1454, &ZI1453);
	    ZR1225 (ZI1453, &ZI1452);
	    ZR1221 (ZI1452, &ZI1451);
	    ZR1217 (ZI1451, &ZI1450);
	    ZR1213 (ZI1450, &ZI1449);
	    ZR1209 (ZI1449, &ZI1448);
	    ZR1205 (ZI1448, &ZI1447);
	    ZR1201 (ZI1447, &ZI1446);
	    ZR1197 (ZI1446, &ZI1268);
	    ZR1269 (&ZI1268, &ZI1292);
	    ZR1294 (&ZI1292, &ZI1536);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI674) = unreached_code;
    if ((ZI674)) {
	if (!unreached_last) {
	    report (crt_loc, ERR_stmt_stmt_unreach ());
	    unreached_last = 1;
	}
    } else {
	unreached_last = 0;
    }
	    }
	    {

    (ZI1582) = make_exp_stmt ((ZI1536));
	    }
	    {

    unreached_fall = 1;
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_semicolon:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI497) = add_compound_stmt ((ZI562), (ZI1582));
	    }
	    {

    (ZI435) = end_compound_stmt ((ZI497));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      case lex_full_Hname:
	{
	    NAMESPACE ZI429;
	    EXP ZI1562;
	    EXP ZI497;

	    {

    ZI429 = crt_token->pp_data.ns;
	    }
	    ADVANCE_LEXER;
	    ZR1478 (&ZI429, &ZI1562);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI497) = add_compound_stmt ((ZI562), (ZI1562));
	    }
	    {

    (ZI435) = end_compound_stmt ((ZI497));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      case lex_identifier:
	{
	    IDENTIFIER ZI1469;
	    EXP ZI1557;
	    EXP ZI497;

	    {

    ZI1469 = crt_token->pp_data.id.use;
	    }
	    ADVANCE_LEXER;
	    ZR1474 (&ZI1469, &ZI1557);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI497) = add_compound_stmt ((ZI562), (ZI1557));
	    }
	    {

    (ZI435) = end_compound_stmt ((ZI497));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      case lex_inset_Hstart:
	{
	    EXP ZI1552;
	    EXP ZI497;

	    ADVANCE_LEXER;
	    ZR1444 (&ZI1552);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI497) = add_compound_stmt ((ZI562), (ZI1552));
	    }
	    {

    (ZI435) = end_compound_stmt ((ZI497));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      case lex_minus_Hminus:
	{
	    EXP ZI1460;
	    EXP ZI1457;
	    EXP ZI1456;
	    EXP ZI1455;
	    EXP ZI1454;
	    EXP ZI1453;
	    EXP ZI1452;
	    EXP ZI1451;
	    EXP ZI1450;
	    EXP ZI1449;
	    EXP ZI1448;
	    EXP ZI1447;
	    EXP ZI1446;
	    EXP ZI1268;
	    EXP ZI1292;
	    EXP ZI1521;
	    int ZI674;
	    EXP ZI1567;
	    EXP ZI497;

	    ADVANCE_LEXER;
	    ZR585 (&ZI1460);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI1457) = make_prefix_exp (lex_minus_Hminus, (ZI1460));
	    }
	    ZR1241 (ZI1457, &ZI1456);
	    ZR1237 (ZI1456, &ZI1455);
	    ZR1233 (ZI1455, &ZI1454);
	    ZR1229 (ZI1454, &ZI1453);
	    ZR1225 (ZI1453, &ZI1452);
	    ZR1221 (ZI1452, &ZI1451);
	    ZR1217 (ZI1451, &ZI1450);
	    ZR1213 (ZI1450, &ZI1449);
	    ZR1209 (ZI1449, &ZI1448);
	    ZR1205 (ZI1448, &ZI1447);
	    ZR1201 (ZI1447, &ZI1446);
	    ZR1197 (ZI1446, &ZI1268);
	    ZR1269 (&ZI1268, &ZI1292);
	    ZR1294 (&ZI1292, &ZI1521);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI674) = unreached_code;
    if ((ZI674)) {
	if (!unreached_last) {
	    report (crt_loc, ERR_stmt_stmt_unreach ());
	    unreached_last = 1;
	}
    } else {
	unreached_last = 0;
    }
	    }
	    {

    (ZI1567) = make_exp_stmt ((ZI1521));
	    }
	    {

    unreached_fall = 1;
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_semicolon:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI497) = add_compound_stmt ((ZI562), (ZI1567));
	    }
	    {

    (ZI435) = end_compound_stmt ((ZI497));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      case lex_namespace_Hname:
	{
	    IDENTIFIER ZI1473;
	    EXP ZI1559;
	    EXP ZI497;

	    {

    ZI1473 = crt_token->pp_data.id.use;
	    }
	    ADVANCE_LEXER;
	    ZR1474 (&ZI1473, &ZI1559);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI497) = add_compound_stmt ((ZI562), (ZI1559));
	    }
	    {

    (ZI435) = end_compound_stmt ((ZI497));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      case lex_nested_Hname:
	{
	    NAMESPACE ZI429;
	    EXP ZI1561;
	    EXP ZI497;

	    {

    ZI429 = crt_token->pp_data.ns;
	    }
	    ADVANCE_LEXER;
	    ZR1477 (&ZI429, &ZI1561);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI497) = add_compound_stmt ((ZI562), (ZI1561));
	    }
	    {

    (ZI435) = end_compound_stmt ((ZI497));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      case lex_open_Hround:
	{
	    EXP ZI1457;
	    EXP ZI1456;
	    EXP ZI1455;
	    EXP ZI1454;
	    EXP ZI1453;
	    EXP ZI1452;
	    EXP ZI1451;
	    EXP ZI1450;
	    EXP ZI1449;
	    EXP ZI1448;
	    EXP ZI1447;
	    EXP ZI1446;
	    EXP ZI1268;
	    EXP ZI1292;
	    EXP ZI1518;
	    int ZI674;
	    EXP ZI1564;
	    EXP ZI497;

	    ADVANCE_LEXER;
	    ZR1291 (&ZI1457);
	    ZR1241 (ZI1457, &ZI1456);
	    ZR1237 (ZI1456, &ZI1455);
	    ZR1233 (ZI1455, &ZI1454);
	    ZR1229 (ZI1454, &ZI1453);
	    ZR1225 (ZI1453, &ZI1452);
	    ZR1221 (ZI1452, &ZI1451);
	    ZR1217 (ZI1451, &ZI1450);
	    ZR1213 (ZI1450, &ZI1449);
	    ZR1209 (ZI1449, &ZI1448);
	    ZR1205 (ZI1448, &ZI1447);
	    ZR1201 (ZI1447, &ZI1446);
	    ZR1197 (ZI1446, &ZI1268);
	    ZR1269 (&ZI1268, &ZI1292);
	    ZR1294 (&ZI1292, &ZI1518);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI674) = unreached_code;
    if ((ZI674)) {
	if (!unreached_last) {
	    report (crt_loc, ERR_stmt_stmt_unreach ());
	    unreached_last = 1;
	}
    } else {
	unreached_last = 0;
    }
	    }
	    {

    (ZI1564) = make_exp_stmt ((ZI1518));
	    }
	    {

    unreached_fall = 1;
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_semicolon:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI497) = add_compound_stmt ((ZI562), (ZI1564));
	    }
	    {

    (ZI435) = end_compound_stmt ((ZI497));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      case lex_plus_Hplus:
	{
	    EXP ZI1459;
	    EXP ZI1457;
	    EXP ZI1456;
	    EXP ZI1455;
	    EXP ZI1454;
	    EXP ZI1453;
	    EXP ZI1452;
	    EXP ZI1451;
	    EXP ZI1450;
	    EXP ZI1449;
	    EXP ZI1448;
	    EXP ZI1447;
	    EXP ZI1446;
	    EXP ZI1268;
	    EXP ZI1292;
	    EXP ZI1520;
	    int ZI674;
	    EXP ZI1566;
	    EXP ZI497;

	    ADVANCE_LEXER;
	    ZR585 (&ZI1459);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI1457) = make_prefix_exp (lex_plus_Hplus, (ZI1459));
	    }
	    ZR1241 (ZI1457, &ZI1456);
	    ZR1237 (ZI1456, &ZI1455);
	    ZR1233 (ZI1455, &ZI1454);
	    ZR1229 (ZI1454, &ZI1453);
	    ZR1225 (ZI1453, &ZI1452);
	    ZR1221 (ZI1452, &ZI1451);
	    ZR1217 (ZI1451, &ZI1450);
	    ZR1213 (ZI1450, &ZI1449);
	    ZR1209 (ZI1449, &ZI1448);
	    ZR1205 (ZI1448, &ZI1447);
	    ZR1201 (ZI1447, &ZI1446);
	    ZR1197 (ZI1446, &ZI1268);
	    ZR1269 (&ZI1268, &ZI1292);
	    ZR1294 (&ZI1292, &ZI1520);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI674) = unreached_code;
    if ((ZI674)) {
	if (!unreached_last) {
	    report (crt_loc, ERR_stmt_stmt_unreach ());
	    unreached_last = 1;
	}
    } else {
	unreached_last = 0;
    }
	    }
	    {

    (ZI1566) = make_exp_stmt ((ZI1520));
	    }
	    {

    unreached_fall = 1;
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_semicolon:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI497) = add_compound_stmt ((ZI562), (ZI1566));
	    }
	    {

    (ZI435) = end_compound_stmt ((ZI497));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      case lex_reinterpret_Hcast:
	{
	    TYPE ZI418;
	    EXP ZI1466;
	    int ZI555;
	    EXP ZI1277;
	    EXP ZI1457;
	    EXP ZI1456;
	    EXP ZI1455;
	    EXP ZI1454;
	    EXP ZI1453;
	    EXP ZI1452;
	    EXP ZI1451;
	    EXP ZI1450;
	    EXP ZI1449;
	    EXP ZI1448;
	    EXP ZI1447;
	    EXP ZI1446;
	    EXP ZI1268;
	    EXP ZI1292;
	    EXP ZI1531;
	    int ZI674;
	    EXP ZI1577;
	    EXP ZI497;

	    ADVANCE_LEXER;
	    ZR556 (&ZI418, &ZI1466, &ZI555);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    /* n is the number of type definitions in t */
    (ZI1277) = make_reinterp_cast_exp ((ZI418), (ZI1466), (ZI555));
	    }
	    ZR1245 (ZI1277, &ZI1457);
	    ZR1241 (ZI1457, &ZI1456);
	    ZR1237 (ZI1456, &ZI1455);
	    ZR1233 (ZI1455, &ZI1454);
	    ZR1229 (ZI1454, &ZI1453);
	    ZR1225 (ZI1453, &ZI1452);
	    ZR1221 (ZI1452, &ZI1451);
	    ZR1217 (ZI1451, &ZI1450);
	    ZR1213 (ZI1450, &ZI1449);
	    ZR1209 (ZI1449, &ZI1448);
	    ZR1205 (ZI1448, &ZI1447);
	    ZR1201 (ZI1447, &ZI1446);
	    ZR1197 (ZI1446, &ZI1268);
	    ZR1269 (&ZI1268, &ZI1292);
	    ZR1294 (&ZI1292, &ZI1531);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI674) = unreached_code;
    if ((ZI674)) {
	if (!unreached_last) {
	    report (crt_loc, ERR_stmt_stmt_unreach ());
	    unreached_last = 1;
	}
    } else {
	unreached_last = 0;
    }
	    }
	    {

    (ZI1577) = make_exp_stmt ((ZI1531));
	    }
	    {

    unreached_fall = 1;
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_semicolon:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI497) = add_compound_stmt ((ZI562), (ZI1577));
	    }
	    {

    (ZI435) = end_compound_stmt ((ZI497));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      case lex_semicolon:
	{
	    EXP ZI1550;
	    EXP ZI497;

	    ADVANCE_LEXER;
	    {

    (ZI1550) = NULL_exp;
	    }
	    {

    (ZI497) = add_compound_stmt ((ZI562), (ZI1550));
	    }
	    {

    (ZI435) = end_compound_stmt ((ZI497));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      case lex_sizeof:
	{
	    int ZI454;
	    EXP ZI1457;
	    EXP ZI1456;
	    EXP ZI1455;
	    EXP ZI1454;
	    EXP ZI1453;
	    EXP ZI1452;
	    EXP ZI1451;
	    EXP ZI1450;
	    EXP ZI1449;
	    EXP ZI1448;
	    EXP ZI1447;
	    EXP ZI1446;
	    EXP ZI1268;
	    EXP ZI1292;
	    EXP ZI1526;
	    int ZI674;
	    EXP ZI1572;
	    EXP ZI497;

	    ADVANCE_LEXER;
	    {
 (ZI454) = lex_sizeof; 
	    }
	    ZR597 (ZI454, &ZI1457);
	    ZR1241 (ZI1457, &ZI1456);
	    ZR1237 (ZI1456, &ZI1455);
	    ZR1233 (ZI1455, &ZI1454);
	    ZR1229 (ZI1454, &ZI1453);
	    ZR1225 (ZI1453, &ZI1452);
	    ZR1221 (ZI1452, &ZI1451);
	    ZR1217 (ZI1451, &ZI1450);
	    ZR1213 (ZI1450, &ZI1449);
	    ZR1209 (ZI1449, &ZI1448);
	    ZR1205 (ZI1448, &ZI1447);
	    ZR1201 (ZI1447, &ZI1446);
	    ZR1197 (ZI1446, &ZI1268);
	    ZR1269 (&ZI1268, &ZI1292);
	    ZR1294 (&ZI1292, &ZI1526);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI674) = unreached_code;
    if ((ZI674)) {
	if (!unreached_last) {
	    report (crt_loc, ERR_stmt_stmt_unreach ());
	    unreached_last = 1;
	}
    } else {
	unreached_last = 0;
    }
	    }
	    {

    (ZI1572) = make_exp_stmt ((ZI1526));
	    }
	    {

    unreached_fall = 1;
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_semicolon:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI497) = add_compound_stmt ((ZI562), (ZI1572));
	    }
	    {

    (ZI435) = end_compound_stmt ((ZI497));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      case lex_star:
	{
	    EXP ZI1461;
	    EXP ZI1457;
	    EXP ZI1456;
	    EXP ZI1455;
	    EXP ZI1454;
	    EXP ZI1453;
	    EXP ZI1452;
	    EXP ZI1451;
	    EXP ZI1450;
	    EXP ZI1449;
	    EXP ZI1448;
	    EXP ZI1447;
	    EXP ZI1446;
	    EXP ZI1268;
	    EXP ZI1292;
	    EXP ZI1522;
	    int ZI674;
	    EXP ZI1568;
	    EXP ZI497;

	    ADVANCE_LEXER;
	    ZR585 (&ZI1461);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI1457) = make_indir_exp ((ZI1461));
	    }
	    ZR1241 (ZI1457, &ZI1456);
	    ZR1237 (ZI1456, &ZI1455);
	    ZR1233 (ZI1455, &ZI1454);
	    ZR1229 (ZI1454, &ZI1453);
	    ZR1225 (ZI1453, &ZI1452);
	    ZR1221 (ZI1452, &ZI1451);
	    ZR1217 (ZI1451, &ZI1450);
	    ZR1213 (ZI1450, &ZI1449);
	    ZR1209 (ZI1449, &ZI1448);
	    ZR1205 (ZI1448, &ZI1447);
	    ZR1201 (ZI1447, &ZI1446);
	    ZR1197 (ZI1446, &ZI1268);
	    ZR1269 (&ZI1268, &ZI1292);
	    ZR1294 (&ZI1292, &ZI1522);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI674) = unreached_code;
    if ((ZI674)) {
	if (!unreached_last) {
	    report (crt_loc, ERR_stmt_stmt_unreach ());
	    unreached_last = 1;
	}
    } else {
	unreached_last = 0;
    }
	    }
	    {

    (ZI1568) = make_exp_stmt ((ZI1522));
	    }
	    {

    unreached_fall = 1;
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_semicolon:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI497) = add_compound_stmt ((ZI562), (ZI1568));
	    }
	    {

    (ZI435) = end_compound_stmt ((ZI497));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      case lex_statement_Hname:
	{
	    IDENTIFIER ZI1475;
	    EXP ZI1560;
	    EXP ZI497;

	    {

    ZI1475 = crt_token->pp_data.id.use;
	    }
	    ADVANCE_LEXER;
	    ZR1476 (&ZI1475, &ZI1560);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI497) = add_compound_stmt ((ZI562), (ZI1560));
	    }
	    {

    (ZI435) = end_compound_stmt ((ZI497));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      case lex_static_Hcast:
	{
	    TYPE ZI418;
	    EXP ZI1467;
	    int ZI555;
	    EXP ZI1278;
	    EXP ZI1457;
	    EXP ZI1456;
	    EXP ZI1455;
	    EXP ZI1454;
	    EXP ZI1453;
	    EXP ZI1452;
	    EXP ZI1451;
	    EXP ZI1450;
	    EXP ZI1449;
	    EXP ZI1448;
	    EXP ZI1447;
	    EXP ZI1446;
	    EXP ZI1268;
	    EXP ZI1292;
	    EXP ZI1532;
	    int ZI674;
	    EXP ZI1578;
	    EXP ZI497;

	    ADVANCE_LEXER;
	    ZR556 (&ZI418, &ZI1467, &ZI555);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI1278) = make_static_cast_exp ((ZI418), (ZI1467), (ZI555));
	    }
	    ZR1245 (ZI1278, &ZI1457);
	    ZR1241 (ZI1457, &ZI1456);
	    ZR1237 (ZI1456, &ZI1455);
	    ZR1233 (ZI1455, &ZI1454);
	    ZR1229 (ZI1454, &ZI1453);
	    ZR1225 (ZI1453, &ZI1452);
	    ZR1221 (ZI1452, &ZI1451);
	    ZR1217 (ZI1451, &ZI1450);
	    ZR1213 (ZI1450, &ZI1449);
	    ZR1209 (ZI1449, &ZI1448);
	    ZR1205 (ZI1448, &ZI1447);
	    ZR1201 (ZI1447, &ZI1446);
	    ZR1197 (ZI1446, &ZI1268);
	    ZR1269 (&ZI1268, &ZI1292);
	    ZR1294 (&ZI1292, &ZI1532);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI674) = unreached_code;
    if ((ZI674)) {
	if (!unreached_last) {
	    report (crt_loc, ERR_stmt_stmt_unreach ());
	    unreached_last = 1;
	}
    } else {
	unreached_last = 0;
    }
	    }
	    {

    (ZI1578) = make_exp_stmt ((ZI1532));
	    }
	    {

    unreached_fall = 1;
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_semicolon:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI497) = add_compound_stmt ((ZI562), (ZI1578));
	    }
	    {

    (ZI435) = end_compound_stmt ((ZI497));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      case lex_template_Hid:
	{
	    IDENTIFIER ZI482;
	    IDENTIFIER ZI423;
	    EXP ZI1288;
	    EXP ZI1457;
	    EXP ZI1456;
	    EXP ZI1455;
	    EXP ZI1454;
	    EXP ZI1453;
	    EXP ZI1452;
	    EXP ZI1451;
	    EXP ZI1450;
	    EXP ZI1449;
	    EXP ZI1448;
	    EXP ZI1447;
	    EXP ZI1446;
	    EXP ZI1268;
	    EXP ZI1292;
	    EXP ZI1543;
	    int ZI674;
	    EXP ZI1589;
	    EXP ZI497;

	    {

    IDENTIFIER id = crt_token->pp_data.tok.id;
    PPTOKEN *args = crt_token->pp_data.tok.args;
    ZI482 = parse_id_template (id, args, 0);
    crt_templ_qualifier = 1;
    RESCAN_LEXER;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI423) = check_id (NULL_nspace, (ZI482), 0);
    crt_id_qualifier = qual_none;
    last_namespace = crt_namespace;
	    }
	    {

    (ZI1288) = make_id_exp ((ZI423));
	    }
	    ZR1245 (ZI1288, &ZI1457);
	    ZR1241 (ZI1457, &ZI1456);
	    ZR1237 (ZI1456, &ZI1455);
	    ZR1233 (ZI1455, &ZI1454);
	    ZR1229 (ZI1454, &ZI1453);
	    ZR1225 (ZI1453, &ZI1452);
	    ZR1221 (ZI1452, &ZI1451);
	    ZR1217 (ZI1451, &ZI1450);
	    ZR1213 (ZI1450, &ZI1449);
	    ZR1209 (ZI1449, &ZI1448);
	    ZR1205 (ZI1448, &ZI1447);
	    ZR1201 (ZI1447, &ZI1446);
	    ZR1197 (ZI1446, &ZI1268);
	    ZR1269 (&ZI1268, &ZI1292);
	    ZR1294 (&ZI1292, &ZI1543);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI674) = unreached_code;
    if ((ZI674)) {
	if (!unreached_last) {
	    report (crt_loc, ERR_stmt_stmt_unreach ());
	    unreached_last = 1;
	}
    } else {
	unreached_last = 0;
    }
	    }
	    {

    (ZI1589) = make_exp_stmt ((ZI1543));
	    }
	    {

    unreached_fall = 1;
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_semicolon:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI497) = add_compound_stmt ((ZI562), (ZI1589));
	    }
	    {

    (ZI435) = end_compound_stmt ((ZI497));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      case lex_template_Htype:
	{
	    IDENTIFIER ZI464;
	    IDENTIFIER ZI423;
	    TYPE ZI1270;
	    BASE_TYPE ZI515;
	    CV_SPEC ZI788;
	    TYPE ZI418;
	    SID_LIST_EXP ZI501;
	    EXP ZI1286;
	    EXP ZI1457;
	    EXP ZI1456;
	    EXP ZI1455;
	    EXP ZI1454;
	    EXP ZI1453;
	    EXP ZI1452;
	    EXP ZI1451;
	    EXP ZI1450;
	    EXP ZI1449;
	    EXP ZI1448;
	    EXP ZI1447;
	    EXP ZI1446;
	    EXP ZI1268;
	    EXP ZI1292;
	    EXP ZI1544;
	    int ZI674;
	    EXP ZI1590;
	    EXP ZI497;

	    {

    IDENTIFIER id = crt_token->pp_data.tok.id;
    PPTOKEN *args = crt_token->pp_data.tok.args;
    ZI464 = parse_type_template (id, args, 0);
    crt_templ_qualifier = 1;
    RESCAN_LEXER;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI423) = (ZI464);
    crt_id_qualifier = qual_none;
    last_namespace = crt_namespace;
	    }
	    {

    MAKE_type_pre (cv_none, btype_alias, crt_id_qualifier, (ZI1270));
    COPY_id (type_name ((ZI1270)), (ZI423));
    have_type_specifier = 1;
	    }
	    {
 (ZI515) = btype_none; 
	    }
	    {
 (ZI788) = cv_none; 
	    }
	    {

    (ZI418) = complete_pre_type ((ZI515), (ZI1270), (ZI788), 1);
    have_type_specifier = 0;
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_open_Hround:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    ZR504 (&ZI501);
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      case 358:
		RESTORE_LEXER;
		goto ZL1;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI1286) = make_func_cast_exp ((ZI418), (ZI501));
	    }
	    ZR1245 (ZI1286, &ZI1457);
	    ZR1241 (ZI1457, &ZI1456);
	    ZR1237 (ZI1456, &ZI1455);
	    ZR1233 (ZI1455, &ZI1454);
	    ZR1229 (ZI1454, &ZI1453);
	    ZR1225 (ZI1453, &ZI1452);
	    ZR1221 (ZI1452, &ZI1451);
	    ZR1217 (ZI1451, &ZI1450);
	    ZR1213 (ZI1450, &ZI1449);
	    ZR1209 (ZI1449, &ZI1448);
	    ZR1205 (ZI1448, &ZI1447);
	    ZR1201 (ZI1447, &ZI1446);
	    ZR1197 (ZI1446, &ZI1268);
	    ZR1269 (&ZI1268, &ZI1292);
	    ZR1294 (&ZI1292, &ZI1544);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI674) = unreached_code;
    if ((ZI674)) {
	if (!unreached_last) {
	    report (crt_loc, ERR_stmt_stmt_unreach ());
	    unreached_last = 1;
	}
    } else {
	unreached_last = 0;
    }
	    }
	    {

    (ZI1590) = make_exp_stmt ((ZI1544));
	    }
	    {

    unreached_fall = 1;
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_semicolon:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI497) = add_compound_stmt ((ZI562), (ZI1590));
	    }
	    {

    (ZI435) = end_compound_stmt ((ZI497));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      case lex_this:
	{
	    EXP ZI1281;
	    EXP ZI1457;
	    EXP ZI1456;
	    EXP ZI1455;
	    EXP ZI1454;
	    EXP ZI1453;
	    EXP ZI1452;
	    EXP ZI1451;
	    EXP ZI1450;
	    EXP ZI1449;
	    EXP ZI1448;
	    EXP ZI1447;
	    EXP ZI1446;
	    EXP ZI1268;
	    EXP ZI1292;
	    EXP ZI1535;
	    int ZI674;
	    EXP ZI1581;
	    EXP ZI497;

	    ADVANCE_LEXER;
	    {

    (ZI1281) = make_this_exp ();
	    }
	    ZR1245 (ZI1281, &ZI1457);
	    ZR1241 (ZI1457, &ZI1456);
	    ZR1237 (ZI1456, &ZI1455);
	    ZR1233 (ZI1455, &ZI1454);
	    ZR1229 (ZI1454, &ZI1453);
	    ZR1225 (ZI1453, &ZI1452);
	    ZR1221 (ZI1452, &ZI1451);
	    ZR1217 (ZI1451, &ZI1450);
	    ZR1213 (ZI1450, &ZI1449);
	    ZR1209 (ZI1449, &ZI1448);
	    ZR1205 (ZI1448, &ZI1447);
	    ZR1201 (ZI1447, &ZI1446);
	    ZR1197 (ZI1446, &ZI1268);
	    ZR1269 (&ZI1268, &ZI1292);
	    ZR1294 (&ZI1292, &ZI1535);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI674) = unreached_code;
    if ((ZI674)) {
	if (!unreached_last) {
	    report (crt_loc, ERR_stmt_stmt_unreach ());
	    unreached_last = 1;
	}
    } else {
	unreached_last = 0;
    }
	    }
	    {

    (ZI1581) = make_exp_stmt ((ZI1535));
	    }
	    {

    unreached_fall = 1;
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_semicolon:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI497) = add_compound_stmt ((ZI562), (ZI1581));
	    }
	    {

    (ZI435) = end_compound_stmt ((ZI497));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      case lex_type_Hname:
	{
	    IDENTIFIER ZI1471;
	    EXP ZI1558;
	    EXP ZI497;

	    {

    ZI1471 = crt_token->pp_data.id.use;
	    }
	    ADVANCE_LEXER;
	    ZR1472 (&ZI1471, &ZI1558);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI497) = add_compound_stmt ((ZI562), (ZI1558));
	    }
	    {

    (ZI435) = end_compound_stmt ((ZI497));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      case lex_typeid:
	{
	    int ZI454;
	    EXP ZI1275;
	    EXP ZI1457;
	    EXP ZI1456;
	    EXP ZI1455;
	    EXP ZI1454;
	    EXP ZI1453;
	    EXP ZI1452;
	    EXP ZI1451;
	    EXP ZI1450;
	    EXP ZI1449;
	    EXP ZI1448;
	    EXP ZI1447;
	    EXP ZI1446;
	    EXP ZI1268;
	    EXP ZI1292;
	    EXP ZI1529;
	    int ZI674;
	    EXP ZI1575;
	    EXP ZI497;

	    ADVANCE_LEXER;
	    {
 (ZI454) = lex_typeid; 
	    }
	    ZR557 (ZI454, &ZI1275);
	    ZR1245 (ZI1275, &ZI1457);
	    ZR1241 (ZI1457, &ZI1456);
	    ZR1237 (ZI1456, &ZI1455);
	    ZR1233 (ZI1455, &ZI1454);
	    ZR1229 (ZI1454, &ZI1453);
	    ZR1225 (ZI1453, &ZI1452);
	    ZR1221 (ZI1452, &ZI1451);
	    ZR1217 (ZI1451, &ZI1450);
	    ZR1213 (ZI1450, &ZI1449);
	    ZR1209 (ZI1449, &ZI1448);
	    ZR1205 (ZI1448, &ZI1447);
	    ZR1201 (ZI1447, &ZI1446);
	    ZR1197 (ZI1446, &ZI1268);
	    ZR1269 (&ZI1268, &ZI1292);
	    ZR1294 (&ZI1292, &ZI1529);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI674) = unreached_code;
    if ((ZI674)) {
	if (!unreached_last) {
	    report (crt_loc, ERR_stmt_stmt_unreach ());
	    unreached_last = 1;
	}
    } else {
	unreached_last = 0;
    }
	    }
	    {

    (ZI1575) = make_exp_stmt ((ZI1529));
	    }
	    {

    unreached_fall = 1;
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_semicolon:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI497) = add_compound_stmt ((ZI562), (ZI1575));
	    }
	    {

    (ZI435) = end_compound_stmt ((ZI497));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      case lex_vtable:
	{
	    int ZI454;
	    EXP ZI1274;
	    EXP ZI1457;
	    EXP ZI1456;
	    EXP ZI1455;
	    EXP ZI1454;
	    EXP ZI1453;
	    EXP ZI1452;
	    EXP ZI1451;
	    EXP ZI1450;
	    EXP ZI1449;
	    EXP ZI1448;
	    EXP ZI1447;
	    EXP ZI1446;
	    EXP ZI1268;
	    EXP ZI1292;
	    EXP ZI1528;
	    int ZI674;
	    EXP ZI1574;
	    EXP ZI497;

	    ADVANCE_LEXER;
	    {
 (ZI454) = lex_vtable; 
	    }
	    ZR557 (ZI454, &ZI1274);
	    ZR1245 (ZI1274, &ZI1457);
	    ZR1241 (ZI1457, &ZI1456);
	    ZR1237 (ZI1456, &ZI1455);
	    ZR1233 (ZI1455, &ZI1454);
	    ZR1229 (ZI1454, &ZI1453);
	    ZR1225 (ZI1453, &ZI1452);
	    ZR1221 (ZI1452, &ZI1451);
	    ZR1217 (ZI1451, &ZI1450);
	    ZR1213 (ZI1450, &ZI1449);
	    ZR1209 (ZI1449, &ZI1448);
	    ZR1205 (ZI1448, &ZI1447);
	    ZR1201 (ZI1447, &ZI1446);
	    ZR1197 (ZI1446, &ZI1268);
	    ZR1269 (&ZI1268, &ZI1292);
	    ZR1294 (&ZI1292, &ZI1528);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI674) = unreached_code;
    if ((ZI674)) {
	if (!unreached_last) {
	    report (crt_loc, ERR_stmt_stmt_unreach ());
	    unreached_last = 1;
	}
    } else {
	unreached_last = 0;
    }
	    }
	    {

    (ZI1574) = make_exp_stmt ((ZI1528));
	    }
	    {

    unreached_fall = 1;
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_semicolon:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI497) = add_compound_stmt ((ZI562), (ZI1574));
	    }
	    {

    (ZI435) = end_compound_stmt ((ZI497));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      case lex_and_H1:
	{
	    EXP ZI1462;
	    EXP ZI1457;
	    EXP ZI1456;
	    EXP ZI1455;
	    EXP ZI1454;
	    EXP ZI1453;
	    EXP ZI1452;
	    EXP ZI1451;
	    EXP ZI1450;
	    EXP ZI1449;
	    EXP ZI1448;
	    EXP ZI1447;
	    EXP ZI1446;
	    EXP ZI1268;
	    EXP ZI1292;
	    EXP ZI1523;
	    int ZI674;
	    EXP ZI1569;
	    EXP ZI497;

	    {
		{
		    switch (CURRENT_TERMINAL) {
		      case lex_and_H1:
			break;
		      default:
			goto ZL1;
		    }
		    ADVANCE_LEXER;
		}
	    }
	    ZR585 (&ZI1462);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI1457) = make_ref_exp ((ZI1462), 0);
	    }
	    ZR1241 (ZI1457, &ZI1456);
	    ZR1237 (ZI1456, &ZI1455);
	    ZR1233 (ZI1455, &ZI1454);
	    ZR1229 (ZI1454, &ZI1453);
	    ZR1225 (ZI1453, &ZI1452);
	    ZR1221 (ZI1452, &ZI1451);
	    ZR1217 (ZI1451, &ZI1450);
	    ZR1213 (ZI1450, &ZI1449);
	    ZR1209 (ZI1449, &ZI1448);
	    ZR1205 (ZI1448, &ZI1447);
	    ZR1201 (ZI1447, &ZI1446);
	    ZR1197 (ZI1446, &ZI1268);
	    ZR1269 (&ZI1268, &ZI1292);
	    ZR1294 (&ZI1292, &ZI1523);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI674) = unreached_code;
    if ((ZI674)) {
	if (!unreached_last) {
	    report (crt_loc, ERR_stmt_stmt_unreach ());
	    unreached_last = 1;
	}
    } else {
	unreached_last = 0;
    }
	    }
	    {

    (ZI1569) = make_exp_stmt ((ZI1523));
	    }
	    {

    unreached_fall = 1;
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_semicolon:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI497) = add_compound_stmt ((ZI562), (ZI1569));
	    }
	    {

    (ZI435) = end_compound_stmt ((ZI497));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      case lex_char: case lex_double: case lex_float:
      case lex_int: case lex_long: case lex_short:
      case lex_signed: case lex_unsigned: case lex_void:
      case lex_bool: case lex_wchar_Ht: case lex_bottom:
      case lex_ptrdiff_Ht: case lex_size_Ht:
	{
	    BASE_TYPE ZI515;
	    TYPE ZI1270;
	    CV_SPEC ZI788;
	    TYPE ZI418;
	    SID_LIST_EXP ZI501;
	    EXP ZI1285;
	    EXP ZI1457;
	    EXP ZI1456;
	    EXP ZI1455;
	    EXP ZI1454;
	    EXP ZI1453;
	    EXP ZI1452;
	    EXP ZI1451;
	    EXP ZI1450;
	    EXP ZI1449;
	    EXP ZI1448;
	    EXP ZI1447;
	    EXP ZI1446;
	    EXP ZI1268;
	    EXP ZI1292;
	    EXP ZI1538;
	    int ZI674;
	    EXP ZI1584;
	    EXP ZI497;

	    ZR513 (&ZI515);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI1270) = NULL_type;
    have_type_specifier = 1;
	    }
	    {
 (ZI788) = cv_none; 
	    }
	    {

    (ZI418) = complete_pre_type ((ZI515), (ZI1270), (ZI788), 1);
    have_type_specifier = 0;
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_open_Hround:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    ZR504 (&ZI501);
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      case 358:
		RESTORE_LEXER;
		goto ZL1;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI1285) = make_func_cast_exp ((ZI418), (ZI501));
	    }
	    ZR1245 (ZI1285, &ZI1457);
	    ZR1241 (ZI1457, &ZI1456);
	    ZR1237 (ZI1456, &ZI1455);
	    ZR1233 (ZI1455, &ZI1454);
	    ZR1229 (ZI1454, &ZI1453);
	    ZR1225 (ZI1453, &ZI1452);
	    ZR1221 (ZI1452, &ZI1451);
	    ZR1217 (ZI1451, &ZI1450);
	    ZR1213 (ZI1450, &ZI1449);
	    ZR1209 (ZI1449, &ZI1448);
	    ZR1205 (ZI1448, &ZI1447);
	    ZR1201 (ZI1447, &ZI1446);
	    ZR1197 (ZI1446, &ZI1268);
	    ZR1269 (&ZI1268, &ZI1292);
	    ZR1294 (&ZI1292, &ZI1538);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI674) = unreached_code;
    if ((ZI674)) {
	if (!unreached_last) {
	    report (crt_loc, ERR_stmt_stmt_unreach ());
	    unreached_last = 1;
	}
    } else {
	unreached_last = 0;
    }
	    }
	    {

    (ZI1584) = make_exp_stmt ((ZI1538));
	    }
	    {

    unreached_fall = 1;
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_semicolon:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI497) = add_compound_stmt ((ZI562), (ZI1584));
	    }
	    {

    (ZI435) = end_compound_stmt ((ZI497));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      case lex_reachable: case lex_unreachable:
	{
	    EXP ZI1549;
	    EXP ZI497;

	    ZR780 (&ZI1549);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI497) = add_compound_stmt ((ZI562), (ZI1549));
	    }
	    {

    (ZI435) = end_compound_stmt ((ZI497));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      case lex_case: case lex_default: case lex_fall:
	{
	    EXP ZI1555;
	    EXP ZI497;

	    ZR666 ();
	    ZR1445 (&ZI1555);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI497) = add_compound_stmt ((ZI562), (ZI1555));
	    }
	    {

    (ZI435) = end_compound_stmt ((ZI497));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      case lex_set: case lex_unused:
	{
	    EXP ZI1439;
	    EXP ZI1514;
	    int ZI674;
	    EXP ZI1551;
	    EXP ZI497;

	    ZR647 (&ZI1439);
	    ZR1441 (&ZI1439, &ZI1514);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI674) = unreached_code;
    if ((ZI674)) {
	if (!unreached_last) {
	    report (crt_loc, ERR_stmt_stmt_unreach ());
	    unreached_last = 1;
	}
    } else {
	unreached_last = 0;
    }
	    }
	    {

    (ZI1551) = make_exp_stmt ((ZI1514));
	    }
	    {

    unreached_fall = 1;
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_semicolon:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI497) = add_compound_stmt ((ZI562), (ZI1551));
	    }
	    {

    (ZI435) = end_compound_stmt ((ZI497));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      case lex_do: case lex_for: case lex_while:
	{
	    EXP ZI1546;
	    EXP ZI497;

	    ZR742 (&ZI1546);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI497) = add_compound_stmt ((ZI562), (ZI1546));
	    }
	    {

    (ZI435) = end_compound_stmt ((ZI497));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      case lex_break: case lex_continue: case lex_goto:
      case lex_return:
	{
	    EXP ZI1547;
	    EXP ZI497;

	    ZR756 (&ZI1547);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI497) = add_compound_stmt ((ZI562), (ZI1547));
	    }
	    {

    (ZI435) = end_compound_stmt ((ZI497));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      case lex_char_Hexp: case lex_wchar_Hexp: case lex_string_Hexp:
      case lex_wstring_Hexp: case lex_integer_Hexp: case lex_floating_Hexp:
      case lex_false: case lex_true:
	{
	    EXP ZI1280;
	    EXP ZI1457;
	    EXP ZI1456;
	    EXP ZI1455;
	    EXP ZI1454;
	    EXP ZI1453;
	    EXP ZI1452;
	    EXP ZI1451;
	    EXP ZI1450;
	    EXP ZI1449;
	    EXP ZI1448;
	    EXP ZI1447;
	    EXP ZI1446;
	    EXP ZI1268;
	    EXP ZI1292;
	    EXP ZI1534;
	    int ZI674;
	    EXP ZI1580;
	    EXP ZI497;

	    ZR441 (&ZI1280);
	    ZR1245 (ZI1280, &ZI1457);
	    ZR1241 (ZI1457, &ZI1456);
	    ZR1237 (ZI1456, &ZI1455);
	    ZR1233 (ZI1455, &ZI1454);
	    ZR1229 (ZI1454, &ZI1453);
	    ZR1225 (ZI1453, &ZI1452);
	    ZR1221 (ZI1452, &ZI1451);
	    ZR1217 (ZI1451, &ZI1450);
	    ZR1213 (ZI1450, &ZI1449);
	    ZR1209 (ZI1449, &ZI1448);
	    ZR1205 (ZI1448, &ZI1447);
	    ZR1201 (ZI1447, &ZI1446);
	    ZR1197 (ZI1446, &ZI1268);
	    ZR1269 (&ZI1268, &ZI1292);
	    ZR1294 (&ZI1292, &ZI1534);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI674) = unreached_code;
    if ((ZI674)) {
	if (!unreached_last) {
	    report (crt_loc, ERR_stmt_stmt_unreach ());
	    unreached_last = 1;
	}
    } else {
	unreached_last = 0;
    }
	    }
	    {

    (ZI1580) = make_exp_stmt ((ZI1534));
	    }
	    {

    unreached_fall = 1;
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_semicolon:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI497) = add_compound_stmt ((ZI562), (ZI1580));
	    }
	    {

    (ZI435) = end_compound_stmt ((ZI497));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      case lex_not_H1:
	{
	    EXP ZI1463;
	    EXP ZI1457;
	    EXP ZI1456;
	    EXP ZI1455;
	    EXP ZI1454;
	    EXP ZI1453;
	    EXP ZI1452;
	    EXP ZI1451;
	    EXP ZI1450;
	    EXP ZI1449;
	    EXP ZI1448;
	    EXP ZI1447;
	    EXP ZI1446;
	    EXP ZI1268;
	    EXP ZI1292;
	    EXP ZI1524;
	    int ZI674;
	    EXP ZI1570;
	    EXP ZI497;

	    {
		{
		    switch (CURRENT_TERMINAL) {
		      case lex_not_H1:
			break;
		      default:
			goto ZL1;
		    }
		    ADVANCE_LEXER;
		}
	    }
	    ZR585 (&ZI1463);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI1457) = make_not_exp ((ZI1463));
	    }
	    ZR1241 (ZI1457, &ZI1456);
	    ZR1237 (ZI1456, &ZI1455);
	    ZR1233 (ZI1455, &ZI1454);
	    ZR1229 (ZI1454, &ZI1453);
	    ZR1225 (ZI1453, &ZI1452);
	    ZR1221 (ZI1452, &ZI1451);
	    ZR1217 (ZI1451, &ZI1450);
	    ZR1213 (ZI1450, &ZI1449);
	    ZR1209 (ZI1449, &ZI1448);
	    ZR1205 (ZI1448, &ZI1447);
	    ZR1201 (ZI1447, &ZI1446);
	    ZR1197 (ZI1446, &ZI1268);
	    ZR1269 (&ZI1268, &ZI1292);
	    ZR1294 (&ZI1292, &ZI1524);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI674) = unreached_code;
    if ((ZI674)) {
	if (!unreached_last) {
	    report (crt_loc, ERR_stmt_stmt_unreach ());
	    unreached_last = 1;
	}
    } else {
	unreached_last = 0;
    }
	    }
	    {

    (ZI1570) = make_exp_stmt ((ZI1524));
	    }
	    {

    unreached_fall = 1;
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_semicolon:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI497) = add_compound_stmt ((ZI562), (ZI1570));
	    }
	    {

    (ZI435) = end_compound_stmt ((ZI497));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      case lex_open_Hbrace_H1:
	{
	    EXP ZI497;

	    {
		{
		    switch (CURRENT_TERMINAL) {
		      case lex_open_Hbrace_H1:
			break;
		      default:
			goto ZL1;
		    }
		    ADVANCE_LEXER;
		}
	    }
	    {

    COPY_int (exp_sequence_block ((ZI562)), 2);
	    }
	    ZR680 (ZI562, &ZI497);
	    {
		if ((CURRENT_TERMINAL) == 358) {
		    RESTORE_LEXER;
		    goto ZL1;
		}
		{
		    switch (CURRENT_TERMINAL) {
		      case lex_close_Hbrace_H1:
			break;
		      default:
			goto ZL1;
		    }
		    ADVANCE_LEXER;
		}
	    }
	    {

    (ZI435) = end_compound_stmt ((ZI497));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      case lex_operator:
	{
	    IDENTIFIER ZI482;
	    IDENTIFIER ZI423;
	    EXP ZI1288;
	    EXP ZI1457;
	    EXP ZI1456;
	    EXP ZI1455;
	    EXP ZI1454;
	    EXP ZI1453;
	    EXP ZI1452;
	    EXP ZI1451;
	    EXP ZI1450;
	    EXP ZI1449;
	    EXP ZI1448;
	    EXP ZI1447;
	    EXP ZI1446;
	    EXP ZI1268;
	    EXP ZI1292;
	    EXP ZI1541;
	    int ZI674;
	    EXP ZI1587;
	    EXP ZI497;

	    parse_operator (&ZI482);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI423) = check_id (NULL_nspace, (ZI482), 0);
    crt_id_qualifier = qual_none;
    last_namespace = crt_namespace;
	    }
	    {

    (ZI1288) = make_id_exp ((ZI423));
	    }
	    ZR1245 (ZI1288, &ZI1457);
	    ZR1241 (ZI1457, &ZI1456);
	    ZR1237 (ZI1456, &ZI1455);
	    ZR1233 (ZI1455, &ZI1454);
	    ZR1229 (ZI1454, &ZI1453);
	    ZR1225 (ZI1453, &ZI1452);
	    ZR1221 (ZI1452, &ZI1451);
	    ZR1217 (ZI1451, &ZI1450);
	    ZR1213 (ZI1450, &ZI1449);
	    ZR1209 (ZI1449, &ZI1448);
	    ZR1205 (ZI1448, &ZI1447);
	    ZR1201 (ZI1447, &ZI1446);
	    ZR1197 (ZI1446, &ZI1268);
	    ZR1269 (&ZI1268, &ZI1292);
	    ZR1294 (&ZI1292, &ZI1541);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI674) = unreached_code;
    if ((ZI674)) {
	if (!unreached_last) {
	    report (crt_loc, ERR_stmt_stmt_unreach ());
	    unreached_last = 1;
	}
    } else {
	unreached_last = 0;
    }
	    }
	    {

    (ZI1587) = make_exp_stmt ((ZI1541));
	    }
	    {

    unreached_fall = 1;
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_semicolon:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI497) = add_compound_stmt ((ZI562), (ZI1587));
	    }
	    {

    (ZI435) = end_compound_stmt ((ZI497));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      case lex_hash_Hif: case lex_if: case lex_switch:
	{
	    EXP ZI1545;
	    EXP ZI497;

	    ZR717 (&ZI1545);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI497) = add_compound_stmt ((ZI562), (ZI1545));
	    }
	    {

    (ZI435) = end_compound_stmt ((ZI497));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      case lex_throw:
	{
	    EXP ZI1292;
	    EXP ZI1516;
	    int ZI674;
	    EXP ZI1554;
	    EXP ZI497;

	    ZR639 (&ZI1292);
	    ZR1294 (&ZI1292, &ZI1516);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI674) = unreached_code;
    if ((ZI674)) {
	if (!unreached_last) {
	    report (crt_loc, ERR_stmt_stmt_unreach ());
	    unreached_last = 1;
	}
    } else {
	unreached_last = 0;
    }
	    }
	    {

    (ZI1554) = make_exp_stmt ((ZI1516));
	    }
	    {

    unreached_fall = 1;
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_semicolon:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI497) = add_compound_stmt ((ZI562), (ZI1554));
	    }
	    {

    (ZI435) = end_compound_stmt ((ZI497));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      case lex_try:
	{
	    EXP ZI1548;
	    EXP ZI497;

	    ZR775 (&ZI1548);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI497) = add_compound_stmt ((ZI562), (ZI1548));
	    }
	    {

    (ZI435) = end_compound_stmt ((ZI497));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      case lex_delete: case lex_new:
	{
	    int ZI460;
	    EXP ZI1457;
	    EXP ZI1456;
	    EXP ZI1455;
	    EXP ZI1454;
	    EXP ZI1453;
	    EXP ZI1452;
	    EXP ZI1451;
	    EXP ZI1450;
	    EXP ZI1449;
	    EXP ZI1448;
	    EXP ZI1447;
	    EXP ZI1446;
	    EXP ZI1268;
	    EXP ZI1292;
	    EXP ZI1540;
	    int ZI674;
	    EXP ZI1586;
	    EXP ZI497;

	    {
 (ZI460) = 0; 
	    }
	    ZR1435 (&ZI460, &ZI1457);
	    ZR1241 (ZI1457, &ZI1456);
	    ZR1237 (ZI1456, &ZI1455);
	    ZR1233 (ZI1455, &ZI1454);
	    ZR1229 (ZI1454, &ZI1453);
	    ZR1225 (ZI1453, &ZI1452);
	    ZR1221 (ZI1452, &ZI1451);
	    ZR1217 (ZI1451, &ZI1450);
	    ZR1213 (ZI1450, &ZI1449);
	    ZR1209 (ZI1449, &ZI1448);
	    ZR1205 (ZI1448, &ZI1447);
	    ZR1201 (ZI1447, &ZI1446);
	    ZR1197 (ZI1446, &ZI1268);
	    ZR1269 (&ZI1268, &ZI1292);
	    ZR1294 (&ZI1292, &ZI1540);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI674) = unreached_code;
    if ((ZI674)) {
	if (!unreached_last) {
	    report (crt_loc, ERR_stmt_stmt_unreach ());
	    unreached_last = 1;
	}
    } else {
	unreached_last = 0;
    }
	    }
	    {

    (ZI1586) = make_exp_stmt ((ZI1540));
	    }
	    {

    unreached_fall = 1;
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_semicolon:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI497) = add_compound_stmt ((ZI562), (ZI1586));
	    }
	    {

    (ZI435) = end_compound_stmt ((ZI497));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      case lex_compl_H1: case lex_minus: case lex_plus:
      case lex_abs:
	{
	    int ZI454;
	    EXP ZI1464;
	    EXP ZI1457;
	    EXP ZI1456;
	    EXP ZI1455;
	    EXP ZI1454;
	    EXP ZI1453;
	    EXP ZI1452;
	    EXP ZI1451;
	    EXP ZI1450;
	    EXP ZI1449;
	    EXP ZI1448;
	    EXP ZI1447;
	    EXP ZI1446;
	    EXP ZI1268;
	    EXP ZI1292;
	    EXP ZI1525;
	    int ZI674;
	    EXP ZI1571;
	    EXP ZI497;

	    {
 (ZI454) = crt_lex_token; 
	    }
	    ZR600 ();
	    ZR585 (&ZI1464);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI1457) = make_uminus_exp ((ZI454), (ZI1464));
	    }
	    ZR1241 (ZI1457, &ZI1456);
	    ZR1237 (ZI1456, &ZI1455);
	    ZR1233 (ZI1455, &ZI1454);
	    ZR1229 (ZI1454, &ZI1453);
	    ZR1225 (ZI1453, &ZI1452);
	    ZR1221 (ZI1452, &ZI1451);
	    ZR1217 (ZI1451, &ZI1450);
	    ZR1213 (ZI1450, &ZI1449);
	    ZR1209 (ZI1449, &ZI1448);
	    ZR1205 (ZI1448, &ZI1447);
	    ZR1201 (ZI1447, &ZI1446);
	    ZR1197 (ZI1446, &ZI1268);
	    ZR1269 (&ZI1268, &ZI1292);
	    ZR1294 (&ZI1292, &ZI1525);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {

    (ZI674) = unreached_code;
    if ((ZI674)) {
	if (!unreached_last) {
	    report (crt_loc, ERR_stmt_stmt_unreach ());
	    unreached_last = 1;
	}
    } else {
	unreached_last = 0;
    }
	    }
	    {

    (ZI1571) = make_exp_stmt ((ZI1525));
	    }
	    {

    unreached_fall = 1;
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_semicolon:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    {

    (ZI497) = add_compound_stmt ((ZI562), (ZI1571));
	    }
	    {

    (ZI435) = end_compound_stmt ((ZI497));
	    }
	    {

    RESCAN_LEXER;
	    }
	}
	break;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    {
	{

    /* Syntax errors */
    ERROR err = ERR_lex_parse (crt_token);
    report (crt_loc, err);
    have_syntax_error = 1;
	}
	{

    (ZI435) = end_compound_stmt ((ZI562));
	}
	{

    RESCAN_LEXER;
	}
    }
  ZL0:;
    *ZO435 = ZI435;
}

/* END OF FILE */


syntax highlighted by Code2HTML, v. 0.9.1