/*
 * 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
XR554 (int *XO401)
{
    int XI401;

    switch (CURRENT_TERMINAL) {
      case lex_asm:
	{
	    ADVANCE_LEXER;
	    {
 (XI401) = lex_asm; 
	    }
	}
	break;
      case lex_discard:
	{
	    ADVANCE_LEXER;
	    XR856 (&XI401);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      case lex_exhaustive:
	{
	    ADVANCE_LEXER;
	    {
 (XI401) = lex_exhaustive; 
	    }
	}
	break;
      case lex_fall:
	{
	    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;
	    {
 (XI401) = lex_fall; 
	    }
	}
	break;
      case lex_inline:
	{
	    ADVANCE_LEXER;
	    {
 (XI401) = lex_inline; 
	    }
	}
	break;
      case lex_operator:
	{
	    ADVANCE_LEXER;
	    {

    (XI401) = crt_lex_token;
    if ((XI401) >= FIRST_SYMBOL && (XI401) <= LAST_SYMBOL) crt_lex_token = lex_plus;
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_plus:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	}
	break;
      case lex_set:
	{
	    ADVANCE_LEXER;
	    XR857 (&XI401);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      case lex_type:
	{
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_representation:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
 (XI401) = lex_representation; 
	    }
	}
	break;
      case lex_weak:
	{
	    ADVANCE_LEXER;
	    {
 (XI401) = lex_weak; 
	    }
	}
	break;
      case lex_keyword:
	{
	    IDENTIFIER XI379;

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

    (XI401) = find_keyword ((XI379));
	    }
	}
	break;
      case 358:
	return;
      default:
	goto XL1;
    }
    goto XL0;
  XL1:;
    SAVE_LEXER (358);
    return;
  XL0:;
    *XO401 = XI401;
}

void
XR451 (DECL_SPEC *XO413)
{
    DECL_SPEC XI413;

    switch (CURRENT_TERMINAL) {
      case lex_private:
	{
	    ADVANCE_LEXER;
	    {
 (XI413) = dspec_private; 
	    }
	}
	break;
      case lex_protected:
	{
	    ADVANCE_LEXER;
	    {
 (XI413) = dspec_protected; 
	    }
	}
	break;
      case lex_public:
	{
	    ADVANCE_LEXER;
	    {
 (XI413) = dspec_public; 
	    }
	}
	break;
      default:
	{
	    {
 (XI413) = dspec_public; 
	    }
	}
	break;
      case 358:
	return;
    }
    *XO413 = XI413;
}

void
XR761 (int *XO712)
{
    int XI712;

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

	switch (CURRENT_TERMINAL) {
	  case lex_error:
	    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_error_no (s, 0);
    if ((XI712) == -1) {
	report (preproc_loc, ERR_pragma_error_bad (s));
    }
	}
    }
    goto XL0;
  XL1:;
    SAVE_LEXER (358);
    return;
  XL0:;
    *XO712 = XI712;
}

void
XR486 (void)
{
    if ((CURRENT_TERMINAL) == 358) {
	return;
    }
    {
	TYPE XI401;
	IDENTIFIER XI379;

	{

    in_token_decl = 1;
	}
	switch (CURRENT_TERMINAL) {
	  case lex_member:
	    break;
	  default:
	    goto XL1;
	}
	ADVANCE_LEXER;
	switch (CURRENT_TERMINAL) {
	  case lex_definition:
	    break;
	  default:
	    goto XL1;
	}
	ADVANCE_LEXER;
	{

    (XI401) = type_error;
    parse_tok_type (&(XI401));
    object_type ((XI401), null_tag);
	}
	switch (CURRENT_TERMINAL) {
	  case lex_colon:
	    break;
	  default:
	    goto XL1;
	}
	ADVANCE_LEXER;
	{
	    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;
	    }
	}
	{

    in_token_decl = 0;
	}
	{

    if (define_mem_macro ((XI379), (XI401))) no_declarations++;
	}
    }
    return;
  XL1:;
    SAVE_LEXER (358);
    return;
}

void
XR499 (int XI413)
{
  XL2_499:;
    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), (XI413));
	    }
	    goto XL2_499;
	}
	/*UNREACHED*/
      case 358:
	return;
      default:
	break;
    }
    return;
  XL1:;
    SAVE_LEXER (358);
    return;
}

void
XR745 (unsigned *XO449)
{
    unsigned XI449;

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

void
XR511 (unsigned *XO381)
{
    unsigned XI381;

    switch (CURRENT_TERMINAL) {
      case lex_allow:
	{
	    ADVANCE_LEXER;
	    {
 (XI381) = (unsigned) OPTION_OFF; 
	    }
	}
	break;
      case lex_disallow:
	{
	    ADVANCE_LEXER;
	    {
 (XI381) = (unsigned) OPTION_ON; 
	    }
	}
	break;
      case lex_off:
	{
	    ADVANCE_LEXER;
	    {
 (XI381) = (unsigned) OPTION_OFF; 
	    }
	}
	break;
      case lex_on:
	{
	    ADVANCE_LEXER;
	    {
 (XI381) = (unsigned) OPTION_ON; 
	    }
	}
	break;
      case lex_warning:
	{
	    ADVANCE_LEXER;
	    {
 (XI381) = (unsigned) OPTION_WARN; 
	    }
	}
	break;
      case 358:
	return;
      default:
	goto XL1;
    }
    goto XL0;
  XL1:;
    SAVE_LEXER (358);
    return;
  XL0:;
    *XO381 = XI381;
}

void
XR417 (SID_LIST_ID *XO406)
{
    SID_LIST_ID XI406;

    if ((CURRENT_TERMINAL) == 358) {
	return;
    }
    {
	IDENTIFIER XI379;
	SID_LIST_ID XI409;

	XR415 (&XI379);
	{
	    switch (CURRENT_TERMINAL) {
	      case lex_comma:
		{
		    ADVANCE_LEXER;
		    XR835 (&XI409);
		    if ((CURRENT_TERMINAL) == 358) {
			RESTORE_LEXER;
			goto XL1;
		    }
		}
		break;
	      default:
		{
		    {

    (XI409) = NULL_list (IDENTIFIER);
		    }
		}
		break;
	      case 358:
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	{

    CONS_id ((XI379), (XI409), (XI406));
	}
    }
    goto XL0;
  XL1:;
    SAVE_LEXER (358);
    return;
  XL0:;
    *XO406 = XI406;
}

void
XR555 (void)
{
    switch (CURRENT_TERMINAL) {
      case lex_undef:
	{
	    IDENTIFIER XI379;

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

    undef_keyword ((XI379));
	    }
	}
	break;
      case lex_keyword:
	{
	    IDENTIFIER XI379;
	    int XI401;

	    XR553 (&XI379);
	    switch (CURRENT_TERMINAL) {
	      case lex_for:
		break;
	      case 358:
		RESTORE_LEXER;
		goto XL1;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    XR554 (&XI401);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    define_keyword ((XI379), (XI401));
	    }
	}
	break;
      case 358:
	return;
      default:
	goto XL1;
    }
    return;
  XL1:;
    SAVE_LEXER (358);
    return;
}

void
XR501 (void)
{
  XL2_501:;
    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_suspend);
	    }
	    goto XL2_501;
	}
	/*UNREACHED*/
      case 358:
	return;
      default:
	break;
    }
    return;
  XL1:;
    SAVE_LEXER (358);
    return;
}

void
XR510 (unsigned *XO381)
{
    unsigned XI381;

    switch (CURRENT_TERMINAL) {
      case lex_allow:
	{
	    ADVANCE_LEXER;
	    {
 (XI381) = (unsigned) OPTION_OFF; 
	    }
	}
	break;
      case lex_disallow:
	{
	    ADVANCE_LEXER;
	    {
 (XI381) = (unsigned) OPTION_ON; 
	    }
	}
	break;
      case lex_warning:
	{
	    ADVANCE_LEXER;
	    {
 (XI381) = (unsigned) OPTION_WARN; 
	    }
	}
	break;
      case 358:
	return;
      default:
	goto XL1;
    }
    goto XL0;
  XL1:;
    SAVE_LEXER (358);
    return;
  XL0:;
    *XO381 = XI381;
}

void
XR450 (int *XO448, int *XO449)
{
    int XI448;
    int XI449;

    switch (CURRENT_TERMINAL) {
      case lex_const:
	{
	    ADVANCE_LEXER;
	    {
 (XI448) = 0; 
	    }
	    {
 (XI449) = 1; 
	    }
	}
	break;
      case lex_lvalue:
	{
	    ADVANCE_LEXER;
	    {
 (XI448) = 1; 
	    }
	    {
 (XI449) = 0; 
	    }
	}
	break;
      case lex_rvalue:
	{
	    ADVANCE_LEXER;
	    {
 (XI448) = 0; 
	    }
	    {
 (XI449) = 0; 
	    }
	}
	break;
      default:
	{
	    {
 (XI448) = 0; 
	    }
	    {
 (XI449) = 0; 
	    }
	}
	break;
      case 358:
	return;
    }
    *XO448 = XI448;
    *XO449 = XI449;
}

void
XR757 (EXP *XO448)
{
    EXP XI448;

    switch (CURRENT_TERMINAL) {
      case lex_as:
	{
	    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;
		}
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_allow:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	}
	break;
      case lex_disallow:
	{
	    ADVANCE_LEXER;
	    {

    (XI448) = NULL_exp;
	    }
	}
	break;
      case 358:
	return;
      default:
	goto XL1;
    }
    goto XL0;
  XL1:;
    SAVE_LEXER (358);
    return;
  XL0:;
    *XO448 = XI448;
}

void
XR411 (SID_LIST_ID XI410, IDENTIFIER *XO379)
{
    IDENTIFIER XI379;

    switch (CURRENT_TERMINAL) {
      case lex_exp_Hcap:
	{
	    IDENTIFIER XI405;

	    ADVANCE_LEXER;
	    {
		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;
		}
	    }
	    {

    (XI379) = prog_tok_param ((XI405), NULL_type, tok_exp_tag, (XI410));
	    }
	}
	break;
      case lex_member_Hcap:
	{
	    TYPE XI401;
	    IDENTIFIER XI405;

	    ADVANCE_LEXER;
	    {

    (XI401) = type_error;
    parse_tok_type (&(XI401));
    object_type ((XI401), null_tag);
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_colon:
		break;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {
		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;
		}
	    }
	    {

    (XI379) = prog_tok_param ((XI405), (XI401), tok_member_tag, (XI410));
	    }
	}
	break;
      case lex_proc_Hcap:
	{
	    IDENTIFIER XI405;

	    ADVANCE_LEXER;
	    {
		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;
		}
	    }
	    {

    (XI379) = prog_tok_param ((XI405), NULL_type, tok_proc_tag, (XI410));
	    }
	}
	break;
      case lex_stmt_Hcap:
	{
	    IDENTIFIER XI405;

	    ADVANCE_LEXER;
	    {
		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;
		}
	    }
	    {

    (XI379) = prog_tok_param ((XI405), NULL_type, tok_stmt_tag, (XI410));
	    }
	}
	break;
      case lex_type_Hcap:
	{
	    TYPE XI401;

	    ADVANCE_LEXER;
	    {

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

    IDENTIFIER tid = DEREF_id (type_name ((XI401)));
    (XI379) = prog_tok_param (tid, (XI401), tok_type_tag, (XI410));
	    }
	}
	break;
      case 358:
	return;
      default:
	goto XL1;
    }
    goto XL0;
  XL1:;
    SAVE_LEXER (358);
    return;
  XL0:;
    *XO379 = XI379;
}

void
XR400 (TOKEN *XO404)
{
    TOKEN XI404;

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

    (XI404) = make_type_token (btype_arith);
	    }
	}
	break;
      case lex_class_Hcap:
	{
	    ADVANCE_LEXER;
	    {

    (XI404) = make_type_token (btype_lang);
	    }
	}
	break;
      case lex_exp_Hcap:
	{
	    int XI448;
	    int XI449;
	    TYPE XI401;

	    ADVANCE_LEXER;
	    XR450 (&XI448, &XI449);
	    switch (CURRENT_TERMINAL) {
	      case lex_colon:
		break;
	      case 358:
		RESTORE_LEXER;
		goto XL1;
	      default:
		goto XL1;
	    }
	    ADVANCE_LEXER;
	    {

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

    (XI404) = make_exp_token ((XI401), (XI448), (XI449));
	    }
	}
	break;
      case lex_float_Hcap:
	{
	    ADVANCE_LEXER;
	    {

    (XI404) = make_type_token (btype_float);
	    }
	}
	break;
      case lex_func_Hcap:
	{
	    TYPE XI401;

	    ADVANCE_LEXER;
	    {

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

    (XI404) = make_func_token ((XI401));
	    }
	}
	break;
      case lex_int_Hcap:
	{
	    ADVANCE_LEXER;
	    {

    MAKE_tok_snat (NULL_nat, (XI404));
	    }
	}
	break;
      case lex_member_Hcap:
	{
	    DECL_SPEC XI413;
	    TYPE XI401;
	    TYPE XI452;

	    ADVANCE_LEXER;
	    XR451 (&XI413);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	    {

    (XI401) = type_error;
    parse_mem_type (&(XI401));
    object_type ((XI401), null_tag);
	    }
	    switch (CURRENT_TERMINAL) {
	      case lex_colon:
		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;
	    {

    (XI404) = make_member_token ((XI401), (XI452), (XI413));
	    }
	}
	break;
      case lex_nat_Hcap:
	{
	    ADVANCE_LEXER;
	    {

    MAKE_tok_nat (NULL_nat, (XI404));
	    }
	}
	break;
      case lex_proc_Hcap:
	{
	    ADVANCE_LEXER;
	    XR834 (&XI404);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      case lex_scalar_Hcap:
	{
	    ADVANCE_LEXER;
	    {

    (XI404) = make_type_token (btype_scalar);
	    }
	}
	break;
      case lex_stmt_Hcap:
	{
	    ADVANCE_LEXER;
	    {

    MAKE_tok_stmt (NULL_exp, (XI404));
	    }
	}
	break;
      case lex_struct_Hcap:
	{
	    ADVANCE_LEXER;
	    {

    (XI404) = make_type_token (btype_struct);
	    }
	}
	break;
      case lex_type_Hcap:
	{
	    ADVANCE_LEXER;
	    {

    (XI404) = make_type_token (btype_none);
	    }
	}
	break;
      case lex_union_Hcap:
	{
	    ADVANCE_LEXER;
	    {

    (XI404) = make_type_token (btype_union);
	    }
	}
	break;
      case lex_variety_Hcap:
	{
	    ADVANCE_LEXER;
	    XR833 (&XI404);
	    if ((CURRENT_TERMINAL) == 358) {
		RESTORE_LEXER;
		goto XL1;
	    }
	}
	break;
      case 358:
	return;
      default:
	goto XL1;
    }
    goto XL0;
  XL1:;
    SAVE_LEXER (358);
    return;
  XL0:;
    *XO404 = XI404;
}

void
XR512 (unsigned *XO381)
{
    unsigned XI381;

    switch (CURRENT_TERMINAL) {
      case lex_warning:
	{
	    ADVANCE_LEXER;
	    {
 (XI381) = (unsigned) OPTION_WARN; 
	    }
	}
	break;
      default:
	{
	    {
 (XI381) = (unsigned) OPTION_ON; 
	    }
	}
	break;
      case 358:
	return;
    }
    *XO381 = XI381;
}

/* BEGINNING OF TRAILER */



/* END OF FILE */


syntax highlighted by Code2HTML, v. 0.9.1