/*
 * Automatically generated from the files:
 *	/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/producers/cpp/../common/parse/psyntax.sid
 * and
 *	/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/producers/cpp/../common/parse/psyntax.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 "exp_ops.h"
#include "hashid_ops.h"
#include "id_ops.h"
#include "tok_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 "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 "printf.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 (IDENTIFIER) SID_LIST_ID;


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

#include "psyntax.h"
extern void parse_tok_type(TYPE *);
extern void parse_mem_type(TYPE *);
extern void parse_operator(IDENTIFIER *);


/*
 *    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 variable analysis off
#ifndef OLD_PRODUCER
#pragma TenDRA unreachable code allow
#endif
#endif



void
XR809 (void)
{
    switch (CURRENT_TERMINAL) {
      case lex_macro:
	{
	    int XI712;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_equality:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_macro_weak; 
	    }
	    XR510 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case lex_prototype:
	{
	    int XI712;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_analysis:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_weak; 
	    }
	    XR509 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case 358:
	return;
      default:
	goto XL1;
    }
    return;
  XL1:;
    SAVE_LEXER (358);
    return;
}

void
XR810 (void)
{
    switch (CURRENT_TERMINAL) {
      case lex_environment:
	{
	    IDENTIFIER XI379;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    {

    int t = crt_lex_token;
    if (t >= FIRST_KEYWORD && t <= LAST_KEYWORD) {
	crt_lex_token = lex_identifier;
    }
	    }
	    {
		switch (CURRENT_TERMINAL) {
		  case lex_identifier:
		    {
			{

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

    XI379 = crt_token->pp_data.id.use;
			}
			ADVANCE_LEXER;
		    }
		    break;
		  case lex_statement_Hname:
		    {
			{

    XI379 = crt_token->pp_data.id.use;
			}
			ADVANCE_LEXER;
		    }
		    break;
		  case lex_type_Hname:
		    {
			{

    XI379 = crt_token->pp_data.id.use;
			}
			ADVANCE_LEXER;
		    }
		    break;
		  default:
		    goto XL1;
		}
	    }
	    {
		switch (CURRENT_TERMINAL) {
		  case lex_reset:
		    {
			ADVANCE_LEXER;
			XR510 (&XI381);
			if ((CURRENT_TERMINAL) == 358) {
			    RESTORE_LEXER;
			    goto XL1;
			}
		    }
		    break;
		  default:
		    {
			{
 (XI381) = (unsigned) OPTION_ON; 
			}
		    }
		    break;
		}
	    }
	    {

    use_option ((XI379), (XI381));
	    }
	}
	break;
      case lex_error:
	{
	    int XI712;

	    XR761 (&XI712);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    if ((XI712) >= 0) {
	no_error_args = 1;
	report (crt_loc, make_error ((XI712)));
	no_error_args = 0;
    }
	    }
	}
	break;
      case 358:
	return;
      default:
	goto XL1;
    }
    return;
  XL1:;
    SAVE_LEXER (358);
    return;
}

void
XR811 (void)
{
    switch (CURRENT_TERMINAL) {
      case lex_error:
	{
	    int XI712;
	    EXP XI381;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_limit:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_VAL_maximum_error; 
	    }
	    {
		{
		    switch (CURRENT_TERMINAL) {
		      case lex_integer_Hexp:
			{

    XI381 = crt_token->pp_data.exp;
			}
			break;
		      default:
			goto XL1;
		    }
		    ADVANCE_LEXER;
		}
	    }
	    {

    set_value ((XI712), (XI381), (unsigned long) 0);
	    }
	}
	break;
      case lex_name:
	{
	    EXP XI381;
	    unsigned XI477;
	    int XI712;
	    int XI718;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_limit:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
		{
		    switch (CURRENT_TERMINAL) {
		      case lex_integer_Hexp:
			{

    XI381 = crt_token->pp_data.exp;
			}
			break;
		      default:
			goto XL1;
		    }
		    ADVANCE_LEXER;
		}
	    }
	    XR512 (&XI477);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {
 (XI712) = OPT_VAL_name_limit; 
	    }
	    {
 (XI718) = OPT_name_limit; 
	    }
	    {

    set_value ((XI712), (XI381), (unsigned long) 0);
	    }
	    {

    set_option ((XI718), (XI477));
	    }
	}
	break;
      case 358:
	return;
      default:
	goto XL1;
    }
    return;
  XL1:;
    SAVE_LEXER (358);
    return;
}

void
XR812 (void)
{
    switch (CURRENT_TERMINAL) {
      case lex_escape:
	{
	    int XI712;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_overflow:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_escape_overflow; 
	    }
	    XR510 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case lex_char_Hexp: case lex_wchar_Hexp: case lex_string_Hexp:
      case lex_wstring_Hexp:
	{
	    EXP XI413;

	    {
		switch (CURRENT_TERMINAL) {
		  case lex_char_Hexp: case lex_wchar_Hexp:
		    {
			{
			    switch (CURRENT_TERMINAL) {
			      case lex_char_Hexp:
				{
				    {

    XI413 = crt_token->pp_data.exp;
				    }
				    ADVANCE_LEXER;
				}
				break;
			      case lex_wchar_Hexp:
				{
				    {

    XI413 = crt_token->pp_data.exp;
				    }
				    ADVANCE_LEXER;
				}
				break;
			      default:
				goto XL1;
			    }
			}
		    }
		    break;
		  case lex_string_Hexp: case lex_wstring_Hexp:
		    {
			{
			    switch (CURRENT_TERMINAL) {
			      case lex_string_Hexp:
				{
				    {

    XI413 = crt_token->pp_data.exp;
				    }
				    ADVANCE_LEXER;
				}
				break;
			      case lex_wstring_Hexp:
				{
				    {

    XI413 = crt_token->pp_data.exp;
				    }
				    ADVANCE_LEXER;
				}
				break;
			      default:
				goto XL1;
			    }
			}
		    }
		    break;
		  default:
		    goto XL1;
		}
	    }
	    {
		switch (CURRENT_TERMINAL) {
		  case lex_as:
		    {
			EXP XI448;

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

    XI448 = crt_token->pp_data.exp;
				    }
				    ADVANCE_LEXER;
				}
				break;
			      case lex_wchar_Hexp:
				{
				    {

    XI448 = crt_token->pp_data.exp;
				    }
				    ADVANCE_LEXER;
				}
				break;
			      default:
				goto XL1;
			    }
			}
			{

    set_character ((XI413), (XI448));
			}
			switch (CURRENT_TERMINAL) {
			  case lex_allow:
			    break;
			  default:
			    goto XL1;
			}
			ADVANCE_LEXER;
		    }
		    break;
		  case lex_disallow:
		    {
			EXP XI448;

			ADVANCE_LEXER;
			{

    (XI448) = NULL_exp;
			}
			{

    set_character ((XI413), (XI448));
			}
		    }
		    break;
		  default:
		    goto XL1;
		}
	    }
	}
	break;
      case 358:
	return;
      default:
	goto XL1;
    }
    return;
  XL1:;
    SAVE_LEXER (358);
    return;
}

void
XR729 (unsigned *XO477)
{
    unsigned XI477;

    switch (CURRENT_TERMINAL) {
      case lex_open_Hround:
	{
	    ADVANCE_LEXER;
	    XR838 (&XI477);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      default:
	{
	    {
 (XI477) = (unsigned) OPTION_ON; 
	    }
	}
	break;
      case 358:
	return;
    }
    goto XL0;
  XL1:;
    SAVE_LEXER (358);
    return;
  XL0:;
    *XO477 = XI477;
}

void
XR813 (void)
{
    switch (CURRENT_TERMINAL) {
      case lex_value:
	{
	    EXP XI452;
	    int XI712;
	    EXP XI381;

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

    XI452 = crt_token->pp_data.exp;
			}
			ADVANCE_LEXER;
		    }
		    break;
		  case lex_wstring_Hexp:
		    {
			{

    XI452 = crt_token->pp_data.exp;
			}
			ADVANCE_LEXER;
		    }
		    break;
		  default:
		    goto XL1;
		}
	    }
	    {

    STRING s = DEREF_str (exp_string_lit_str ((XI452)));
    (XI712) = find_value_no (s, 0);
    if ((XI712) == -1) {
	report (preproc_loc, ERR_pragma_option_bad (s));
    }
	    }
	    {
		{
		    switch (CURRENT_TERMINAL) {
		      case lex_integer_Hexp:
			{

    XI381 = crt_token->pp_data.exp;
			}
			break;
		      default:
			goto XL1;
		    }
		    ADVANCE_LEXER;
		}
	    }
	    {

    set_value ((XI712), (XI381), (unsigned long) 0);
	    }
	}
	break;
      case lex_string_Hexp: case lex_wstring_Hexp:
	{
	    EXP XI452;
	    int XI712;
	    unsigned XI381;

	    {
		switch (CURRENT_TERMINAL) {
		  case lex_string_Hexp:
		    {
			{

    XI452 = crt_token->pp_data.exp;
			}
			ADVANCE_LEXER;
		    }
		    break;
		  case lex_wstring_Hexp:
		    {
			{

    XI452 = crt_token->pp_data.exp;
			}
			ADVANCE_LEXER;
		    }
		    break;
		  default:
		    goto XL1;
		}
	    }
	    {

    STRING s = DEREF_str (exp_string_lit_str ((XI452)));
    (XI712) = find_option_no (s, 0);
    if ((XI712) == -1) {
	report (preproc_loc, ERR_pragma_option_bad (s));
    }
	    }
	    XR511 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case 358:
	return;
      default:
	goto XL1;
    }
    return;
  XL1:;
    SAVE_LEXER (358);
    return;
}

void
XR726 (unsigned *XO381, unsigned *XO477)
{
    unsigned XI381;
    unsigned XI477;

    switch (CURRENT_TERMINAL) {
      case lex_off:
	{
	    ADVANCE_LEXER;
	    {
 (XI381) = (unsigned) OPTION_OFF; 
	    }
	    {
 (XI477) = (unsigned) OPTION_OFF; 
	    }
	}
	break;
      case lex_open_Hround:
	{
	    unsigned XI448;

	    ADVANCE_LEXER;
	    XR725 (&XI477);
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      case 358:
		RESTORE_LEXER;
		goto XL1;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
		switch (CURRENT_TERMINAL) {
		  case lex_on:
		    {
			ADVANCE_LEXER;
			{
 (XI448) = (unsigned) OPTION_OFF; 
			}
		    }
		    break;
		  case lex_warning:
		    {
			ADVANCE_LEXER;
			{
 (XI448) = (unsigned) OPTION_WARN; 
			}
		    }
		    break;
		  default:
		    goto XL1;
		}
	    }
	    XI381 = XI448;
	}
	break;
      case 358:
	return;
      default:
	goto XL1;
    }
    goto XL0;
  XL1:;
    SAVE_LEXER (358);
    return;
  XL0:;
    *XO381 = XI381;
    *XO477 = XI477;
}

void
XR814 (void)
{
    switch (CURRENT_TERMINAL) {
      case lex_star:
	{
	    ADVANCE_LEXER;
	    {

    preserve_all = 1;
	    }
	}
	break;
      default:
	{
	    {

    rescan_pragma (lex_unknown);
    RESCAN_LEXER;
	    }
	    XR500 ();
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      case 358:
	return;
    }
    return;
  XL1:;
    SAVE_LEXER (358);
    return;
}

void
XR815 (TYPE *XI401)
{
    switch (CURRENT_TERMINAL) {
      case lex_ellipsis: case lex_ellipsis_Hexp:
	{
	    {
		switch (CURRENT_TERMINAL) {
		  case lex_ellipsis:
		    {
			ADVANCE_LEXER;
		    }
		    break;
		  case lex_ellipsis_Hexp:
		    {
			ADVANCE_LEXER;
		    }
		    break;
		  default:
		    goto XL1;
		}
	    }
	    {

    accept_ellipsis ((*XI401));
	    }
	}
	break;
      default:
	{
	    TYPE XI452;

	    {

    (XI452) = type_error;
    parse_tok_type (&(XI452));
    object_type ((XI452), null_tag);
	    }
	    {

    accept_argument ((*XI401), (XI452));
	    }
	}
	break;
      case 358:
	return;
    }
    return;
  XL1:;
    SAVE_LEXER (358);
    return;
}

void
XR816 (void)
{
    switch (CURRENT_TERMINAL) {
      case lex_character:
	{
	    TYPE XI401;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_lit:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_colon:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {

    rescan_pragma (lex_unknown);
    RESCAN_LEXER;
	    }
	    {

    (XI401) = type_error;
    parse_tok_type (&(XI401));
    object_type ((XI401), null_tag);
	    }
	    {

    set_char_lit ((XI401));
	    }
	}
	break;
      case lex_longlong:
	{
	    int XI448;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_type:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_colon:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_long:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
		switch (CURRENT_TERMINAL) {
		  case lex_long:
		    {
			ADVANCE_LEXER;
			{
 (XI448) = 1; 
			}
		    }
		    break;
		  default:
		    {
			{
 (XI448) = 0; 
			}
		    }
		    break;
		}
	    }
	    {

    set_long_long_type ((XI448));
	    }
	}
	break;
      case lex_std:
	{
	    IDENTIFIER XI379;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_namespace:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_colon:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {

    int t = crt_lex_token;
    if (t >= FIRST_KEYWORD && t <= LAST_KEYWORD) {
	crt_lex_token = lex_identifier;
    }
	    }
	    {
		switch (CURRENT_TERMINAL) {
		  case lex_colon_Hcolon:
		    {
			ADVANCE_LEXER;
			{

    (XI379) = NULL_id;
    crt_id_qualifier = qual_none;
    qual_namespace = NULL_nspace;
			}
		    }
		    break;
		  case lex_identifier: case lex_type_Hname: case lex_namespace_Hname:
		  case lex_statement_Hname:
		    {
			{
			    switch (CURRENT_TERMINAL) {
			      case lex_identifier:
				{
				    {

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

    XI379 = crt_token->pp_data.id.use;
				    }
				    ADVANCE_LEXER;
				}
				break;
			      case lex_statement_Hname:
				{
				    {

    XI379 = crt_token->pp_data.id.use;
				    }
				    ADVANCE_LEXER;
				}
				break;
			      case lex_type_Hname:
				{
				    {

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

    set_std_namespace ((XI379));
	    }
	}
	break;
      case lex_string:
	{
	    CV_SPEC XI592;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_lit:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_colon:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
		switch (CURRENT_TERMINAL) {
		  case lex_no:
		    {
			ADVANCE_LEXER;
			{
 (XI592) = cv_none; 
			}
		    }
		    break;
		  default:
		    {
			{
 (XI592) = cv_const; 
			}
		    }
		    break;
		}
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_const:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {

    set_string_qual ((XI592));
	    }
	}
	break;
      case lex_wchar_Ht: case lex_ptrdiff_Ht: case lex_size_Ht:
	{
	    BASE_TYPE XI588;
	    TYPE XI401;

	    {
		switch (CURRENT_TERMINAL) {
		  case lex_ptrdiff_Ht:
		    {
			ADVANCE_LEXER;
			{
 (XI588) = btype_ptrdiff_t; 
			}
		    }
		    break;
		  case lex_size_Ht:
		    {
			ADVANCE_LEXER;
			{
 (XI588) = btype_size_t; 
			}
		    }
		    break;
		  case lex_wchar_Ht:
		    {
			ADVANCE_LEXER;
			{
 (XI588) = btype_wchar_t; 
			}
		    }
		    break;
		  default:
		    goto XL1;
		}
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_colon:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {

    rescan_pragma (lex_unknown);
    RESCAN_LEXER;
	    }
	    {

    (XI401) = type_error;
    parse_tok_type (&(XI401));
    object_type ((XI401), null_tag);
	    }
	    {

    set_builtin_type ((XI588), (XI401));
	    }
	}
	break;
      case 358:
	return;
      default:
	goto XL1;
    }
    return;
  XL1:;
    SAVE_LEXER (358);
    return;
}

void
XR817 (void)
{
    switch (CURRENT_TERMINAL) {
      case lex_error: case lex_name:
	{
	    XR811 ();
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      case lex_wchar_Ht: case lex_character: case lex_longlong:
      case lex_ptrdiff_Ht: case lex_size_Ht: case lex_std:
      case lex_string:
	{
	    XR816 ();
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      case 358:
	return;
      default:
	goto XL1;
    }
    return;
  XL1:;
    SAVE_LEXER (358);
    return;
}

void
XR818 (void)
{
    switch (CURRENT_TERMINAL) {
      case lex_conversion:
	{
	    ADVANCE_LEXER;
	    {

    rescan_pragma (lex_unknown);
    RESCAN_LEXER;
	    }
	    XR498 ();
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      case lex_ellipsis: case lex_ellipsis_Hexp:
	{
	    int XI712;
	    unsigned XI381;

	    {
		switch (CURRENT_TERMINAL) {
		  case lex_ellipsis:
		    {
			ADVANCE_LEXER;
		    }
		    break;
		  case lex_ellipsis_Hexp:
		    {
			ADVANCE_LEXER;
		    }
		    break;
		  default:
		    goto XL1;
		}
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_identif:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_ellipsis_ident; 
	    }
	    {
 (XI381) = (unsigned) OPTION_OFF; 
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case 358:
	return;
      default:
	goto XL1;
    }
    return;
  XL1:;
    SAVE_LEXER (358);
    return;
}

void
XR819 (void)
{
    switch (CURRENT_TERMINAL) {
      case lex_signed: case lex_unsigned: case lex_either:
	{
	    BASE_TYPE XI588;

	    {
		switch (CURRENT_TERMINAL) {
		  case lex_either:
		    {
			ADVANCE_LEXER;
			{
 (XI588) = btype_none; 
			}
		    }
		    break;
		  case lex_signed:
		    {
			ADVANCE_LEXER;
			{
 (XI588) = btype_signed; 
			}
		    }
		    break;
		  case lex_unsigned:
		    {
			ADVANCE_LEXER;
			{
 (XI588) = btype_unsigned; 
			}
		    }
		    break;
		  default:
		    goto XL1;
		}
	    }
	    {

    set_char_sign ((XI588));
	    }
	}
	break;
      case lex_char_Hexp: case lex_wchar_Hexp: case lex_string_Hexp:
      case lex_wstring_Hexp: case lex_escape:
	{
	    XR812 ();
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      case 358:
	return;
      default:
	goto XL1;
    }
    return;
  XL1:;
    SAVE_LEXER (358);
    return;
}

void
XR820 (void)
{
    switch (CURRENT_TERMINAL) {
      case lex_token:
	{
	    int XI712;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_token_redef; 
	    }
	    XR510 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case lex_type:
	{
	    TYPE XI401;
	    TYPE XI452;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_colon:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {

    rescan_pragma (lex_unknown);
    RESCAN_LEXER;
	    }
	    {

    (XI401) = type_error;
    parse_tok_type (&(XI401));
    object_type ((XI401), null_tag);
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_eq:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {

    (XI452) = type_error;
    parse_tok_type (&(XI452));
    object_type ((XI452), null_tag);
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_colon:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {

    int t = crt_lex_token;
    if (t == lex_identifier || t == lex_type_Hname ||
	 t == lex_namespace_Hname || t == lex_statement_Hname) {
	t = find_hashid (crt_token->pp_data.id.hash);
	crt_lex_token = t;
    }
	    }
	    XR510 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_compatible_type ((XI401), (XI452), (XI381));
	    }
	}
	break;
      case 358:
	return;
      default:
	goto XL1;
    }
    return;
  XL1:;
    SAVE_LEXER (358);
    return;
}

void
XR532 (int *XO452)
{
    int XI452;

    switch (CURRENT_TERMINAL) {
      case lex_long:
	{
	    ADVANCE_LEXER;
	    XR853 (&XI452);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      case lex_unsigned:
	{
	    ADVANCE_LEXER;
	    XR852 (&XI452);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      default:
	{
	    {
 (XI452) = SUFFIX_NONE; 
	    }
	}
	break;
      case 358:
	return;
    }
    goto XL0;
  XL1:;
    SAVE_LEXER (358);
    return;
  XL0:;
    *XO452 = XI452;
}

void
XR821 (void)
{
    switch (CURRENT_TERMINAL) {
      case lex_of:
	{
	    int XI712;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_struct:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_div:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_union:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_open_Hround:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_auto:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_init_struct; 
	    }
	    XR510 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case lex_identifier: case lex_type_Hname: case lex_namespace_Hname:
      case lex_statement_Hname:
	{
	    IDENTIFIER XI379;

	    {

    int t = crt_lex_token;
    if (t >= FIRST_KEYWORD && t <= LAST_KEYWORD) {
	crt_lex_token = lex_identifier;
    }
	    }
	    {
		switch (CURRENT_TERMINAL) {
		  case lex_identifier:
		    {
			{

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

    XI379 = crt_token->pp_data.id.use;
			}
			ADVANCE_LEXER;
		    }
		    break;
		  case lex_statement_Hname:
		    {
			{

    XI379 = crt_token->pp_data.id.use;
			}
			ADVANCE_LEXER;
		    }
		    break;
		  case lex_type_Hname:
		    {
			{

    XI379 = crt_token->pp_data.id.use;
			}
			ADVANCE_LEXER;
		    }
		    break;
		  default:
		    goto XL1;
		}
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_allow:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {

    allow_initialiser ((XI379));
	    }
	}
	break;
      case 358:
	return;
      default:
	goto XL1;
    }
    return;
  XL1:;
    SAVE_LEXER (358);
    return;
}

void
XR498 (void)
{
  XL2_498:;
    switch (CURRENT_TERMINAL) {
      case lex_identifier: case lex_type_Hname: case lex_namespace_Hname:
      case lex_statement_Hname:
	{
	    IDENTIFIER XI379;

	    {
		switch (CURRENT_TERMINAL) {
		  case lex_identifier:
		    {
			{

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

    XI379 = crt_token->pp_data.id.use;
			}
			ADVANCE_LEXER;
		    }
		    break;
		  case lex_statement_Hname:
		    {
			{

    XI379 = crt_token->pp_data.id.use;
			}
			ADVANCE_LEXER;
		    }
		    break;
		  case lex_type_Hname:
		    {
			{

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

    allow_conversion ((XI379));
	    }
	    goto XL2_498;
	}
	/*UNREACHED*/
      case 358:
	return;
      default:
	break;
    }
    return;
  XL1:;
    SAVE_LEXER (358);
    return;
}

void
XR714 (int *XO712)
{
    int XI712;

    switch (CURRENT_TERMINAL) {
      case lex_open_Hround:
	{
	    ADVANCE_LEXER;
	    XR832 (&XI712);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      default:
	{
	    {
 (XI712) = OPT_discard; 
	    }
	}
	break;
      case 358:
	return;
    }
    goto XL0;
  XL1:;
    SAVE_LEXER (358);
    return;
  XL0:;
    *XO712 = XI712;
}

void
XR822 (void)
{
    switch (CURRENT_TERMINAL) {
      case lex_analysis:
	{
	    int XI712;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    XR713 (&XI712);
	    XR509 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case lex_identifier: case lex_type_Hname: case lex_namespace_Hname:
      case lex_statement_Hname: case lex_allow:
	{
	    {

    rescan_pragma (lex_allow);
    RESCAN_LEXER;
	    }
	    XR498 ();
	    switch (CURRENT_TERMINAL) {
	      case lex_allow:
		break;
	      case 358:
		RESTORE_LEXER;
		goto XL1;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	}
	break;
      case 358:
	return;
      default:
	goto XL1;
    }
    return;
  XL1:;
    SAVE_LEXER (358);
    return;
}

void
XR823 (void)
{
    switch (CURRENT_TERMINAL) {
      case lex_lit:
	{
	    int XI448;
	    int XI452;

	    ADVANCE_LEXER;
	    {

    pragma_number = 1;
	    }
	    XR531 (&XI448);
	    XR532 (&XI452);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    begin_literal ((XI448), (XI452));
	    }
	    {

    rescan_pragma (lex_unknown);
    RESCAN_LEXER;
	    }
	    XR536 ();
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      case lex_operator: case lex_overflow:
	{
	    int XI712;
	    unsigned XI381;

	    XR799 (&XI712);
	    XR509 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case 358:
	return;
      default:
	goto XL1;
    }
    return;
  XL1:;
    SAVE_LEXER (358);
    return;
}

void
XR716 (int *XO712)
{
    int XI712;

    switch (CURRENT_TERMINAL) {
      case lex_for:
	{
	    ADVANCE_LEXER;
	    XR843 (&XI712);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      default:
	{
	    {
 (XI712) = OPT_infer_int; 
	    }
	}
	break;
      case 358:
	return;
    }
    goto XL0;
  XL1:;
    SAVE_LEXER (358);
    return;
  XL0:;
    *XO712 = XI712;
}

void
XR824 (void)
{
    switch (CURRENT_TERMINAL) {
      case lex_token:
	{
	    int XI477;

	    ADVANCE_LEXER;
	    {
 (XI477) = lex_undef; 
	    }
	    {

    int t = crt_lex_token;
    if (t >= FIRST_KEYWORD && t <= LAST_KEYWORD) {
	if (t != lex_tag_Hcap && !predict_operator ()) {
	    crt_lex_token = lex_identifier;
	}
    }
	    }
	    XR482 (&XI477);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      case lex_keyword:
	{
	    IDENTIFIER XI379;

	    XR553 (&XI379);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    undef_keyword ((XI379));
	    }
	}
	break;
      case 358:
	return;
      default:
	goto XL1;
    }
    return;
  XL1:;
    SAVE_LEXER (358);
    return;
}

void
XR531 (int *XO448)
{
    int XI448;

    switch (CURRENT_TERMINAL) {
      case lex_decimal:
	{
	    ADVANCE_LEXER;
	    {
 (XI448) = BASE_DECIMAL; 
	    }
	}
	break;
      case lex_hexadecimal:
	{
	    ADVANCE_LEXER;
	    {
 (XI448) = BASE_HEXADECIMAL; 
	    }
	}
	break;
      case lex_octal:
	{
	    ADVANCE_LEXER;
	    {
 (XI448) = BASE_OCTAL; 
	    }
	}
	break;
      case 358:
	return;
      default:
	goto XL1;
    }
    goto XL0;
  XL1:;
    SAVE_LEXER (358);
    return;
  XL0:;
    *XO448 = XI448;
}

void
XR536 (void)
{
  XL2_536:;
    switch (CURRENT_TERMINAL) {
      case lex_question:
	{
	    ADVANCE_LEXER;
	    {

    add_range_literal (NULL_exp, 1);
	    }
	    XR533 ();
	    {
		if ((CURRENT_TERMINAL) == 358) {
		    RESTORE_LEXER;
		    goto XL1;
		}
		{
		    switch (CURRENT_TERMINAL) {
		      case lex_or_H1:
			break;
		      default:
			goto XL1;
		    }
		    ADVANCE_LEXER;
		}
	    }
	    goto XL2_536;
	}
	/*UNREACHED*/
      case lex_star:
	{
	    ADVANCE_LEXER;
	    {

    add_range_literal (NULL_exp, 0);
	    }
	    XR533 ();
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      case lex_integer_Hexp:
	{
	    EXP XI381;

	    {
		{
		    switch (CURRENT_TERMINAL) {
		      case lex_integer_Hexp:
			{

    XI381 = crt_token->pp_data.exp;
			}
			break;
		      default:
			goto XL1;
		    }
		    ADVANCE_LEXER;
		}
	    }
	    {

    add_range_literal ((XI381), 2);
	    }
	    XR533 ();
	    {
		if ((CURRENT_TERMINAL) == 358) {
		    RESTORE_LEXER;
		    goto XL1;
		}
		{
		    switch (CURRENT_TERMINAL) {
		      case lex_or_H1:
			break;
		      default:
			goto XL1;
		    }
		    ADVANCE_LEXER;
		}
	    }
	    goto XL2_536;
	}
	/*UNREACHED*/
      case 358:
	return;
      default:
	goto XL1;
    }
    return;
  XL1:;
    SAVE_LEXER (358);
    return;
}

void
XR735 (unsigned *XO449)
{
    unsigned XI449;

    switch (CURRENT_TERMINAL) {
      case lex_const_Hcast:
	{
	    ADVANCE_LEXER;
	    {
 (XI449) = CAST_CONST; 
	    }
	}
	break;
      case lex_reinterpret_Hcast:
	{
	    ADVANCE_LEXER;
	    {
 (XI449) = CAST_REINTERP; 
	    }
	}
	break;
      case lex_static_Hcast:
	{
	    ADVANCE_LEXER;
	    {
 (XI449) = CAST_STATIC; 
	    }
	}
	break;
      case 358:
	return;
      default:
	goto XL1;
    }
    goto XL0;
  XL1:;
    SAVE_LEXER (358);
    return;
  XL0:;
    *XO449 = XI449;
}

void
XR402 (int *XO401)
{
    int XI401;

    switch (CURRENT_TERMINAL) {
      case lex_tag_Hcap:
	{
	    ADVANCE_LEXER;
	    {
 (XI401) = 1; 
	    }
	}
	break;
      default:
	{
	    {
 (XI401) = 0; 
	    }
	}
	break;
      case 358:
	return;
    }
    *XO401 = XI401;
}

void
XR830 (int *XO401)
{
    int XI401;

    switch (CURRENT_TERMINAL) {
      case lex_analysis:
	{
	    int XI712;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    XR714 (&XI712);
	    XR509 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	    {
 (XI401) = lex_hash_Hpragma; 
	    }
	}
	break;
      default:
	{
	    {
 (XI401) = lex_unused; 
	    }
	}
	break;
      case 358:
	return;
    }
    goto XL0;
  XL1:;
    SAVE_LEXER (358);
    return;
  XL0:;
    *XO401 = XI401;
}

void
XR831 (int *XO401)
{
    int XI401;

    switch (CURRENT_TERMINAL) {
      case lex_wchar_Ht: case lex_character: case lex_error:
      case lex_longlong: case lex_name: case lex_ptrdiff_Ht:
      case lex_size_Ht: case lex_std: case lex_string:
	{
	    XR817 ();
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {
 (XI401) = lex_hash_Hpragma; 
	    }
	}
	break;
      default:
	{
	    {
 (XI401) = lex_set; 
	    }
	}
	break;
      case 358:
	return;
    }
    goto XL0;
  XL1:;
    SAVE_LEXER (358);
    return;
  XL0:;
    *XO401 = XI401;
}

void
XR832 (int *XO712)
{
    int XI712;

    switch (CURRENT_TERMINAL) {
      case lex_function:
	{
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_return:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_discard_func; 
	    }
	}
	break;
      case lex_static:
	{
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_discard_static; 
	    }
	}
	break;
      case lex_value:
	{
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_discard_value; 
	    }
	}
	break;
      case 358:
	return;
      default:
	goto XL1;
    }
    goto XL0;
  XL1:;
    SAVE_LEXER (358);
    return;
  XL0:;
    *XO712 = XI712;
}

void
XR833 (TOKEN *XO404)
{
    TOKEN XI404;

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

    (XI404) = make_type_token (btype_signed | btype_int);
	    }
	}
	break;
      case lex_unsigned:
	{
	    ADVANCE_LEXER;
	    {

    (XI404) = make_type_token (btype_unsigned | btype_int);
	    }
	}
	break;
      default:
	{
	    {

    (XI404) = make_type_token (btype_int);
	    }
	}
	break;
      case 358:
	return;
    }
    *XO404 = XI404;
}

void
XR834 (TOKEN *XO404)
{
    TOKEN XI404;

    switch (CURRENT_TERMINAL) {
      case lex_open_Hround:
	{
	    TOKEN XI413;
	    SID_LIST_ID XI406;
	    TOKEN XI448;
	    TOKEN XI410;

	    ADVANCE_LEXER;
	    {

    (XI413) = begin_proc_token ();
	    }
	    {
		switch (CURRENT_TERMINAL) {
		  case lex_arith_Hcap: case lex_class_Hcap: case lex_exp_Hcap:
		  case lex_float_Hcap: case lex_func_Hcap: case lex_int_Hcap:
		  case lex_member_Hcap: case lex_nat_Hcap: case lex_proc_Hcap:
		  case lex_scalar_Hcap: case lex_stmt_Hcap: case lex_struct_Hcap:
		  case lex_type_Hcap: case lex_union_Hcap: case lex_variety_Hcap:
		    {
			XR417 (&XI406);
			if ((CURRENT_TERMINAL) == 358) {
			    RESTORE_LEXER;
			    goto XL1;
			}
		    }
		    break;
		  default:
		    {
			{

    (XI406) = NULL_list (IDENTIFIER);
			}
		    }
		    break;
		}
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {

    (XI448) = cont_proc_token ((XI413), (XI406), (XI406));
	    }
	    XR400 (&XI410);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    (XI404) = end_proc_token ((XI448), (XI410));
	    }
	}
	break;
      case lex_open_Hbrace_H1:
	{
	    TOKEN XI413;
	    SID_LIST_ID XI454;
	    SID_LIST_ID XI406;
	    SID_LIST_ID XI457;
	    SID_LIST_ID XI409;
	    TOKEN XI448;
	    TOKEN XI410;

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

    (XI413) = begin_proc_token ();
	    }
	    {
		switch (CURRENT_TERMINAL) {
		  case lex_arith_Hcap: case lex_class_Hcap: case lex_exp_Hcap:
		  case lex_float_Hcap: case lex_func_Hcap: case lex_int_Hcap:
		  case lex_member_Hcap: case lex_nat_Hcap: case lex_proc_Hcap:
		  case lex_scalar_Hcap: case lex_stmt_Hcap: case lex_struct_Hcap:
		  case lex_type_Hcap: case lex_union_Hcap: case lex_variety_Hcap:
		    {
			XR407 (&XI454);
			if ((CURRENT_TERMINAL) == 358) {
			    RESTORE_LEXER;
			    goto XL1;
			}
		    }
		    break;
		  default:
		    {
			{

    (XI454) = NULL_list (IDENTIFIER);
			}
		    }
		    break;
		}
	    }
	    XI406 = XI454;
	    {
		{
		    switch (CURRENT_TERMINAL) {
		      case lex_or_H1:
			break;
		      default:
			goto XL1;
		    }
		    ADVANCE_LEXER;
		}
	    }
	    {
		switch (CURRENT_TERMINAL) {
		  case lex_exp_Hcap: case lex_member_Hcap: case lex_proc_Hcap:
		  case lex_stmt_Hcap: case lex_type_Hcap:
		    {
			XR412 (XI406, &XI457);
			if ((CURRENT_TERMINAL) == 358) {
			    RESTORE_LEXER;
			    goto XL1;
			}
		    }
		    break;
		  default:
		    {
			{

    (XI457) = NULL_list (IDENTIFIER);
			}
		    }
		    break;
		}
	    }
	    XI409 = XI457;
	    {
		{
		    switch (CURRENT_TERMINAL) {
		      case lex_close_Hbrace_H1:
			break;
		      default:
			goto XL1;
		    }
		    ADVANCE_LEXER;
		}
	    }
	    {

    (XI448) = cont_proc_token ((XI413), (XI406), (XI409));
	    }
	    XR400 (&XI410);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    (XI404) = end_proc_token ((XI448), (XI410));
	    }
	}
	break;
      case 358:
	return;
      default:
	goto XL1;
    }
    goto XL0;
  XL1:;
    SAVE_LEXER (358);
    return;
  XL0:;
    *XO404 = XI404;
}

void
XR835 (SID_LIST_ID *XO409)
{
    SID_LIST_ID XI409;

    switch (CURRENT_TERMINAL) {
      case lex_arith_Hcap: case lex_class_Hcap: case lex_exp_Hcap:
      case lex_float_Hcap: case lex_func_Hcap: case lex_int_Hcap:
      case lex_member_Hcap: case lex_nat_Hcap: case lex_proc_Hcap:
      case lex_scalar_Hcap: case lex_stmt_Hcap: case lex_struct_Hcap:
      case lex_type_Hcap: case lex_union_Hcap: case lex_variety_Hcap:
	{
	    XR417 (&XI409);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      default:
	{
	    {

    /* Extra comma at the end of a list */
    report (crt_loc, ERR_lex_extra_comma ());
	    }
	    {

    (XI409) = NULL_list (IDENTIFIER);
	    }
	}
	break;
      case 358:
	return;
    }
    goto XL0;
  XL1:;
    SAVE_LEXER (358);
    return;
  XL0:;
    *XO409 = XI409;
}

void
XR836 (SID_LIST_ID *XO409)
{
    SID_LIST_ID XI409;

    switch (CURRENT_TERMINAL) {
      case lex_arith_Hcap: case lex_class_Hcap: case lex_exp_Hcap:
      case lex_float_Hcap: case lex_func_Hcap: case lex_int_Hcap:
      case lex_member_Hcap: case lex_nat_Hcap: case lex_proc_Hcap:
      case lex_scalar_Hcap: case lex_stmt_Hcap: case lex_struct_Hcap:
      case lex_type_Hcap: case lex_union_Hcap: case lex_variety_Hcap:
	{
	    XR407 (&XI409);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      default:
	{
	    {

    /* Extra comma at the end of a list */
    report (crt_loc, ERR_lex_extra_comma ());
	    }
	    {

    (XI409) = NULL_list (IDENTIFIER);
	    }
	}
	break;
      case 358:
	return;
    }
    goto XL0;
  XL1:;
    SAVE_LEXER (358);
    return;
  XL0:;
    *XO409 = XI409;
}

void
XR837 (SID_LIST_ID *XI410, SID_LIST_ID *XO409)
{
    SID_LIST_ID XI409;

    switch (CURRENT_TERMINAL) {
      case lex_exp_Hcap: case lex_member_Hcap: case lex_proc_Hcap:
      case lex_stmt_Hcap: case lex_type_Hcap:
	{
	    XR412 (*XI410, &XI409);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      default:
	{
	    {

    /* Extra comma at the end of a list */
    report (crt_loc, ERR_lex_extra_comma ());
	    }
	    {

    (XI409) = NULL_list (IDENTIFIER);
	    }
	}
	break;
      case 358:
	return;
    }
    goto XL0;
  XL1:;
    SAVE_LEXER (358);
    return;
  XL0:;
    *XO409 = XI409;
}

void
XR838 (unsigned *XO477)
{
    unsigned XI477;

    switch (CURRENT_TERMINAL) {
      case lex_complete:
	{
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI477) = (unsigned) OPTION_ON; 
	    }
	}
	break;
      case lex_incomplete:
	{
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI477) = (unsigned) OPTION_OFF; 
	    }
	}
	break;
      case 358:
	return;
      default:
	goto XL1;
    }
    goto XL0;
  XL1:;
    SAVE_LEXER (358);
    return;
  XL0:;
    *XO477 = XI477;
}

void
XR841 (unsigned *XI839, unsigned *XO449)
{
    unsigned XI449;

    switch (CURRENT_TERMINAL) {
      case lex_or_H1:
	{
	    unsigned XI448;

	    {
		{
		    switch (CURRENT_TERMINAL) {
		      case lex_or_H1:
			break;
		      default:
			goto XL1;
		    }
		    ADVANCE_LEXER;
		}
	    }
	    XR736 (&XI448);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {
 (XI449) = ((*XI839) | (XI448)); 
	    }
	}
	break;
      default:
	{
	    XI449 = *XI839;
	}
	break;
      case 358:
	return;
    }
    goto XL0;
  XL1:;
    SAVE_LEXER (358);
    return;
  XL0:;
    *XO449 = XI449;
}

void
XR415 (IDENTIFIER *XO379)
{
    IDENTIFIER XI379;

    if ((CURRENT_TERMINAL) == 358) {
	return;
    }
    {
	TOKEN XI404;
	int XI401;
	IDENTIFIER XI405;

	XR400 (&XI404);
	XR402 (&XI401);
	{
	    switch (CURRENT_TERMINAL) {
	      case lex_identifier: case lex_type_Hname: case lex_namespace_Hname:
	      case lex_statement_Hname:
		{
		    {
			switch (CURRENT_TERMINAL) {
			  case lex_identifier:
			    {
				{

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

    XI405 = crt_token->pp_data.id.use;
				}
				ADVANCE_LEXER;
			    }
			    break;
			  case lex_statement_Hname:
			    {
				{

    XI405 = crt_token->pp_data.id.use;
				}
				ADVANCE_LEXER;
			    }
			    break;
			  case lex_type_Hname:
			    {
				{

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

    HASHID nm = lookup_anon ();
    (XI405) = DEREF_id (hashid_id (nm));
    crt_id_qualifier = qual_none;
    qual_namespace = NULL_nspace;
		    }
		}
		break;
	      case 358:
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	{

    (XI379) = make_tok_param ((XI404), (XI401), (XI405));
	}
    }
    goto XL0;
  XL1:;
    SAVE_LEXER (358);
    return;
  XL0:;
    *XO379 = XI379;
}

void
XR842 (int *XO712)
{
    int XI712;

    switch (CURRENT_TERMINAL) {
      case lex_after:
	{
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_conditional:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_empty_body; 
	    }
	}
	break;
      default:
	{
	    {
 (XI712) = OPT_semicolon_extra; 
	    }
	}
	break;
      case 358:
	return;
    }
    goto XL0;
  XL1:;
    SAVE_LEXER (358);
    return;
  XL0:;
    *XO712 = XI712;
}

void
XR843 (int *XO712)
{
    int XI712;

    switch (CURRENT_TERMINAL) {
      case lex_const:
	{
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_div:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_volatile:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_infer_int_cv; 
	    }
	}
	break;
      case lex_external:
	{
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_decl:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_dspec_none; 
	    }
	}
	break;
      case lex_function:
	{
	    ADVANCE_LEXER;
	    XR844 (&XI712);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      case 358:
	return;
      default:
	goto XL1;
    }
    goto XL0;
  XL1:;
    SAVE_LEXER (358);
    return;
  XL0:;
    *XO712 = XI712;
}

void
XR844 (int *XO712)
{
    int XI712;

    switch (CURRENT_TERMINAL) {
      case lex_argument:
	{
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_param_impl; 
	    }
	}
	break;
      case lex_return:
	{
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_dspec_none_func; 
	    }
	}
	break;
      case 358:
	return;
      default:
	goto XL1;
    }
    goto XL0;
  XL1:;
    SAVE_LEXER (358);
    return;
  XL0:;
    *XO712 = XI712;
}

void
XR533 (void)
{
    switch (CURRENT_TERMINAL) {
      case lex_colon:
	{
	    TYPE XI401;

	    ADVANCE_LEXER;
	    {

    (XI401) = type_error;
    parse_tok_type (&(XI401));
    object_type ((XI401), null_tag);
	    }
	    {

    add_type_literal ((XI401));
	    }
	}
	break;
      case lex_star:
	{
	    ADVANCE_LEXER;
	    XR855 ();
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      case 358:
	return;
      default:
	goto XL1;
    }
    return;
  XL1:;
    SAVE_LEXER (358);
    return;
}

void
XR845 (int *XO712)
{
    int XI712;

    switch (CURRENT_TERMINAL) {
      case lex_int:
	{
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_minus:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    XR847 (&XI712);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      case lex_pointer:
	{
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_minus:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    XR846 (&XI712);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      case lex_void:
	{
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_star:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_minus:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_pointer:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_implicit:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_conv_ptr_void_ptr; 
	    }
	}
	break;
      case 358:
	return;
      default:
	goto XL1;
    }
    goto XL0;
  XL1:;
    SAVE_LEXER (358);
    return;
  XL0:;
    *XO712 = XI712;
}

void
XR846 (int *XO712)
{
    int XI712;

    switch (CURRENT_TERMINAL) {
      case lex_int:
	{
	    ADVANCE_LEXER;
	    XR851 (&XI712);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      case lex_pointer:
	{
	    ADVANCE_LEXER;
	    XR849 (&XI712);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      case lex_void:
	{
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_star:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_implicit:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_conv_ptr_ptr_void; 
	    }
	}
	break;
      case 358:
	return;
      default:
	goto XL1;
    }
    goto XL0;
  XL1:;
    SAVE_LEXER (358);
    return;
  XL0:;
    *XO712 = XI712;
}

void
XR847 (int *XO712)
{
    int XI712;

    switch (CURRENT_TERMINAL) {
      case lex_enum:
	{
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_implicit:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_conv_int_enum; 
	    }
	}
	break;
      case lex_int:
	{
	    ADVANCE_LEXER;
	    XR850 (&XI712);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      case lex_pointer:
	{
	    ADVANCE_LEXER;
	    XR851 (&XI712);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      case 358:
	return;
      default:
	goto XL1;
    }
    goto XL0;
  XL1:;
    SAVE_LEXER (358);
    return;
  XL0:;
    *XO712 = XI712;
}

void
XR849 (int *XO712)
{
    int XI712;

    switch (CURRENT_TERMINAL) {
      case lex_close_Hround:
	{
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_conv_ptr_ptr; 
	    }
	}
	break;
      case lex_explicit:
	{
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_conv_ptr_ptr_expl; 
	    }
	}
	break;
      case lex_implicit:
	{
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_conv_ptr_ptr_impl; 
	    }
	}
	break;
      case 358:
	return;
      default:
	goto XL1;
    }
    goto XL0;
  XL1:;
    SAVE_LEXER (358);
    return;
  XL0:;
    *XO712 = XI712;
}

void
XR850 (int *XO712)
{
    int XI712;

    switch (CURRENT_TERMINAL) {
      case lex_close_Hround:
	{
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_conv_int_int; 
	    }
	}
	break;
      case lex_explicit:
	{
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_conv_int_int_expl; 
	    }
	}
	break;
      case lex_implicit:
	{
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_conv_int_int_impl; 
	    }
	}
	break;
      case 358:
	return;
      default:
	goto XL1;
    }
    goto XL0;
  XL1:;
    SAVE_LEXER (358);
    return;
  XL0:;
    *XO712 = XI712;
}

void
XR851 (int *XO712)
{
    int XI712;

    switch (CURRENT_TERMINAL) {
      case lex_close_Hround:
	{
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_conv_int_ptr; 
	    }
	}
	break;
      case lex_explicit:
	{
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_conv_int_ptr_expl; 
	    }
	}
	break;
      case lex_implicit:
	{
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_conv_int_ptr_impl; 
	    }
	}
	break;
      case 358:
	return;
      default:
	goto XL1;
    }
    goto XL0;
  XL1:;
    SAVE_LEXER (358);
    return;
  XL0:;
    *XO712 = XI712;
}

void
XR743 (int *XO712)
{
    int XI712;

    if ((CURRENT_TERMINAL) == 358) {
	return;
    }
    {
	EXP XI452;

	switch (CURRENT_TERMINAL) {
	  case lex_option:
	    break;
	  default:
	    goto XL1;
	}
	ADVANCE_LEXER;
	{
	    switch (CURRENT_TERMINAL) {
	      case lex_string_Hexp:
		{
		    {

    XI452 = crt_token->pp_data.exp;
		    }
		    ADVANCE_LEXER;
		}
		break;
	      case lex_wstring_Hexp:
		{
		    {

    XI452 = crt_token->pp_data.exp;
		    }
		    ADVANCE_LEXER;
		}
		break;
	      default:
		goto XL1;
	    }
	}
	{

    STRING s = DEREF_str (exp_string_lit_str ((XI452)));
    (XI712) = find_option_no (s, 0);
    if ((XI712) == -1) {
	report (preproc_loc, ERR_pragma_option_bad (s));
    }
	}
    }
    goto XL0;
  XL1:;
    SAVE_LEXER (358);
    return;
  XL0:;
    *XO712 = XI712;
}

void
XR852 (int *XO452)
{
    int XI452;

    switch (CURRENT_TERMINAL) {
      case lex_long:
	{
	    ADVANCE_LEXER;
	    XR854 (&XI452);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      default:
	{
	    {
 (XI452) = SUFFIX_U; 
	    }
	}
	break;
      case 358:
	return;
    }
    goto XL0;
  XL1:;
    SAVE_LEXER (358);
    return;
  XL0:;
    *XO452 = XI452;
}

void
XR853 (int *XO452)
{
    int XI452;

    switch (CURRENT_TERMINAL) {
      case lex_long:
	{
	    ADVANCE_LEXER;
	    {
 (XI452) = SUFFIX_LL; 
	    }
	}
	break;
      default:
	{
	    {
 (XI452) = SUFFIX_L; 
	    }
	}
	break;
      case 358:
	return;
    }
    *XO452 = XI452;
}

void
XR854 (int *XO452)
{
    int XI452;

    switch (CURRENT_TERMINAL) {
      case lex_long:
	{
	    ADVANCE_LEXER;
	    {
 (XI452) = SUFFIX_ULL; 
	    }
	}
	break;
      default:
	{
	    {
 (XI452) = SUFFIX_UL; 
	    }
	}
	break;
      case 358:
	return;
    }
    *XO452 = XI452;
}

void
XR403 (IDENTIFIER *XO379)
{
    IDENTIFIER XI379;

    if ((CURRENT_TERMINAL) == 358) {
	return;
    }
    {
	TOKEN XI404;
	int XI401;
	IDENTIFIER XI405;

	XR400 (&XI404);
	XR402 (&XI401);
	{
	    switch (CURRENT_TERMINAL) {
	      case lex_identifier:
		{
		    {

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

    XI405 = crt_token->pp_data.id.use;
		    }
		    ADVANCE_LEXER;
		}
		break;
	      case lex_statement_Hname:
		{
		    {

    XI405 = crt_token->pp_data.id.use;
		    }
		    ADVANCE_LEXER;
		}
		break;
	      case lex_type_Hname:
		{
		    {

    XI405 = crt_token->pp_data.id.use;
		    }
		    ADVANCE_LEXER;
		}
		break;
	      case 358:
		RESTORE_LEXER;
		goto XL1;
	      default:
		goto XL1;
	    }
	}
	{

    (XI379) = make_tok_param ((XI404), (XI401), (XI405));
	}
    }
    goto XL0;
  XL1:;
    SAVE_LEXER (358);
    return;
  XL0:;
    *XO379 = XI379;
}

void
XR855 (void)
{
    switch (CURRENT_TERMINAL) {
      case lex_star:
	{
	    unsigned XI413;

	    ADVANCE_LEXER;
	    {

    int t = crt_lex_token;
    if (t == lex_identifier || t == lex_type_Hname ||
	 t == lex_namespace_Hname || t == lex_statement_Hname) {
	t = find_hashid (crt_token->pp_data.id.hash);
	crt_lex_token = t;
    }
	    }
	    {
		switch (CURRENT_TERMINAL) {
		  case lex_allow: case lex_disallow: case lex_warning:
		    {
			XR510 (&XI413);
			if ((CURRENT_TERMINAL) == 358) {
			    RESTORE_LEXER;
			    goto XL1;
			}
		    }
		    break;
		  default:
		    {
			{
 (XI413) = (unsigned) OPTION_ON; 
			}
		    }
		    break;
		}
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_colon:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {

    add_token_literal (NULL_id, (XI413));
	    }
	}
	break;
      case lex_colon: case lex_allow: case lex_disallow:
      case lex_warning:
	{
	    unsigned XI413;
	    IDENTIFIER XI379;

	    {

    int t = crt_lex_token;
    if (t == lex_identifier || t == lex_type_Hname ||
	 t == lex_namespace_Hname || t == lex_statement_Hname) {
	t = find_hashid (crt_token->pp_data.id.hash);
	crt_lex_token = t;
    }
	    }
	    {
		switch (CURRENT_TERMINAL) {
		  case lex_allow: case lex_disallow: case lex_warning:
		    {
			XR510 (&XI413);
			if ((CURRENT_TERMINAL) == 358) {
			    RESTORE_LEXER;
			    goto XL1;
			}
		    }
		    break;
		  default:
		    {
			{
 (XI413) = (unsigned) OPTION_OFF; 
			}
		    }
		    break;
		}
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_colon:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {

    int t = crt_lex_token;
    if (t >= FIRST_KEYWORD && t <= LAST_KEYWORD) {
	crt_lex_token = lex_identifier;
    }
	    }
	    {
		switch (CURRENT_TERMINAL) {
		  case lex_identifier:
		    {
			{

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

    XI379 = crt_token->pp_data.id.use;
			}
			ADVANCE_LEXER;
		    }
		    break;
		  case lex_statement_Hname:
		    {
			{

    XI379 = crt_token->pp_data.id.use;
			}
			ADVANCE_LEXER;
		    }
		    break;
		  case lex_type_Hname:
		    {
			{

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

    add_token_literal ((XI379), (XI413));
	    }
	}
	break;
      case 358:
	return;
      default:
	goto XL1;
    }
    return;
  XL1:;
    SAVE_LEXER (358);
    return;
}

void
XR513 (int *XO381)
{
    int XI381;

    switch (CURRENT_TERMINAL) {
      case lex_allow:
	{
	    ADVANCE_LEXER;
	    {
 (XI381) = OPT_none; 
	    }
	}
	break;
      case lex_disallow:
	{
	    ADVANCE_LEXER;
	    {
 (XI381) = OPT_error; 
	    }
	}
	break;
      case lex_off:
	{
	    ADVANCE_LEXER;
	    {
 (XI381) = OPT_none; 
	    }
	}
	break;
      case lex_on:
	{
	    ADVANCE_LEXER;
	    {
 (XI381) = OPT_error; 
	    }
	}
	break;
      case lex_warning:
	{
	    ADVANCE_LEXER;
	    {
 (XI381) = OPT_warning; 
	    }
	}
	break;
      case 358:
	return;
      default:
	goto XL1;
    }
    goto XL0;
  XL1:;
    SAVE_LEXER (358);
    return;
  XL0:;
    *XO381 = XI381;
}

void
XR856 (int *XO401)
{
    int XI401;

    switch (CURRENT_TERMINAL) {
      case lex_value:
	{
	    ADVANCE_LEXER;
	    {
 (XI401) = lex_discard; 
	    }
	}
	break;
      case lex_variable:
	{
	    ADVANCE_LEXER;
	    {
 (XI401) = lex_unused; 
	    }
	}
	break;
      case 358:
	return;
      default:
	goto XL1;
    }
    goto XL0;
  XL1:;
    SAVE_LEXER (358);
    return;
  XL0:;
    *XO401 = XI401;
}

void
XR857 (int *XO401)
{
    int XI401;

    switch (CURRENT_TERMINAL) {
      case lex_reachable:
	{
	    ADVANCE_LEXER;
	    {
 (XI401) = lex_reachable; 
	    }
	}
	break;
      case lex_unreachable:
	{
	    ADVANCE_LEXER;
	    {
 (XI401) = lex_unreachable; 
	    }
	}
	break;
      default:
	{
	    {
 (XI401) = lex_set; 
	    }
	}
	break;
      case 358:
	return;
    }
    *XO401 = XI401;
}

void
XR500 (void)
{
  XL2_500:;
    switch (CURRENT_TERMINAL) {
      case lex_identifier: case lex_type_Hname: case lex_namespace_Hname:
      case lex_statement_Hname:
	{
	    IDENTIFIER XI379;

	    {
		switch (CURRENT_TERMINAL) {
		  case lex_identifier:
		    {
			{

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

    XI379 = crt_token->pp_data.id.use;
			}
			ADVANCE_LEXER;
		    }
		    break;
		  case lex_statement_Hname:
		    {
			{

    XI379 = crt_token->pp_data.id.use;
			}
			ADVANCE_LEXER;
		    }
		    break;
		  case lex_type_Hname:
		    {
			{

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

    preserve_id ((XI379), lex_preserve);
	    }
	    goto XL2_500;
	}
	/*UNREACHED*/
      case 358:
	return;
      default:
	break;
    }
    return;
  XL1:;
    SAVE_LEXER (358);
    return;
}

void
XR862 (TYPE *XO401)
{
    TYPE XI401;

    switch (CURRENT_TERMINAL) {
      case lex_printf:
	{
	    ADVANCE_LEXER;
	    {
 (XI401) = type_printf; 
	    }
	}
	break;
      case lex_scanf:
	{
	    ADVANCE_LEXER;
	    {
 (XI401) = type_scanf; 
	    }
	}
	break;
      case lex_wchar_Ht:
	{
	    ADVANCE_LEXER;
	    XR863 (&XI401);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      case 358:
	return;
      default:
	goto XL1;
    }
    goto XL0;
  XL1:;
    SAVE_LEXER (358);
    return;
  XL0:;
    *XO401 = XI401;
}

void
XR863 (TYPE *XO401)
{
    TYPE XI401;

    switch (CURRENT_TERMINAL) {
      case lex_printf:
	{
	    ADVANCE_LEXER;
	    {
 (XI401) = type_wprintf; 
	    }
	}
	break;
      case lex_scanf:
	{
	    ADVANCE_LEXER;
	    {
 (XI401) = type_wscanf; 
	    }
	}
	break;
      case 358:
	return;
      default:
	goto XL1;
    }
    goto XL0;
  XL1:;
    SAVE_LEXER (358);
    return;
  XL0:;
    *XO401 = XI401;
}

void
XR482 (int *XI477)
{
    if ((CURRENT_TERMINAL) == 358) {
	return;
    }
  XL2_482:;
    {
	IDENTIFIER XI475;
	IDENTIFIER XI859;
	IDENTIFIER XI379;

	{

    (XI0) = predict_operator ();
	}
	if (!XI0)
	    goto XL3;
	{

    (XI475) = DEREF_id (hashid_id (KEYWORD (lex_zzzz)));
    parse_operator (&(XI475));
	}
	{

    (XI859) = check_id (crt_namespace, (XI475), 0);
	}
	XR783 (XI859, &XI379);
	if ((CURRENT_TERMINAL) == 358) {
	    RESTORE_LEXER;
	    goto XL1;
	}
	{

    token_interface ((XI379), (*XI477));
	}
	{

    int t = crt_lex_token;
    if (t >= FIRST_KEYWORD && t <= LAST_KEYWORD) {
	if (t != lex_tag_Hcap && !predict_operator ()) {
	    crt_lex_token = lex_identifier;
	}
    }
	}
	goto XL2_482;
    }
    /*UNREACHED*/
  XL3:;
    switch (CURRENT_TERMINAL) {
      case lex_tag_Hcap:
	{
	    IDENTIFIER XI475;
	    IDENTIFIER XI860;
	    IDENTIFIER XI379;

	    ADVANCE_LEXER;
	    {

    int t = crt_lex_token;
    if (t >= FIRST_KEYWORD && t <= LAST_KEYWORD) {
	crt_lex_token = lex_identifier;
    }
	    }
	    {
		switch (CURRENT_TERMINAL) {
		  case lex_identifier:
		    {
			{

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

    XI475 = crt_token->pp_data.id.use;
			}
			ADVANCE_LEXER;
		    }
		    break;
		  case lex_statement_Hname:
		    {
			{

    XI475 = crt_token->pp_data.id.use;
			}
			ADVANCE_LEXER;
		    }
		    break;
		  case lex_type_Hname:
		    {
			{

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

    (XI860) = find_tag_token ((XI475));
	    }
	    XR783 (XI860, &XI379);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    token_interface ((XI379), (*XI477));
	    }
	    {

    int t = crt_lex_token;
    if (t >= FIRST_KEYWORD && t <= LAST_KEYWORD) {
	if (t != lex_tag_Hcap && !predict_operator ()) {
	    crt_lex_token = lex_identifier;
	}
    }
	    }
	    goto XL2_482;
	}
	/*UNREACHED*/
      case lex_identifier: case lex_type_Hname: case lex_namespace_Hname:
      case lex_statement_Hname:
	{
	    IDENTIFIER XI475;
	    IDENTIFIER XI861;
	    IDENTIFIER XI379;

	    {
		switch (CURRENT_TERMINAL) {
		  case lex_identifier:
		    {
			{

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

    XI475 = crt_token->pp_data.id.use;
			}
			ADVANCE_LEXER;
		    }
		    break;
		  case lex_statement_Hname:
		    {
			{

    XI475 = crt_token->pp_data.id.use;
			}
			ADVANCE_LEXER;
		    }
		    break;
		  case lex_type_Hname:
		    {
			{

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

    (XI861) = check_id (crt_namespace, (XI475), 0);
	    }
	    XR783 (XI861, &XI379);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    token_interface ((XI379), (*XI477));
	    }
	    {

    int t = crt_lex_token;
    if (t >= FIRST_KEYWORD && t <= LAST_KEYWORD) {
	if (t != lex_tag_Hcap && !predict_operator ()) {
	    crt_lex_token = lex_identifier;
	}
    }
	    }
	    goto XL2_482;
	}
	/*UNREACHED*/
      case lex_hash_H1:
	{
	    IDENTIFIER XI475;
	    IDENTIFIER XI858;
	    IDENTIFIER XI379;

	    {
		{
		    switch (CURRENT_TERMINAL) {
		      case lex_hash_H1:
			break;
		      default:
			goto XL1;
		    }
		    ADVANCE_LEXER;
		}
	    }
	    {

    int t = crt_lex_token;
    if (t >= FIRST_KEYWORD && t <= LAST_KEYWORD) {
	crt_lex_token = lex_identifier;
    }
	    }
	    {
		switch (CURRENT_TERMINAL) {
		  case lex_identifier:
		    {
			{

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

    XI475 = crt_token->pp_data.id.use;
			}
			ADVANCE_LEXER;
		    }
		    break;
		  case lex_statement_Hname:
		    {
			{

    XI475 = crt_token->pp_data.id.use;
			}
			ADVANCE_LEXER;
		    }
		    break;
		  case lex_type_Hname:
		    {
			{

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

    (XI858) = find_ext_token ((XI475));
	    }
	    XR783 (XI858, &XI379);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    token_interface ((XI379), (*XI477));
	    }
	    {

    int t = crt_lex_token;
    if (t >= FIRST_KEYWORD && t <= LAST_KEYWORD) {
	if (t != lex_tag_Hcap && !predict_operator ()) {
	    crt_lex_token = lex_identifier;
	}
    }
	    }
	    goto XL2_482;
	}
	/*UNREACHED*/
      default:
	break;
    }
    return;
  XL1:;
    SAVE_LEXER (358);
    return;
}

void
XR775 (void)
{
    switch (CURRENT_TERMINAL) {
      case lex_accept:
	{
	    int XI712;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    {
		switch (CURRENT_TERMINAL) {
		  case lex_ellipsis:
		    {
			ADVANCE_LEXER;
		    }
		    break;
		  case lex_ellipsis_Hexp:
		    {
			ADVANCE_LEXER;
		    }
		    break;
		  default:
		    goto XL1;
		}
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_identif:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_ellipsis_ident; 
	    }
	    {
 (XI381) = (unsigned) OPTION_OFF; 
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case lex_ambiguous:
	{
	    int XI712;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_overload:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_resolution:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_overload_ambig; 
	    }
	    XR510 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case lex_assignment:
	{
	    int XI712;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_as:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_bool:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_bool_assign; 
	    }
	    XR510 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case lex_begin:
	{
	    ADVANCE_LEXER;
	    XR786 ();
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      case lex_bitfield:
	{
	    int XI712;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_overflow:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_bitf_overflow; 
	    }
	    XR510 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case lex_block:
	{
	    int XI712;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_function:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_static:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_func_block; 
	    }
	    XR510 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case lex_catch:
	{
	    int XI712;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_all:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_wall; 
	    }
	    XR510 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case lex_character:
	{
	    ADVANCE_LEXER;
	    XR812 ();
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      case lex_compatible:
	{
	    int XI712;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_token:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_token_redef; 
	    }
	    XR510 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case lex_complete:
	{
	    ADVANCE_LEXER;
	    XR805 ();
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      case lex_conditional:
	{
	    ADVANCE_LEXER;
	    XR801 ();
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      case lex_const:
	{
	    ADVANCE_LEXER;
	    XR804 ();
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      case lex_conversion:
	{
	    int XI712;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_analysis:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    XR713 (&XI712);
	    XR509 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case lex_decl:
	{
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_block:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    XR787 ();
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      case lex_directive:
	{
	    ADVANCE_LEXER;
	    XR802 ();
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      case lex_directory:
	{
	    IDENTIFIER XI770;
	    IDENTIFIER XI379;

	    ADVANCE_LEXER;
	    {

    int t = crt_lex_token;
    if (t >= FIRST_KEYWORD && t <= LAST_KEYWORD) {
	crt_lex_token = lex_identifier;
    }
	    }
	    {
		switch (CURRENT_TERMINAL) {
		  case lex_identifier:
		    {
			{

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

    XI770 = crt_token->pp_data.id.use;
			}
			ADVANCE_LEXER;
		    }
		    break;
		  case lex_statement_Hname:
		    {
			{

    XI770 = crt_token->pp_data.id.use;
			}
			ADVANCE_LEXER;
		    }
		    break;
		  case lex_type_Hname:
		    {
			{

    XI770 = crt_token->pp_data.id.use;
			}
			ADVANCE_LEXER;
		    }
		    break;
		  default:
		    goto XL1;
		}
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_use:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_environment:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {

    int t = crt_lex_token;
    if (t >= FIRST_KEYWORD && t <= LAST_KEYWORD) {
	crt_lex_token = lex_identifier;
    }
	    }
	    {
		switch (CURRENT_TERMINAL) {
		  case lex_identifier:
		    {
			{

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

    XI379 = crt_token->pp_data.id.use;
			}
			ADVANCE_LEXER;
		    }
		    break;
		  case lex_statement_Hname:
		    {
			{

    XI379 = crt_token->pp_data.id.use;
			}
			ADVANCE_LEXER;
		    }
		    break;
		  case lex_type_Hname:
		    {
			{

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

    directory_option ((XI770), (XI379));
	    }
	}
	break;
      case lex_discard:
	{
	    int XI712;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_analysis:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    XR714 (&XI712);
	    XR509 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case lex_dollar:
	{
	    int XI712;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_as:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_ident:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_dollar_ident; 
	    }
	    XR510 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case lex_end:
	{
	    ADVANCE_LEXER;
	    {

    end_option (1);
	    }
	}
	break;
      case lex_enum:
	{
	    int XI712;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_switch:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_analysis:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_enum_switch; 
	    }
	    XR509 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case lex_escape:
	{
	    EXP XI413;
	    EXP XI448;

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

    XI413 = crt_token->pp_data.exp;
			}
			ADVANCE_LEXER;
		    }
		    break;
		  case lex_wchar_Hexp:
		    {
			{

    XI413 = crt_token->pp_data.exp;
			}
			ADVANCE_LEXER;
		    }
		    break;
		  default:
		    goto XL1;
		}
	    }
	    XR757 (&XI448);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_escape ((XI413), (XI448));
	    }
	}
	break;
      case lex_explicit:
	{
	    unsigned XI449;
	    unsigned XI381;
	    int XI712;
	    int XI718;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_cast:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    XR745 (&XI449);
	    XR510 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {
 (XI712) = OPT_cast_explicit; 
	    }
	    {
 (XI718) = OPT_VAL_cast_explicit; 
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	    {

    set_value ((XI718), NULL_exp, (unsigned long) (XI449));
	    }
	}
	break;
      case lex_external:
	{
	    ADVANCE_LEXER;
	    XR803 ();
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      case lex_extra:
	{
	    int XI712;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    XR789 (&XI712);
	    XR510 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case lex_fall:
	{
	    int XI712;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_into:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_case:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_case_fall; 
	    }
	    XR510 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case lex_for:
	{
	    int XI712;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_initialization:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_block:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_for_scope; 
	    }
	    XR509 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case lex_forward:
	{
	    int XI712;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_enum:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_decl:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_enum_decl; 
	    }
	    XR510 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case lex_function:
	{
	    int XI712;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_pointer:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_as:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_pointer:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_conv_ptr_func; 
	    }
	    XR510 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case lex_ident:
	{
	    int XI712;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    XR790 (&XI712);
	    XR510 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case lex_ignore:
	{
	    int XI712;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_struct:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_div:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_union:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_div:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_enum:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_tag:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_type_tag_ignore; 
	    }
	    XR509 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case lex_implicit:
	{
	    ADVANCE_LEXER;
	    XR806 ();
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      case lex_includes:
	{
	    int XI712;
	    EXP XI381;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_depth:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_VAL_include_depth; 
	    }
	    {
		{
		    switch (CURRENT_TERMINAL) {
		      case lex_integer_Hexp:
			{

    XI381 = crt_token->pp_data.exp;
			}
			break;
		      default:
			goto XL1;
		    }
		    ADVANCE_LEXER;
		}
	    }
	    {

    set_value ((XI712), (XI381), (unsigned long) 0);
	    }
	}
	break;
      case lex_incompatible:
	{
	    int XI712;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    XR792 (&XI712);
	    XR510 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case lex_incomplete:
	{
	    int XI712;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_type:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_as:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_object:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_type:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_type_obj_incompl; 
	    }
	    XR510 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case lex_indented:
	{
	    int XI712;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    XR793 (&XI712);
	    XR510 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case lex_initialization:
	{
	    int XI712;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_of:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_struct:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_div:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_union:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_open_Hround:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_auto:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_init_struct; 
	    }
	    XR510 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case lex_inline:
	{
	    unsigned XI381;
	    int XI712;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_linkage:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    XR725 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {
 (XI712) = OPT_inline_internal; 
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case lex_integer:
	{
	    int XI712;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    XR799 (&XI712);
	    XR509 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case lex_linkage:
	{
	    unsigned XI381;
	    unsigned XI477;
	    int XI712;
	    int XI718;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_resolution:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_colon:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    XR726 (&XI381, &XI477);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {
 (XI712) = OPT_link_resolve; 
	    }
	    {
 (XI718) = OPT_link_internal; 
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	    {

    set_option ((XI718), (XI477));
	    }
	}
	break;
      case lex_longlong:
	{
	    int XI712;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_type:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_longlong; 
	    }
	    XR510 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case lex_nested:
	{
	    int XI712;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_comment:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_analysis:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_nest_comment; 
	    }
	    XR509 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case lex_no:
	{
	    int XI712;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    XR794 (&XI712);
	    XR510 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case lex_operator:
	{
	    int XI712;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_precedence:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_analysis:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_paren; 
	    }
	    XR509 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case lex_option:
	{
	    ADVANCE_LEXER;
	    XR813 ();
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      case lex_overload:
	{
	    int XI712;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_resolution:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_overload_res; 
	    }
	    XR510 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case lex_pointer:
	{
	    int XI712;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_operator:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_analysis:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_ptr_operator; 
	    }
	    XR509 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case lex_prototype:
	{
	    int XI712;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    XR795 (&XI712);
	    XR510 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case lex_rvalue:
	{
	    int XI712;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_token:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_as:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_const:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_token_const; 
	    }
	    XR510 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case lex_semicolon:
	{
	    ADVANCE_LEXER;
	}
	break;
      case lex_set:
	{
	    ADVANCE_LEXER;
	    XR811 ();
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      case lex_text:
	{
	    int XI712;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_after:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_directive:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_ppdir_text; 
	    }
	    XR510 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case lex_this:
	{
	    int XI712;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_lvalue:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_this_lvalue; 
	    }
	    XR510 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case lex_throw:
	{
	    int XI712;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_analysis:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_throw_bad; 
	    }
	    XR509 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case lex_un_Hknown:
	{
	    int XI712;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    XR796 (&XI712);
	    XR510 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case lex_unify:
	{
	    ADVANCE_LEXER;
	    XR807 ();
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      case lex_unmatched:
	{
	    int XI712;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_quote:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_unmatched; 
	    }
	    XR510 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case lex_unreachable:
	{
	    int XI712;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_code:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_reached; 
	    }
	    XR510 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case lex_use:
	{
	    ADVANCE_LEXER;
	    XR810 ();
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      case lex_variable:
	{
	    ADVANCE_LEXER;
	    XR808 ();
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      case lex_weak:
	{
	    ADVANCE_LEXER;
	    XR809 ();
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      case lex_writeable:
	{
	    int XI712;
	    unsigned XI381;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_string:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_lit:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI712) = OPT_const_string; 
	    }
	    XR510 (&XI381);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    set_option ((XI712), (XI381));
	    }
	}
	break;
      case lex_error:
	{
	    int XI712;

	    XR761 (&XI712);
	    XR785 (&XI712);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      case lex_keyword: case lex_undef:
	{
	    XR555 ();
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      case 358:
	return;
      default:
	goto XL1;
    }
    return;
  XL1:;
    SAVE_LEXER (358);
    return;
}

/* END OF FILE */


syntax highlighted by Code2HTML, v. 0.9.1