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

/* BEGINNING OF HEADER */

#line 39 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

/*
 * Copyright (c) 2002, The Tendra Project <http://www.ten15.org/>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice unmodified, this list of conditions, and the following
 *    disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 *  		 Crown Copyright (c) 1997
 *
 *  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.
 *
 * $TenDRA: tendra/src/tools/tspec/syntax.act,v 1.9 2005/10/31 10:17:01 stefanf Exp $
 */


#include "config.h"
#include "cstring.h"
#include "msgcat.h"

#include "object.h"
#include "hash.h"
#include "lex.h"
#include "name.h"
#include "syntax.h"
#include "type.h"
#include "utility.h"
#include "variable.h"


/*
 *  PARSER TYPES
 *
 *  These types give the implementations of the various types used
 *  in the syntax.
 */

typedef char *SID_STRING;
typedef type *SID_TYPE;

typedef struct {
    char *iname;
    char *ename;
    int ivers;
    int evers;
} SID_IDENTIFIER;


/*
 *  CURRENT FIELD NAME
 *
 *  The name of the current structure is stored during a +FIELD
 *  construct.
 */

static char *crt_field_name = null;
static int anon_no = 0;


/*
 *  CV-QUALIFIER NAMES
 *
 *  This table gives the mapping between the values used to represent
 *  cv-qualifiers in the parser and the qualifier names used in the
 *  internal representation.
 */

static char *cv_qualifier [] = {
    null, "const", "restrict", "const restrict",
    "volatile", "const volatile", "const restrict volatile"
};

/*
 *  COMPILATION MODE
 *
 *  We allow unreached code in the automatically generated sections.
 */

#ifdef __TenDRA__
#pragma TenDRA begin
#pragma TenDRA unreachable code allow
#pragma TenDRA variable analysis off
#endif


#line 140 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"

/* BEGINNING OF FUNCTION DECLARATIONS */

static void ZRsimple_Htype (SID_TYPE *);
static void ZRparameter_Hdeclaration (SID_TYPE *);
static void ZRnat_Hdeclarator_Hlist (SID_COMMAND *);
static void ZRtype_Hdeclarator_Hlist (SID_COMMAND *);
static void ZRfunction_Hoperator (SID_TYPE *);
static void ZRexp_Hdeclarator_Hlist (int, SID_TYPE, int, SID_COMMAND *);
static void ZRsubset_Hkey (SID_STRING *);
static void ZRmacro_Hparam_Hdeclaration (SID_TYPE *);
static void ZRifdef_Hmacro_Hname (SID_STRING *);
static void ZRdefine_Hparam_Hlist (SID_STRING *);
static void ZR287 (SID_TYPE *);
static void ZRdeclarator (SID_IDENTIFIER *, SID_TYPE *);
static void ZRidentifier (SID_IDENTIFIER *);
static void ZRsubset_Hcommand (SID_COMMAND *);
static void ZRqualified_Htype (SID_TYPE *);
static void ZRabstract_Hdeclarator (SID_STRING *, SID_TYPE *);
static void ZRparameter_Hlist (SID_TYPE *);
static void ZRinternal_Hname (SID_STRING *, int *);
static void ZR308 (SID_STRING, SID_TYPE, SID_STRING *, SID_TYPE *);
static void ZRmacro_Hoperator (SID_TYPE *);
static void ZRenumerator_Hlist (SID_COMMAND *);
static void ZRexternal_Hname (SID_STRING *, int *);
static void ZRtype_Hqualifier (unsigned *);
static void ZRtype_Hkey (int *);
static void ZRtype_Hqualifier_Hopt (unsigned *);
static void ZRconstant_Hvalue (SID_STRING *);
static void ZR318 (SID_IDENTIFIER, SID_TYPE, SID_IDENTIFIER *, SID_TYPE *);
static void ZRspec_Hcommand (SID_COMMAND *);
static void ZRfunc_Hcommand (int *);
static void ZR320 (SID_STRING *, SID_STRING *);
static void ZR321 (SID_STRING *, SID_STRING *, SID_STRING *);
static void ZRarray_Hoperator (SID_TYPE *);
static void ZR322 (SID_COMMAND *);
static void ZR323 (int *, SID_COMMAND *);
static void ZRmacro_Hparam_Hlist (SID_TYPE *);
static void ZR324 (SID_STRING *, int *, SID_IDENTIFIER *);
static void ZR325 (SID_STRING *);
static void ZR328 (SID_STRING *, SID_STRING *);
static void ZRenum_Hcommand (int *);
static void ZRenumerator (SID_COMMAND *);
static void ZR329 (int *);
static void ZRfield_Hdeclarator_Hlist (SID_TYPE, SID_TYPE, SID_COMMAND *);
static void ZR330 (int *);
static void ZRfield_Hexact (int *);
static void ZR333 (SID_TYPE *, SID_TYPE *);
static void ZR335 (SID_TYPE *);
static void ZRcommand_Hlist (SID_COMMAND *);
static void ZR338 (SID_STRING *, SID_TYPE *, SID_STRING *, SID_TYPE *);
static void ZR339 (SID_TYPE *);
static void ZR340 (int *);
static void ZRdirect_Hdeclarator (SID_IDENTIFIER *, SID_TYPE *);
static void ZRtype_Hcommand (int *);
static void ZRtext_Hcommand (SID_COMMAND *);
static void ZR347 (SID_IDENTIFIER *, SID_IDENTIFIER *, SID_TYPE *);
static void ZRname_Hversion (int *);
static void ZR348 (int *);
static void ZRdirect_Habstract_Hdeclarator (SID_STRING *, SID_TYPE *);
static void ZRfield_Hdeclarator (SID_IDENTIFIER *, SID_TYPE *);
static void ZRvariable_Hcommand (void);
static void ZR349 (int *);
static void ZR350 (SID_TYPE *);
static void ZR351 (SID_STRING *);
static void ZRdefine_Hparam_Hclause (SID_STRING *);
static void ZRexp_Hcommand (int *);
static void ZR352 (SID_STRING *);
static void ZRif_Hcommand (SID_COMMAND *, SID_STRING *);
static void ZR353 (SID_STRING *);
static void ZR354 (SID_STRING *);
static void ZRbitfield_Hoperator (SID_TYPE *);
static void ZRuse_Hsubset_Hname (SID_STRING *);
extern void read_spec (SID_COMMAND *);
static void ZRmacro_Hdeclarator (SID_IDENTIFIER *, SID_TYPE *);
static void ZRsubset_Hname (SID_STRING *);
static void ZRbuiltin_Htype (unsigned *);
static void ZRobject_Hqualifier (int *);
static void ZRfield_Hlist (SID_TYPE, SID_COMMAND *);
static void ZRptr_Hoperator (SID_TYPE *);
static void ZRtype_Hkeyword (unsigned *);

/* BEGINNING OF STATIC VARIABLES */


/* BEGINNING OF FUNCTION DEFINITIONS */

static void
ZRsimple_Htype (SID_TYPE *ZOt)
{
    SID_TYPE ZIt;

    switch (CURRENT_TERMINAL) {
      case lex_char: case lex_double: case lex_float:
      case lex_int: case lex_long: case lex_short:
      case lex_signed: case lex_unsigned: case lex_void:
	{
	    unsigned ZIb;

	    ZRbuiltin_Htype (&ZIb);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    /* BEGINNING OF ACTION: type_builtin */
	    {
#line 361 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIt) = basic_type ((ZIb));
#line 250 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: type_builtin */
	}
	break;
      case lex_name: case lex_enum: case lex_struct:
      case lex_union:
	{
	    int ZItag;
	    SID_STRING ZInm;

	    ZRtype_Hkey (&ZItag);
	    switch (CURRENT_TERMINAL) {
	      case lex_name:
		/* BEGINNING OF EXTRACT: name */
		{
#line 238 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 ZInm = token_value; 
#line 268 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
		}
		/* END OF EXTRACT: name */
		break;
	      case 75:
		RESTORE_LEXER;
		goto ZL1;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: type_name */
	    {
#line 365 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIt) = find_type ((ZInm), any_version, (ZItag), 1);
#line 284 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: type_name */
	}
	break;
      case 75:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOt = ZIt;
}

static void
ZRparameter_Hdeclaration (SID_TYPE *ZOt)
{
    SID_TYPE ZIt;

    if ((CURRENT_TERMINAL) == 75) {
	return;
    }
    {
	SID_TYPE ZIs;
	SID_STRING ZInm;
	SID_TYPE ZIp;

	ZRqualified_Htype (&ZIs);
	ZRabstract_Hdeclarator (&ZInm, &ZIp);
	if ((CURRENT_TERMINAL) == 75) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	/* BEGINNING OF ACTION: type_inject */
	{
#line 373 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIt) = inject_type ((ZIp), (ZIs));
#line 326 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	}
	/* END OF ACTION: type_inject */
	/* BEGINNING OF ACTION: param_name */
	{
#line 437 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    UNUSED ((ZInm));
#line 334 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	}
	/* END OF ACTION: param_name */
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOt = ZIt;
}

static void
ZRnat_Hdeclarator_Hlist (SID_COMMAND *ZOc)
{
    SID_COMMAND ZIc;

    if ((CURRENT_TERMINAL) == 75) {
	return;
    }
    {
	SID_IDENTIFIER ZIid;
	SID_COMMAND ZIa;
	SID_COMMAND ZIb;

	ZRidentifier (&ZIid);
	if ((CURRENT_TERMINAL) == 75) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	/* BEGINNING OF ACTION: declare_nat */
	{
#line 731 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    object *p = make_exp ((ZIid).iname, (ZIid).ivers, OBJ_NAT);
    (ZIa) = make_token ((ZIid).ename, (ZIid).evers, p, OBJ_NAT);
#line 370 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	}
	/* END OF ACTION: declare_nat */
	/* BEGINNING OF INLINE: 251 */
	{
	    switch (CURRENT_TERMINAL) {
	      case lex_comma:
		{
		    ADVANCE_LEXER;
		    ZRnat_Hdeclarator_Hlist (&ZIb);
		    if ((CURRENT_TERMINAL) == 75) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		}
		break;
	      default:
		{
		    /* BEGINNING OF ACTION: command_none */
		    {
#line 598 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIb) = null;
#line 393 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
		    }
		    /* END OF ACTION: command_none */
		}
		break;
	    }
	}
	/* END OF INLINE: 251 */
	/* BEGINNING OF ACTION: command_join */
	{
#line 602 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIc) = join_object ((ZIa), (ZIb));
#line 406 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	}
	/* END OF ACTION: command_join */
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOc = ZIc;
}

static void
ZRtype_Hdeclarator_Hlist (SID_COMMAND *ZOc)
{
    SID_COMMAND ZIc;

    if ((CURRENT_TERMINAL) == 75) {
	return;
    }
    {
	int ZItag;
	SID_IDENTIFIER ZIid;
	SID_COMMAND ZIa;
	SID_COMMAND ZIb;

	ZRtype_Hcommand (&ZItag);
	ZRidentifier (&ZIid);
	if ((CURRENT_TERMINAL) == 75) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	/* BEGINNING OF ACTION: declare_type */
	{
#line 766 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    type *t = make_type ((ZIid).iname, (ZIid).ivers, (ZItag));
    (ZIa) = make_token ((ZIid).ename, (ZIid).evers, t->u.obj, OBJ_TYPE);
#line 444 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	}
	/* END OF ACTION: declare_type */
	/* BEGINNING OF INLINE: 263 */
	{
	    switch (CURRENT_TERMINAL) {
	      case lex_comma:
		{
		    ADVANCE_LEXER;
		    ZRtype_Hdeclarator_Hlist (&ZIb);
		    if ((CURRENT_TERMINAL) == 75) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		}
		break;
	      default:
		{
		    /* BEGINNING OF ACTION: command_none */
		    {
#line 598 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIb) = null;
#line 467 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
		    }
		    /* END OF ACTION: command_none */
		}
		break;
	    }
	}
	/* END OF INLINE: 263 */
	/* BEGINNING OF ACTION: command_join */
	{
#line 602 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIc) = join_object ((ZIa), (ZIb));
#line 480 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	}
	/* END OF ACTION: command_join */
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOc = ZIc;
}

static void
ZRfunction_Hoperator (SID_TYPE *ZOt)
{
    SID_TYPE ZIt;

    if ((CURRENT_TERMINAL) == 75) {
	return;
    }
    {
	switch (CURRENT_TERMINAL) {
	  case lex_open_Hround:
	    break;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
	ZR335 (&ZIt);
	if ((CURRENT_TERMINAL) == 75) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOt = ZIt;
}

static void
ZRexp_Hdeclarator_Hlist (int ZIcmd, SID_TYPE ZIs, int ZIlv, SID_COMMAND *ZOc)
{
    SID_COMMAND ZIc;

    if ((CURRENT_TERMINAL) == 75) {
	return;
    }
    {
	SID_IDENTIFIER ZIid;
	SID_TYPE ZIp;
	SID_TYPE ZIu;
	SID_TYPE ZIt;
	SID_COMMAND ZIa;
	SID_COMMAND ZIb;

	ZRdeclarator (&ZIid, &ZIp);
	if ((CURRENT_TERMINAL) == 75) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	/* BEGINNING OF ACTION: type_inject */
	{
#line 373 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIu) = inject_type ((ZIp), (ZIs));
#line 548 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	}
	/* END OF ACTION: type_inject */
	/* BEGINNING OF ACTION: type_lvalue */
	{
#line 407 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIt) = make_subtype ((ZIu), (ZIlv));
#line 556 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	}
	/* END OF ACTION: type_lvalue */
	/* BEGINNING OF ACTION: declare_exp */
	{
#line 704 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    object *p = make_exp ((ZIid).iname, (ZIid).ivers, (ZIcmd));
    p->u.u_type = check_type ((ZIt), (ZIcmd));
    (ZIa) = make_token ((ZIid).ename, (ZIid).evers, p, (ZIcmd));
#line 566 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	}
	/* END OF ACTION: declare_exp */
	/* BEGINNING OF INLINE: 229 */
	{
	    switch (CURRENT_TERMINAL) {
	      case lex_comma:
		{
		    ADVANCE_LEXER;
		    ZRexp_Hdeclarator_Hlist (ZIcmd, ZIs, ZIlv, &ZIb);
		    if ((CURRENT_TERMINAL) == 75) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		}
		break;
	      default:
		{
		    /* BEGINNING OF ACTION: command_none */
		    {
#line 598 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIb) = null;
#line 589 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
		    }
		    /* END OF ACTION: command_none */
		}
		break;
	    }
	}
	/* END OF INLINE: 229 */
	/* BEGINNING OF ACTION: command_join */
	{
#line 602 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIc) = join_object ((ZIa), (ZIb));
#line 602 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	}
	/* END OF ACTION: command_join */
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOc = ZIc;
}

static void
ZRsubset_Hkey (SID_STRING *ZOkey)
{
    SID_STRING ZIkey;

    switch (CURRENT_TERMINAL) {
      case lex_open_Hround:
	{
	    ADVANCE_LEXER;
	    ZR351 (&ZIkey);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      default:
	{
	    /* BEGINNING OF ACTION: subset_both */
	    {
#line 559 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZIkey) = "11"; 
#line 636 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: subset_both */
	}
	break;
      case 75:
	return;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOkey = ZIkey;
}

static void
ZRmacro_Hparam_Hdeclaration (SID_TYPE *ZOt)
{
    SID_TYPE ZIt;

    if ((CURRENT_TERMINAL) == 75) {
	return;
    }
    {
	int ZIlv;
	SID_TYPE ZIs;
	SID_STRING ZInm;
	SID_TYPE ZIp;
	SID_TYPE ZIu;

	ZRobject_Hqualifier (&ZIlv);
	ZRqualified_Htype (&ZIs);
	ZRabstract_Hdeclarator (&ZInm, &ZIp);
	if ((CURRENT_TERMINAL) == 75) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	/* BEGINNING OF ACTION: type_inject */
	{
#line 373 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIu) = inject_type ((ZIp), (ZIs));
#line 679 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	}
	/* END OF ACTION: type_inject */
	/* BEGINNING OF ACTION: type_lvalue */
	{
#line 407 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIt) = make_subtype ((ZIu), (ZIlv));
#line 687 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	}
	/* END OF ACTION: type_lvalue */
	/* BEGINNING OF ACTION: param_name */
	{
#line 437 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    UNUSED ((ZInm));
#line 695 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	}
	/* END OF ACTION: param_name */
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOt = ZIt;
}

static void
ZRifdef_Hmacro_Hname (SID_STRING *ZOc)
{
    SID_STRING ZIc;

    switch (CURRENT_TERMINAL) {
      case lex_building:
	{
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: cond_building */
	    {
#line 478 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIc) = BUILDING_MACRO;
#line 721 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: cond_building */
	}
	break;
      case lex_name:
	{
	    /* BEGINNING OF EXTRACT: name */
	    {
#line 238 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 ZIc = token_value; 
#line 732 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF EXTRACT: name */
	    ADVANCE_LEXER;
	}
	break;
      case lex_protect:
	{
	    SID_STRING ZIa;
	    SID_STRING ZIb;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_open_Hround:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_string:
		/* BEGINNING OF EXTRACT: string */
		{
#line 240 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 ZIa = token_value; 
#line 757 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
		}
		/* END OF EXTRACT: string */
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_comma:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_string:
		/* BEGINNING OF EXTRACT: string */
		{
#line 240 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 ZIb = token_value; 
#line 778 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
		}
		/* END OF EXTRACT: string */
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: cond_protect */
	    {
#line 482 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIc) = macro_name (PROTECT_PREFIX, (ZIa), (ZIb), NULL);
#line 798 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: cond_protect */
	}
	break;
      case 75:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOc = ZIc;
}

static void
ZRdefine_Hparam_Hlist (SID_STRING *ZOp)
{
    SID_STRING ZIp;

    if ((CURRENT_TERMINAL) == 75) {
	return;
    }
    {
	SID_STRING ZI326;

	switch (CURRENT_TERMINAL) {
	  case lex_name:
	    /* BEGINNING OF EXTRACT: name */
	    {
#line 238 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 ZI326 = token_value; 
#line 833 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF EXTRACT: name */
	    break;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
	ZR328 (&ZI326, &ZIp);
	if ((CURRENT_TERMINAL) == 75) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOp = ZIp;
}

static void
ZR287 (SID_TYPE *ZOt)
{
    SID_TYPE ZIt;

    switch (CURRENT_TERMINAL) {
      case lex_open_Hround:
	{
	    ZRmacro_Hoperator (&ZIt);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      default:
	{
	    /* BEGINNING OF ACTION: type_none */
	    {
#line 357 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIt) = null;
#line 877 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: type_none */
	}
	break;
      case 75:
	return;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOt = ZIt;
}

static void
ZRdeclarator (SID_IDENTIFIER *ZOid, SID_TYPE *ZOt)
{
    SID_IDENTIFIER ZIid;
    SID_TYPE ZIt;

    switch (CURRENT_TERMINAL) {
      case lex_name: case lex_open_Hround:
	{
	    ZRdirect_Hdeclarator (&ZIid, &ZIt);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case lex_star:
	{
	    SID_TYPE ZIp;
	    SID_TYPE ZIs;

	    ZRptr_Hoperator (&ZIp);
	    ZRdeclarator (&ZIid, &ZIs);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    /* BEGINNING OF ACTION: type_inject */
	    {
#line 373 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIt) = inject_type ((ZIs), (ZIp));
#line 925 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: type_inject */
	}
	break;
      case 75:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOid = ZIid;
    *ZOt = ZIt;
}

static void
ZRidentifier (SID_IDENTIFIER *ZOid)
{
    SID_IDENTIFIER ZIid;

    if ((CURRENT_TERMINAL) == 75) {
	return;
    }
    {
	SID_STRING ZInm;
	int ZIv;

	ZRinternal_Hname (&ZInm, &ZIv);
	ZR324 (&ZInm, &ZIv, &ZIid);
	if ((CURRENT_TERMINAL) == 75) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOid = ZIid;
}

static void
ZRsubset_Hcommand (SID_COMMAND *ZOc)
{
    SID_COMMAND ZIc;

    if ((CURRENT_TERMINAL) == 75) {
	return;
    }
    {
	SID_STRING ZIs;
	SID_COMMAND ZIa;
	SID_COMMAND ZIb;

	switch (CURRENT_TERMINAL) {
	  case lex_set:
	    break;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
	ZRsubset_Hname (&ZIs);
	switch (CURRENT_TERMINAL) {
	  case lex_assign:
	    break;
	  case 75:
	    RESTORE_LEXER;
	    goto ZL1;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
	/* BEGINNING OF ACTION: begin_subset */
	{
#line 606 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    object *p = make_subset ((ZIs));
    info *i = p->u.u_info;
    if (i->subset) {
	char *nm = subset_name (i->api, i->file, NULL);
	object *q = search_hash (subsets, nm, no_version);
	update_time (p, q);
    }
    (ZIa) = crt_object;
    crt_object = p;
#line 1015 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	}
	/* END OF ACTION: begin_subset */
	switch (CURRENT_TERMINAL) {
	  case lex_open_Hbrace:
	    break;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
	ZRcommand_Hlist (&ZIb);
	switch (CURRENT_TERMINAL) {
	  case lex_close_Hbrace:
	    break;
	  case 75:
	    RESTORE_LEXER;
	    goto ZL1;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
	/* BEGINNING OF ACTION: end_subset */
	{
#line 618 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    object *p = crt_object;
    if (p) p->u.u_info->elements = (ZIb);
    (ZIc) = make_object (NULL, OBJ_SET);
    (ZIc)->u.u_obj = p;
    crt_object = (ZIa);
#line 1045 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	}
	/* END OF ACTION: end_subset */
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOc = ZIc;
}

static void
ZRqualified_Htype (SID_TYPE *ZOt)
{
    SID_TYPE ZIt;

    switch (CURRENT_TERMINAL) {
      case lex_name: case lex_char: case lex_double:
      case lex_enum: case lex_float: case lex_int:
      case lex_long: case lex_short: case lex_signed:
      case lex_struct: case lex_union: case lex_unsigned:
      case lex_void:
	{
	    SID_TYPE ZI331;

	    ZRsimple_Htype (&ZI331);
	    ZR333 (&ZI331, &ZIt);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case lex_const: case lex_restrict: case lex_volatile:
	{
	    unsigned ZIcv;
	    SID_TYPE ZIs;

	    ZRtype_Hqualifier (&ZIcv);
	    ZRsimple_Htype (&ZIs);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    /* BEGINNING OF ACTION: type_qualify */
	    {
#line 402 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIt) = make_subtype ((ZIs), TYPE_QUALIFIER);
    (ZIt)->v.str = cv_qualifier [(ZIcv)];
#line 1096 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: type_qualify */
	}
	break;
      case 75:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOt = ZIt;
}

static void
ZRabstract_Hdeclarator (SID_STRING *ZOnm, SID_TYPE *ZOt)
{
    SID_STRING ZInm;
    SID_TYPE ZIt;

    switch (CURRENT_TERMINAL) {
      default:
	{
	    ZRdirect_Habstract_Hdeclarator (&ZInm, &ZIt);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case lex_star:
	{
	    SID_TYPE ZIp;
	    SID_TYPE ZIs;

	    ZRptr_Hoperator (&ZIp);
	    ZRabstract_Hdeclarator (&ZInm, &ZIs);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    /* BEGINNING OF ACTION: type_inject */
	    {
#line 373 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIt) = inject_type ((ZIs), (ZIp));
#line 1146 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: type_inject */
	}
	break;
      case 75:
	return;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOnm = ZInm;
    *ZOt = ZIt;
}

static void
ZRparameter_Hlist (SID_TYPE *ZOp)
{
    SID_TYPE ZIp;

    if ((CURRENT_TERMINAL) == 75) {
	return;
    }
    {
	SID_TYPE ZIt;
	SID_TYPE ZIq;

	ZRparameter_Hdeclaration (&ZIt);
	/* BEGINNING OF INLINE: 155 */
	{
	    switch (CURRENT_TERMINAL) {
	      case lex_comma:
		{
		    ADVANCE_LEXER;
		    ZR339 (&ZIq);
		    if ((CURRENT_TERMINAL) == 75) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		}
		break;
	      default:
		{
		    /* BEGINNING OF ACTION: type_list_none */
		    {
#line 418 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIq) = null;
#line 1196 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
		    }
		    /* END OF ACTION: type_list_none */
		}
		break;
	      case 75:
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	/* END OF INLINE: 155 */
	/* BEGINNING OF ACTION: type_list_cons */
	{
#line 427 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIp) = make_subtype ((ZIt), TYPE_LIST);
    (ZIp)->v.next = (ZIq);
#line 1213 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	}
	/* END OF ACTION: type_list_cons */
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOp = ZIp;
}

static void
ZRinternal_Hname (SID_STRING *ZOnm, int *ZOv)
{
    SID_STRING ZInm;
    int ZIv;

    if ((CURRENT_TERMINAL) == 75) {
	return;
    }
    {
	SID_STRING ZIa;

	switch (CURRENT_TERMINAL) {
	  case lex_name:
	    /* BEGINNING OF EXTRACT: name */
	    {
#line 238 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 ZIa = token_value; 
#line 1243 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF EXTRACT: name */
	    break;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
	ZRname_Hversion (&ZIv);
	if ((CURRENT_TERMINAL) == 75) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	/* BEGINNING OF ACTION: field_name */
	{
#line 511 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    if (crt_field_name) {
	(ZInm) = string_printf ("%s.%s", crt_field_name, (ZIa));
    } else {
	(ZInm) = (ZIa);
    }
#line 1265 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	}
	/* END OF ACTION: field_name */
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOnm = ZInm;
    *ZOv = ZIv;
}

static void
ZR308 (SID_STRING ZI304, SID_TYPE ZI305, SID_STRING *ZO306, SID_TYPE *ZO307)
{
    SID_STRING ZI306;
    SID_TYPE ZI307;

  ZL2_308:;
    switch (CURRENT_TERMINAL) {
      case lex_open_Hsquare:
	{
	    SID_STRING ZInm;
	    SID_TYPE ZIs;
	    SID_TYPE ZIt;

	    ZInm = ZI304;
	    ZRarray_Hoperator (&ZIs);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    /* BEGINNING OF ACTION: type_inject */
	    {
#line 373 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIt) = inject_type ((ZI305), (ZIs));
#line 1303 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: type_inject */
	    /* BEGINNING OF INLINE: 308 */
	    ZI304 = ZInm;
	    ZI305 = ZIt;
	    goto ZL2_308;
	    /* END OF INLINE: 308 */
	}
	/*UNREACHED*/
      default:
	{
	    ZI306 = ZI304;
	    ZI307 = ZI305;
	}
	break;
      case 75:
	return;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZO306 = ZI306;
    *ZO307 = ZI307;
}

static void
ZRmacro_Hoperator (SID_TYPE *ZOt)
{
    SID_TYPE ZIt;

    if ((CURRENT_TERMINAL) == 75) {
	return;
    }
    {
	switch (CURRENT_TERMINAL) {
	  case lex_open_Hround:
	    break;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
	ZR350 (&ZIt);
	if ((CURRENT_TERMINAL) == 75) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOt = ZIt;
}

static void
ZRenumerator_Hlist (SID_COMMAND *ZOc)
{
    SID_COMMAND ZIc;

    if ((CURRENT_TERMINAL) == 75) {
	return;
    }
    {
	SID_COMMAND ZIa;
	SID_COMMAND ZIb;

	ZRenumerator (&ZIa);
	/* BEGINNING OF INLINE: 222 */
	{
	    switch (CURRENT_TERMINAL) {
	      case lex_comma:
		{
		    ADVANCE_LEXER;
		    ZRenumerator_Hlist (&ZIb);
		    if ((CURRENT_TERMINAL) == 75) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		}
		break;
	      default:
		{
		    /* BEGINNING OF ACTION: command_none */
		    {
#line 598 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIb) = null;
#line 1394 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
		    }
		    /* END OF ACTION: command_none */
		}
		break;
	      case 75:
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	/* END OF INLINE: 222 */
	/* BEGINNING OF ACTION: command_join */
	{
#line 602 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIc) = join_object ((ZIa), (ZIb));
#line 1410 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	}
	/* END OF ACTION: command_join */
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOc = ZIc;
}

static void
ZRexternal_Hname (SID_STRING *ZOnm, int *ZOv)
{
    SID_STRING ZInm;
    int ZIv;

    switch (CURRENT_TERMINAL) {
      case lex_name:
	{
	    SID_STRING ZIa;
	    SID_STRING ZIb;

	    /* BEGINNING OF EXTRACT: name */
	    {
#line 238 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 ZIa = token_value; 
#line 1438 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF EXTRACT: name */
	    ADVANCE_LEXER;
	    ZRname_Hversion (&ZIv);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    /* BEGINNING OF ACTION: field_name */
	    {
#line 511 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    if (crt_field_name) {
	(ZIb) = string_printf ("%s.%s", crt_field_name, (ZIa));
    } else {
	(ZIb) = (ZIa);
    }
#line 1456 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: field_name */
	    /* BEGINNING OF ACTION: token_name */
	    {
#line 519 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZInm) = token_name ((ZIb));
#line 1464 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: token_name */
	}
	break;
      case lex_string:
	{
	    /* BEGINNING OF EXTRACT: string */
	    {
#line 240 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 ZInm = token_value; 
#line 1475 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF EXTRACT: string */
	    ADVANCE_LEXER;
	    ZRname_Hversion (&ZIv);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case 75:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOnm = ZInm;
    *ZOv = ZIv;
}

static void
ZRtype_Hqualifier (unsigned *ZOcv)
{
    unsigned ZIcv;

    switch (CURRENT_TERMINAL) {
      case lex_const:
	{
	    unsigned ZIa;

	    ADVANCE_LEXER;
	    ZRtype_Hqualifier_Hopt (&ZIa);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    /* BEGINNING OF ACTION: cv_const */
	    {
#line 336 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    if ((ZIa) & 1) MSG_duplicate_type_qualifier ();
    (ZIcv) = ((ZIa) | 1);
#line 1522 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: cv_const */
	}
	break;
      case lex_restrict:
	{
	    unsigned ZIa;

	    ADVANCE_LEXER;
	    ZRtype_Hqualifier_Hopt (&ZIa);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    /* BEGINNING OF ACTION: cv_restrict */
	    {
#line 341 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    if ((ZIa) & 2) MSG_duplicate_type_qualifier ();
    (ZIcv) = ((ZIa) | 2);
#line 1543 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: cv_restrict */
	}
	break;
      case lex_volatile:
	{
	    unsigned ZIa;

	    ADVANCE_LEXER;
	    ZRtype_Hqualifier_Hopt (&ZIa);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    /* BEGINNING OF ACTION: cv_volatile */
	    {
#line 346 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    if ((ZIa) & 4) MSG_duplicate_type_qualifier ();
    (ZIcv) = ((ZIa) | 4);
#line 1564 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: cv_volatile */
	}
	break;
      case 75:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOcv = ZIcv;
}

static void
ZRtype_Hkey (int *ZOtag)
{
    int ZItag;

    switch (CURRENT_TERMINAL) {
      case lex_enum:
	{
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: key_enum_tag */
	    {
#line 298 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZItag) = TYPE_ENUM_TAG; 
#line 1595 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: key_enum_tag */
	}
	break;
      case lex_struct:
	{
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: key_struct_tag */
	    {
#line 296 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZItag) = TYPE_STRUCT_TAG; 
#line 1607 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: key_struct_tag */
	}
	break;
      case lex_union:
	{
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: key_union_tag */
	    {
#line 297 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZItag) = TYPE_UNION_TAG; 
#line 1619 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: key_union_tag */
	}
	break;
      default:
	{
	    /* BEGINNING OF ACTION: key_type */
	    {
#line 295 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZItag) = TYPE_GENERIC; 
#line 1630 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: key_type */
	}
	break;
      case 75:
	return;
    }
    *ZOtag = ZItag;
}

static void
ZRtype_Hqualifier_Hopt (unsigned *ZOcv)
{
    unsigned ZIcv;

    switch (CURRENT_TERMINAL) {
      case lex_const: case lex_restrict: case lex_volatile:
	{
	    ZRtype_Hqualifier (&ZIcv);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      default:
	{
	    /* BEGINNING OF ACTION: cv_none */
	    {
#line 332 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIcv) = 0;
#line 1663 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: cv_none */
	}
	break;
      case 75:
	return;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOcv = ZIcv;
}

static void
ZRconstant_Hvalue (SID_STRING *ZOs)
{
    SID_STRING ZIs;

    switch (CURRENT_TERMINAL) {
      case lex_exclaim:
	{
	    SID_STRING ZIa;

	    ADVANCE_LEXER;
	    ZRconstant_Hvalue (&ZIa);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    /* BEGINNING OF ACTION: value_not */
	    {
#line 456 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIs) = string_concat ("!", (ZIa));
#line 1700 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: value_not */
	}
	break;
      case lex_insert:
	{
	    /* BEGINNING OF EXTRACT: insert */
	    {
#line 243 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 ZIs = token_value; 
#line 1711 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF EXTRACT: insert */
	    ADVANCE_LEXER;
	}
	break;
      case lex_minus:
	{
	    SID_STRING ZIa;

	    ADVANCE_LEXER;
	    ZRconstant_Hvalue (&ZIa);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    /* BEGINNING OF ACTION: value_negate */
	    {
#line 452 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIs) = string_concat ("-", (ZIa));
#line 1732 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: value_negate */
	}
	break;
      case lex_name:
	{
	    SID_STRING ZIa;

	    /* BEGINNING OF EXTRACT: name */
	    {
#line 238 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 ZIa = token_value; 
#line 1745 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF EXTRACT: name */
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: value_nat */
	    {
#line 460 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    object *p = search_hash (exps, (ZIa), any_version);
    if (p == null) {
	MSG_undefined_nat ((ZIa));
    } else if (p->objtype != OBJ_NAT) {
	MSG_not_a_nat ((ZIa));
    }
    (ZIs) = (ZIa);
#line 1760 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: value_nat */
	}
	break;
      case lex_number:
	{
	    /* BEGINNING OF EXTRACT: number */
	    {
#line 239 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 ZIs = token_value; 
#line 1771 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF EXTRACT: number */
	    ADVANCE_LEXER;
	}
	break;
      case 75:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOs = ZIs;
}

static void
ZR318 (SID_IDENTIFIER ZI312, SID_TYPE ZI313, SID_IDENTIFIER *ZO316, SID_TYPE *ZO317)
{
    SID_IDENTIFIER ZI316;
    SID_TYPE ZI317;

  ZL2_318:;
    switch (CURRENT_TERMINAL) {
      case lex_open_Hround: case lex_open_Hsquare:
	{
	    SID_IDENTIFIER ZIid;

	    ZIid = ZI312;
	    /* BEGINNING OF INLINE: 334 */
	    {
		switch (CURRENT_TERMINAL) {
		  case lex_open_Hsquare:
		    {
			SID_TYPE ZIs;
			SID_TYPE ZIt;

			ZRarray_Hoperator (&ZIs);
			if ((CURRENT_TERMINAL) == 75) {
			    RESTORE_LEXER;
			    goto ZL1;
			}
			/* BEGINNING OF ACTION: type_inject */
			{
#line 373 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIt) = inject_type ((ZI313), (ZIs));
#line 1821 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
			}
			/* END OF ACTION: type_inject */
			/* BEGINNING OF INLINE: 318 */
			ZI312 = ZIid;
			ZI313 = ZIt;
			goto ZL2_318;
			/* END OF INLINE: 318 */
		    }
		    /*UNREACHED*/
		  case lex_open_Hround:
		    {
			SID_TYPE ZIs;
			SID_TYPE ZIt;

			ZRfunction_Hoperator (&ZIs);
			if ((CURRENT_TERMINAL) == 75) {
			    RESTORE_LEXER;
			    goto ZL1;
			}
			/* BEGINNING OF ACTION: type_inject */
			{
#line 373 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIt) = inject_type ((ZI313), (ZIs));
#line 1846 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
			}
			/* END OF ACTION: type_inject */
			/* BEGINNING OF INLINE: 318 */
			ZI312 = ZIid;
			ZI313 = ZIt;
			goto ZL2_318;
			/* END OF INLINE: 318 */
		    }
		    /*UNREACHED*/
		  default:
		    goto ZL1;
		}
	    }
	    /* END OF INLINE: 334 */
	}
	/*UNREACHED*/
      default:
	{
	    ZI316 = ZI312;
	    ZI317 = ZI313;
	}
	break;
      case 75:
	return;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZO316 = ZI316;
    *ZO317 = ZI317;
}

static void
ZRspec_Hcommand (SID_COMMAND *ZOc)
{
    SID_COMMAND ZIc;

    switch (CURRENT_TERMINAL) {
      case lex_base_Hapi:
	{
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: declare_base */
	    {
#line 660 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIc) = null;
#line 1895 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: declare_base */
	}
	break;
      case lex_define:
	{
	    SID_IDENTIFIER ZIid;
	    SID_STRING ZIp;
	    SID_STRING ZIs;

	    ADVANCE_LEXER;
	    ZRidentifier (&ZIid);
	    ZRdefine_Hparam_Hclause (&ZIp);
	    ZRconstant_Hvalue (&ZIs);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    /* BEGINNING OF ACTION: declare_define */
	    {
#line 676 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    char *def;
    object *p = make_exp ((ZIid).iname, (ZIid).ivers, OBJ_DEFINE);
    if ((ZIp)) {
	if (*(ZIp)) {
	    def = string_printf ("(%s) %s", (ZIp), (ZIs));
	} else {
	    def = string_printf ("() %s", (ZIs));
	}
    } else {
	def = string_printf (" %s", (ZIs));
    }
    p->u.u_str = def;
    (ZIc) = make_token ((ZIid).ename, (ZIid).evers, p, OBJ_EXTERN);
#line 1931 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: declare_define */
	}
	break;
      case lex_enumerate:
	{
	    int ZItag;
	    SID_IDENTIFIER ZIid;
	    SID_COMMAND ZIe;

	    ADVANCE_LEXER;
	    ZRenum_Hcommand (&ZItag);
	    ZRidentifier (&ZIid);
	    switch (CURRENT_TERMINAL) {
	      case lex_assign:
		break;
	      case 75:
		RESTORE_LEXER;
		goto ZL1;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_open_Hbrace:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    ZRenumerator_Hlist (&ZIe);
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hbrace:
		break;
	      case 75:
		RESTORE_LEXER;
		goto ZL1;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: declare_enum */
	    {
#line 692 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    type *t = make_type ((ZIid).iname, (ZIid).ivers, (ZItag));
    t->v.obj2 = (ZIe);
    (ZIc) = make_token ((ZIid).ename, (ZIid).evers, t->u.obj, OBJ_TYPE);
#line 1980 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: declare_enum */
	}
	break;
      case lex_field:
	{
	    int ZItag;
	    SID_IDENTIFIER ZIid;
	    int ZIe;
	    SID_TYPE ZIt;
	    SID_COMMAND ZIa;
	    SID_COMMAND ZIb;

	    ADVANCE_LEXER;
	    ZRtype_Hcommand (&ZItag);
	    ZRidentifier (&ZIid);
	    ZRfield_Hexact (&ZIe);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    /* BEGINNING OF ACTION: begin_field */
	    {
#line 784 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIt) = find_type ((ZIid).iname, any_version, (ZItag), 0);
    if ((ZIt) == null) {
	(ZIt) = make_type ((ZIid).iname, (ZIid).ivers, (ZItag));
	(ZIa) = make_token ((ZIid).ename, (ZIid).evers, (ZIt)->u.obj, OBJ_TYPE);
    } else {
	(ZIa) = null;
    }
    (ZIt) = expand_type ((ZIt));
    switch ((ZIt)->id) {
	case TYPE_STRUCT :
	case TYPE_UNION :
	case TYPE_STRUCT_TAG :
	case TYPE_UNION_TAG : {
	    break;
	}
	default : {
	    MSG_illegal_field_type ((ZIid).iname);
	    break;
	}
    }
    crt_field_name = (ZIt)->u.obj->name;
#line 2027 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: begin_field */
	    switch (CURRENT_TERMINAL) {
	      case lex_open_Hbrace:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    ZRfield_Hlist (ZIt, &ZIb);
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hbrace:
		break;
	      case 75:
		RESTORE_LEXER;
		goto ZL1;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: end_field */
	    {
#line 808 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    if ((ZIe)) {
	if ((ZIt)->v.obj2) {
	    char *nm = crt_field_name;
	    MSG_redefinition_of_type (nm);
	}
	if ((ZIb) == null) {
	    MSG_empty_struct_union_definition ();
	} else {
	    (ZIt)->v.obj2 = (ZIb);
	}
	if ((ZIa) == null) {
	    /* This is a hack, do properly later */
	    (ZIc) = make_object (NULL, OBJ_TYPE);
	    (ZIc)->u.u_type = (ZIt);
	    if (streq ((ZIc)->filename, (ZIt)->u.obj->filename)) {
		(ZIt)->state = 1;
	    } else {
		(ZIt)->state = 3;
	    }
	} else {
	    (ZIc) = (ZIa);
	}
    } else {
	(ZIc) = join_object ((ZIa), (ZIb));
    }
    crt_field_name = null;
#line 2078 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: end_field */
	}
	break;
      case lex_implement:
	{
	    int ZIcmd;
	    SID_STRING ZIs;
	    SID_STRING ZIkey;

	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: cmd_implement */
	    {
#line 588 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZIcmd) = OBJ_IMPLEMENT; 
#line 2094 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: cmd_implement */
	    ZRsubset_Hname (&ZIs);
	    ZRsubset_Hkey (&ZIkey);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    /* BEGINNING OF ACTION: include_subset */
	    {
#line 626 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    object *p = make_subset ((ZIs));
    update_time (crt_object, p);
    (ZIc) = make_object ((ZIkey), (ZIcmd));
    (ZIc)->u.u_obj = p;
#line 2111 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: include_subset */
	}
	break;
      case lex_macro:
	{
	    int ZIlv;
	    SID_TYPE ZIs;
	    SID_IDENTIFIER ZIid;
	    SID_TYPE ZIp;
	    SID_TYPE ZIu;
	    SID_TYPE ZIv;
	    SID_TYPE ZIq;
	    SID_TYPE ZIt;

	    ADVANCE_LEXER;
	    ZRobject_Hqualifier (&ZIlv);
	    ZRqualified_Htype (&ZIs);
	    ZRmacro_Hdeclarator (&ZIid, &ZIp);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    /* BEGINNING OF ACTION: type_inject */
	    {
#line 373 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIu) = inject_type ((ZIp), (ZIs));
#line 2140 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: type_inject */
	    /* BEGINNING OF ACTION: type_lvalue */
	    {
#line 407 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIv) = make_subtype ((ZIu), (ZIlv));
#line 2148 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: type_lvalue */
	    ZR287 (&ZIq);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    /* BEGINNING OF ACTION: type_inject */
	    {
#line 373 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIt) = inject_type ((ZIq), (ZIv));
#line 2161 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: type_inject */
	    /* BEGINNING OF ACTION: declare_macro */
	    {
#line 722 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    object *p;
    int cmd = OBJ_MACRO;
    if ((ZIt)->id != TYPE_PROC) cmd = OBJ_EXP;
    p = make_exp ((ZIid).iname, (ZIid).ivers, cmd);
    p->u.u_type = check_type ((ZIt), cmd);
    (ZIc) = make_token ((ZIid).ename, (ZIid).evers, p, cmd);
#line 2174 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: declare_macro */
	}
	break;
      case lex_nat:
	{
	    ADVANCE_LEXER;
	    ZRnat_Hdeclarator_Hlist (&ZIc);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case lex_statement:
	{
	    SID_IDENTIFIER ZIid;
	    SID_TYPE ZIt;

	    ADVANCE_LEXER;
	    ZRidentifier (&ZIid);
	    ZR287 (&ZIt);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    /* BEGINNING OF ACTION: declare_stmt */
	    {
#line 754 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    object *p = make_exp ((ZIid).iname, (ZIid).ivers, OBJ_STATEMENT);
    p->u.u_type = check_type ((ZIt), OBJ_STATEMENT);
    (ZIc) = make_token ((ZIid).ename, (ZIid).evers, p, OBJ_STATEMENT);
#line 2208 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: declare_stmt */
	}
	break;
      case lex_token:
	{
	    SID_IDENTIFIER ZIid;
	    SID_STRING ZIs;

	    ADVANCE_LEXER;
	    ZRidentifier (&ZIid);
	    switch (CURRENT_TERMINAL) {
	      case lex_insert:
		/* BEGINNING OF EXTRACT: insert */
		{
#line 243 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 ZIs = token_value; 
#line 2226 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
		}
		/* END OF EXTRACT: insert */
		break;
	      case 75:
		RESTORE_LEXER;
		goto ZL1;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: declare_token */
	    {
#line 760 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    object *p = make_exp ((ZIid).iname, (ZIid).ivers, OBJ_TOKEN);
    p->u.u_str = (ZIs);
    (ZIc) = make_token ((ZIid).ename, (ZIid).evers, p, OBJ_TOKEN);
#line 2244 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: declare_token */
	}
	break;
      case lex_type:
	{
	    ADVANCE_LEXER;
	    ZRtype_Hdeclarator_Hlist (&ZIc);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case lex_typedef:
	{
	    ADVANCE_LEXER;
	    ZR322 (&ZIc);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case lex_use:
	{
	    int ZIcmd;

	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: cmd_use */
	    {
#line 589 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZIcmd) = OBJ_USE; 
#line 2278 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: cmd_use */
	    ZR323 (&ZIcmd, &ZIc);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case lex_constant: case lex_exp:
	{
	    int ZIcmd;
	    int ZIlv1;
	    int ZIlv;
	    SID_TYPE ZIt;

	    ZRexp_Hcommand (&ZIcmd);
	    ZRobject_Hqualifier (&ZIlv1);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    /* BEGINNING OF ACTION: key_exp */
	    {
#line 311 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    if ((ZIcmd) == OBJ_CONST) {
	if ((ZIlv1) == TYPE_LVALUE) {
	    MSG_constant_cant_be_lvalue ();
	}
	(ZIlv) = TYPE_RVALUE;
    } else if ((ZIcmd) == OBJ_EXTERN) {
	(ZIlv) = TYPE_LVALUE;
    } else {
	(ZIlv) = (ZIlv1);
    }
#line 2315 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: key_exp */
	    ZRqualified_Htype (&ZIt);
	    ZRexp_Hdeclarator_Hlist (ZIcmd, ZIt, ZIlv, &ZIc);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case lex_func:
	{
	    int ZIcmd;
	    SID_TYPE ZIs;
	    SID_IDENTIFIER ZIid;
	    SID_TYPE ZIp;
	    SID_TYPE ZIt;

	    ZRfunc_Hcommand (&ZIcmd);
	    ZRqualified_Htype (&ZIs);
	    ZRdeclarator (&ZIid, &ZIp);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    /* BEGINNING OF ACTION: type_inject */
	    {
#line 373 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIt) = inject_type ((ZIp), (ZIs));
#line 2346 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: type_inject */
	    /* BEGINNING OF ACTION: declare_func */
	    {
#line 716 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    object *p = make_exp ((ZIid).iname, (ZIid).ivers, (ZIcmd));
    p->u.u_type = check_type ((ZIt), OBJ_FUNC);
    (ZIc) = make_token ((ZIid).ename, (ZIid).evers, p, (ZIcmd));
#line 2356 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: declare_func */
	}
	break;
      case lex_set:
	{
	    ZRsubset_Hcommand (&ZIc);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case 75:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOc = ZIc;
}

static void
ZRfunc_Hcommand (int *ZOcmd)
{
    int ZIcmd;

    if ((CURRENT_TERMINAL) == 75) {
	return;
    }
    {
	switch (CURRENT_TERMINAL) {
	  case lex_func:
	    break;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
	ZR348 (&ZIcmd);
	if ((CURRENT_TERMINAL) == 75) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOcmd = ZIcmd;
}

static void
ZR320 (SID_STRING *ZIa, SID_STRING *ZOs)
{
    SID_STRING ZIs;

    switch (CURRENT_TERMINAL) {
      case lex_comma:
	{
	    SID_STRING ZIb;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_string:
		/* BEGINNING OF EXTRACT: string */
		{
#line 240 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 ZIb = token_value; 
#line 2430 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
		}
		/* END OF EXTRACT: string */
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    ZR321 (ZIa, &ZIb, &ZIs);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      default:
	{
	    /* BEGINNING OF ACTION: api_name */
	    {
#line 562 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIs) = subset_name ((*ZIa), NULL, NULL);
#line 2452 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: api_name */
	}
	break;
      case 75:
	return;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOs = ZIs;
}

static void
ZR321 (SID_STRING *ZIa, SID_STRING *ZIb, SID_STRING *ZOs)
{
    SID_STRING ZIs;

    switch (CURRENT_TERMINAL) {
      case lex_comma:
	{
	    SID_STRING ZIc;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_string:
		/* BEGINNING OF EXTRACT: string */
		{
#line 240 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 ZIc = token_value; 
#line 2485 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
		}
		/* END OF EXTRACT: string */
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: subset_name */
	    {
#line 570 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    if ((*ZIb) [0] == 0) (*ZIb) = null;
    (ZIs) = subset_name ((*ZIa), (*ZIb), (ZIc));
#line 2499 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: subset_name */
	}
	break;
      default:
	{
	    /* BEGINNING OF ACTION: file_name */
	    {
#line 566 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIs) = subset_name ((*ZIa), (*ZIb), NULL);
#line 2511 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: file_name */
	}
	break;
      case 75:
	return;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOs = ZIs;
}

static void
ZRarray_Hoperator (SID_TYPE *ZOt)
{
    SID_TYPE ZIt;

    if ((CURRENT_TERMINAL) == 75) {
	return;
    }
    {
	SID_STRING ZIa;

	switch (CURRENT_TERMINAL) {
	  case lex_open_Hsquare:
	    break;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
	/* BEGINNING OF INLINE: 141 */
	{
	    switch (CURRENT_TERMINAL) {
	      case lex_name: case lex_number: case lex_insert:
	      case lex_exclaim: case lex_minus:
		{
		    ZRconstant_Hvalue (&ZIa);
		    if ((CURRENT_TERMINAL) == 75) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		}
		break;
	      default:
		{
		    /* BEGINNING OF ACTION: value_none */
		    {
#line 448 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIa) = "";
#line 2565 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
		    }
		    /* END OF ACTION: value_none */
		}
		break;
	    }
	}
	/* END OF INLINE: 141 */
	switch (CURRENT_TERMINAL) {
	  case lex_close_Hsquare:
	    break;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
	/* BEGINNING OF ACTION: type_array */
	{
#line 382 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIt) = make_subtype ((type *) null, TYPE_ARRAY);
    (ZIt)->v.str = (ZIa);
#line 2586 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	}
	/* END OF ACTION: type_array */
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOt = ZIt;
}

static void
ZR322 (SID_COMMAND *ZOc)
{
    SID_COMMAND ZIc;

    switch (CURRENT_TERMINAL) {
      case lex_promote:
	{
	    SID_TYPE ZIt;
	    SID_IDENTIFIER ZIid;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_open_Hround:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    ZRqualified_Htype (&ZIt);
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      case 75:
		RESTORE_LEXER;
		goto ZL1;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    ZRidentifier (&ZIid);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    /* BEGINNING OF ACTION: declare_promote */
	    {
#line 736 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    type *t = make_type ((ZIid).iname, (ZIid).ivers, TYPE_PROMOTE);
    type *s = expand_type ((ZIt));
    switch (s->id) {
	case TYPE_INT :
	case TYPE_SIGNED :
	case TYPE_UNSIGNED : {
	    break;
	}
	default : {
	    MSG_non_integral_promotion_type ();
	    break;
	}
    }
    t->v.next = s;
    (ZIc) = make_token ((ZIid).ename, (ZIid).evers, t->u.obj, OBJ_EXTERN);
#line 2652 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: declare_promote */
	}
	break;
      case lex_special:
	{
	    SID_STRING ZIs;
	    SID_TYPE ZIt;
	    SID_IDENTIFIER ZIid;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_open_Hround:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_string:
		/* BEGINNING OF EXTRACT: string */
		{
#line 240 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 ZIs = token_value; 
#line 2677 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
		}
		/* END OF EXTRACT: string */
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: type_special */
	    {
#line 369 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIt) = special_type ((ZIs));
#line 2697 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: type_special */
	    ZRidentifier (&ZIid);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    /* BEGINNING OF ACTION: declare_typedef */
	    {
#line 771 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    type *t = make_type ((ZIid).iname, (ZIid).ivers, TYPE_DEFINED);
    t->v.next = check_type ((ZIt), OBJ_TYPE);
    (ZIc) = make_token ((ZIid).ename, (ZIid).evers, t->u.obj, OBJ_EXTERN);
#line 2712 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: declare_typedef */
	}
	break;
      case lex_name: case lex_char: case lex_const:
      case lex_double: case lex_enum: case lex_float:
      case lex_int: case lex_long: case lex_restrict:
      case lex_short: case lex_signed: case lex_struct:
      case lex_union: case lex_unsigned: case lex_void:
      case lex_volatile:
	{
	    SID_TYPE ZIs;
	    SID_IDENTIFIER ZIid;
	    SID_TYPE ZIp;
	    SID_TYPE ZIt;

	    ZRqualified_Htype (&ZIs);
	    ZRdeclarator (&ZIid, &ZIp);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    /* BEGINNING OF ACTION: type_inject */
	    {
#line 373 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIt) = inject_type ((ZIp), (ZIs));
#line 2740 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: type_inject */
	    /* BEGINNING OF ACTION: declare_typedef */
	    {
#line 771 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    type *t = make_type ((ZIid).iname, (ZIid).ivers, TYPE_DEFINED);
    t->v.next = check_type ((ZIt), OBJ_TYPE);
    (ZIc) = make_token ((ZIid).ename, (ZIid).evers, t->u.obj, OBJ_EXTERN);
#line 2750 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: declare_typedef */
	}
	break;
      case 75:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOc = ZIc;
}

static void
ZR323 (int *ZIcmd, SID_COMMAND *ZOc)
{
    SID_COMMAND ZIc;

    switch (CURRENT_TERMINAL) {
      case lex_string:
	{
	    SID_STRING ZIs;
	    SID_STRING ZIkey;

	    ZRsubset_Hname (&ZIs);
	    ZRsubset_Hkey (&ZIkey);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    /* BEGINNING OF ACTION: include_subset */
	    {
#line 626 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    object *p = make_subset ((ZIs));
    update_time (crt_object, p);
    (ZIc) = make_object ((ZIkey), (*ZIcmd));
    (ZIc)->u.u_obj = p;
#line 2793 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: include_subset */
	}
	break;
      case lex_open_Hround:
	{
	    SID_STRING ZIs;
	    SID_STRING ZIkey1;
	    SID_STRING ZIkey;

	    ZRuse_Hsubset_Hname (&ZIs);
	    ZRsubset_Hkey (&ZIkey1);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    /* BEGINNING OF ACTION: subset_next */
	    {
#line 560 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZIkey) = string_concat ((ZIkey1), "G"); 
#line 2814 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: subset_next */
	    /* BEGINNING OF ACTION: include_subset */
	    {
#line 626 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    object *p = make_subset ((ZIs));
    update_time (crt_object, p);
    (ZIc) = make_object ((ZIkey), (*ZIcmd));
    (ZIc)->u.u_obj = p;
#line 2825 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: include_subset */
	}
	break;
      case 75:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOc = ZIc;
}

static void
ZRmacro_Hparam_Hlist (SID_TYPE *ZOp)
{
    SID_TYPE ZIp;

    if ((CURRENT_TERMINAL) == 75) {
	return;
    }
    {
	SID_TYPE ZIt;
	SID_TYPE ZIq;

	ZRmacro_Hparam_Hdeclaration (&ZIt);
	/* BEGINNING OF INLINE: 163 */
	{
	    switch (CURRENT_TERMINAL) {
	      case lex_comma:
		{
		    ADVANCE_LEXER;
		    ZRmacro_Hparam_Hlist (&ZIq);
		    if ((CURRENT_TERMINAL) == 75) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		}
		break;
	      default:
		{
		    /* BEGINNING OF ACTION: type_list_none */
		    {
#line 418 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIq) = null;
#line 2876 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
		    }
		    /* END OF ACTION: type_list_none */
		}
		break;
	      case 75:
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	/* END OF INLINE: 163 */
	/* BEGINNING OF ACTION: type_list_cons */
	{
#line 427 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIp) = make_subtype ((ZIt), TYPE_LIST);
    (ZIp)->v.next = (ZIq);
#line 2893 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	}
	/* END OF ACTION: type_list_cons */
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOp = ZIp;
}

static void
ZR324 (SID_STRING *ZInm, int *ZIv, SID_IDENTIFIER *ZOid)
{
    SID_IDENTIFIER ZIid;

    switch (CURRENT_TERMINAL) {
      case lex_or:
	{
	    SID_STRING ZItnm;
	    int ZItv;

	    ADVANCE_LEXER;
	    ZRexternal_Hname (&ZItnm, &ZItv);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    /* BEGINNING OF ACTION: make_id */
	    {
#line 523 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIid).iname = (*ZInm);
    (ZIid).ivers = (*ZIv);
    (ZIid).ename = (ZItnm);
    (ZIid).evers = (ZItv);
#line 2930 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: make_id */
	}
	break;
      default:
	{
	    SID_STRING ZItnm;

	    /* BEGINNING OF ACTION: token_name */
	    {
#line 519 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZItnm) = token_name ((*ZInm));
#line 2944 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: token_name */
	    /* BEGINNING OF ACTION: make_id */
	    {
#line 523 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIid).iname = (*ZInm);
    (ZIid).ivers = (*ZIv);
    (ZIid).ename = (ZItnm);
    (ZIid).evers = (*ZIv);
#line 2955 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: make_id */
	}
	break;
      case 75:
	return;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOid = ZIid;
}

static void
ZR325 (SID_STRING *ZOp)
{
    SID_STRING ZIp;

    switch (CURRENT_TERMINAL) {
      case lex_close_Hround:
	{
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: param_empty */
	    {
#line 494 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZIp) = ""; 
#line 2984 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: param_empty */
	}
	break;
      case lex_name:
	{
	    ZRdefine_Hparam_Hlist (&ZIp);
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      case 75:
		RESTORE_LEXER;
		goto ZL1;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	}
	break;
      case 75:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOp = ZIp;
}

static void
ZR328 (SID_STRING *ZI326, SID_STRING *ZOp)
{
    SID_STRING ZIp;

    switch (CURRENT_TERMINAL) {
      case lex_comma:
	{
	    SID_STRING ZIq;

	    ADVANCE_LEXER;
	    ZRdefine_Hparam_Hlist (&ZIq);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    /* BEGINNING OF ACTION: param_join */
	    {
#line 496 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIp) = string_printf ("%s, %s", (*ZI326), (ZIq));
#line 3038 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: param_join */
	}
	break;
      default:
	{
	    ZIp = *ZI326;
	}
	break;
      case 75:
	return;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOp = ZIp;
}

static void
ZRenum_Hcommand (int *ZOtag)
{
    int ZItag;

    switch (CURRENT_TERMINAL) {
      case lex_enum:
	{
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: key_enum_tag */
	    {
#line 298 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZItag) = TYPE_ENUM_TAG; 
#line 3072 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: key_enum_tag */
	}
	break;
      default:
	{
	    /* BEGINNING OF ACTION: key_enum */
	    {
#line 301 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZItag) = TYPE_ENUM; 
#line 3083 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: key_enum */
	}
	break;
      case 75:
	return;
    }
    *ZOtag = ZItag;
}

static void
ZRenumerator (SID_COMMAND *ZOc)
{
    SID_COMMAND ZIc;

    if ((CURRENT_TERMINAL) == 75) {
	return;
    }
    {
	SID_IDENTIFIER ZIid;
	SID_STRING ZIs;

	ZRidentifier (&ZIid);
	/* BEGINNING OF INLINE: 220 */
	{
	    switch (CURRENT_TERMINAL) {
	      case lex_equal:
		{
		    ADVANCE_LEXER;
		    ZRconstant_Hvalue (&ZIs);
		    if ((CURRENT_TERMINAL) == 75) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		}
		break;
	      default:
		{
		    /* BEGINNING OF ACTION: value_none */
		    {
#line 448 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIs) = "";
#line 3127 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
		    }
		    /* END OF ACTION: value_none */
		}
		break;
	      case 75:
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	/* END OF INLINE: 220 */
	/* BEGINNING OF ACTION: declare_enumerator */
	{
#line 698 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    object *p = make_exp ((ZIid).iname, (ZIid).ivers, OBJ_ENUMVAL);
    p->u.u_str = (ZIs);
    (ZIc) = make_token ((ZIid).ename, (ZIid).evers, p, OBJ_EXTERN);
#line 3145 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	}
	/* END OF ACTION: declare_enumerator */
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOc = ZIc;
}

static void
ZR329 (int *ZOcmd)
{
    int ZIcmd;

    switch (CURRENT_TERMINAL) {
      case lex_open_Hround:
	{
	    ADVANCE_LEXER;
	    ZR330 (&ZIcmd);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      default:
	{
	    /* BEGINNING OF ACTION: cmd_exp */
	    {
#line 583 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZIcmd) = OBJ_EXP; 
#line 3179 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: cmd_exp */
	}
	break;
      case 75:
	return;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOcmd = ZIcmd;
}

static void
ZRfield_Hdeclarator_Hlist (SID_TYPE ZIm, SID_TYPE ZIs, SID_COMMAND *ZOc)
{
    SID_COMMAND ZIc;

    if ((CURRENT_TERMINAL) == 75) {
	return;
    }
    {
	SID_IDENTIFIER ZIid;
	SID_TYPE ZIp;
	SID_TYPE ZIt;
	SID_COMMAND ZIa;
	SID_COMMAND ZIb;

	ZRfield_Hdeclarator (&ZIid, &ZIp);
	if ((CURRENT_TERMINAL) == 75) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	/* BEGINNING OF ACTION: type_inject */
	{
#line 373 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIt) = inject_type ((ZIp), (ZIs));
#line 3220 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	}
	/* END OF ACTION: type_inject */
	/* BEGINNING OF ACTION: declare_field */
	{
#line 710 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    type *t = check_type ((ZIt), OBJ_FIELD);
    field *f = make_field ((ZIid).iname, (ZIid).ivers, (ZIm), t);
    (ZIa) = make_token ((ZIid).ename, (ZIid).evers, f->obj, OBJ_FIELD);
#line 3230 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	}
	/* END OF ACTION: declare_field */
	/* BEGINNING OF INLINE: 239 */
	{
	    switch (CURRENT_TERMINAL) {
	      case lex_comma:
		{
		    ADVANCE_LEXER;
		    ZRfield_Hdeclarator_Hlist (ZIm, ZIs, &ZIb);
		    if ((CURRENT_TERMINAL) == 75) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		}
		break;
	      default:
		{
		    /* BEGINNING OF ACTION: command_none */
		    {
#line 598 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIb) = null;
#line 3253 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
		    }
		    /* END OF ACTION: command_none */
		}
		break;
	    }
	}
	/* END OF INLINE: 239 */
	/* BEGINNING OF ACTION: command_join */
	{
#line 602 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIc) = join_object ((ZIa), (ZIb));
#line 3266 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	}
	/* END OF ACTION: command_join */
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOc = ZIc;
}

static void
ZR330 (int *ZOcmd)
{
    int ZIcmd;

    switch (CURRENT_TERMINAL) {
      case lex_const:
	{
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: cmd_constant */
	    {
#line 582 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZIcmd) = OBJ_CONST; 
#line 3298 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: cmd_constant */
	}
	break;
      case lex_extern:
	{
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: cmd_exp_extern */
	    {
#line 584 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZIcmd) = OBJ_EXTERN; 
#line 3317 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: cmd_exp_extern */
	}
	break;
      case 75:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOcmd = ZIcmd;
}

static void
ZRfield_Hexact (int *ZOe)
{
    int ZIe;

    switch (CURRENT_TERMINAL) {
      case lex_assign:
	{
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: bool_true */
	    {
#line 257 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZIe) = 1; 
#line 3348 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: bool_true */
	}
	break;
      default:
	{
	    /* BEGINNING OF ACTION: bool_false */
	    {
#line 256 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZIe) = 0; 
#line 3359 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: bool_false */
	}
	break;
      case 75:
	return;
    }
    *ZOe = ZIe;
}

static void
ZR333 (SID_TYPE *ZI331, SID_TYPE *ZOt)
{
    SID_TYPE ZIt;

    switch (CURRENT_TERMINAL) {
      case lex_const: case lex_restrict: case lex_volatile:
	{
	    unsigned ZIcv;

	    ZRtype_Hqualifier (&ZIcv);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    /* BEGINNING OF ACTION: type_qualify */
	    {
#line 402 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIt) = make_subtype ((*ZI331), TYPE_QUALIFIER);
    (ZIt)->v.str = cv_qualifier [(ZIcv)];
#line 3391 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: type_qualify */
	}
	break;
      default:
	{
	    ZIt = *ZI331;
	}
	break;
      case 75:
	return;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOt = ZIt;
}

static void
ZR335 (SID_TYPE *ZOt)
{
    SID_TYPE ZIt;

    switch (CURRENT_TERMINAL) {
      case lex_close_Hround:
	{
	    SID_TYPE ZIp;

	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: type_list_empty */
	    {
#line 422 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    MSG_empty_parameter_list ();
    (ZIp) = null;
#line 3429 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: type_list_empty */
	    /* BEGINNING OF ACTION: type_func */
	    {
#line 392 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIt) = make_subtype ((type *) null, TYPE_PROC);
    (ZIt)->v.next = (ZIp);
#line 3438 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: type_func */
	}
	break;
      case lex_name: case lex_char: case lex_const:
      case lex_double: case lex_enum: case lex_float:
      case lex_int: case lex_long: case lex_restrict:
      case lex_short: case lex_signed: case lex_struct:
      case lex_union: case lex_unsigned: case lex_void:
      case lex_volatile:
	{
	    SID_TYPE ZIp;

	    ZRparameter_Hlist (&ZIp);
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      case 75:
		RESTORE_LEXER;
		goto ZL1;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: type_func */
	    {
#line 392 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIt) = make_subtype ((type *) null, TYPE_PROC);
    (ZIt)->v.next = (ZIp);
#line 3469 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: type_func */
	}
	break;
      case 75:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOt = ZIt;
}

static void
ZRcommand_Hlist (SID_COMMAND *ZOc)
{
    SID_COMMAND ZIc;

  ZL2_command_Hlist:;
    switch (CURRENT_TERMINAL) {
      case lex_base_Hapi: case lex_constant: case lex_define:
      case lex_enumerate: case lex_exp: case lex_field:
      case lex_func: case lex_implement: case lex_macro:
      case lex_nat: case lex_set: case lex_statement:
      case lex_token: case lex_type: case lex_typedef:
      case lex_use:
	{
	    SID_COMMAND ZIa;
	    SID_COMMAND ZIb;

	    ZRspec_Hcommand (&ZIa);
	    switch (CURRENT_TERMINAL) {
	      case lex_semicolon:
		break;
	      case 75:
		RESTORE_LEXER;
		goto ZL1;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    ZRcommand_Hlist (&ZIb);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    /* BEGINNING OF ACTION: command_join */
	    {
#line 602 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIc) = join_object ((ZIa), (ZIb));
#line 3525 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: command_join */
	}
	break;
      case lex_comment: case lex_insert: case lex_build_Hinsert:
      case lex_if: case lex_ifdef: case lex_ifndef:
	{
	    SID_COMMAND ZIa;
	    SID_COMMAND ZIb;

	    ZRtext_Hcommand (&ZIa);
	    ZRcommand_Hlist (&ZIb);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    /* BEGINNING OF ACTION: command_join */
	    {
#line 602 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIc) = join_object ((ZIa), (ZIb));
#line 3547 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: command_join */
	}
	break;
      case lex_variable: case lex_info:
	{
	    ZRvariable_Hcommand ();
	    switch (CURRENT_TERMINAL) {
	      case lex_semicolon:
		break;
	      case 75:
		RESTORE_LEXER;
		goto ZL1;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    /* BEGINNING OF INLINE: command-list */
	    goto ZL2_command_Hlist;
	    /* END OF INLINE: command-list */
	}
	/*UNREACHED*/
      default:
	{
	    /* BEGINNING OF ACTION: command_none */
	    {
#line 598 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIc) = null;
#line 3577 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: command_none */
	}
	break;
      case 75:
	return;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOc = ZIc;
}

static void
ZR338 (SID_STRING *ZI336, SID_TYPE *ZI337, SID_STRING *ZO306, SID_TYPE *ZO307)
{
    SID_STRING ZI306;
    SID_TYPE ZI307;

    switch (CURRENT_TERMINAL) {
      case lex_open_Hround:
	{
	    SID_TYPE ZIs;
	    SID_TYPE ZIt;

	    ZRfunction_Hoperator (&ZIs);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    /* BEGINNING OF ACTION: type_inject */
	    {
#line 373 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIt) = inject_type ((*ZI337), (ZIs));
#line 3615 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: type_inject */
	    ZR308 (*ZI336, ZIt, &ZI306, &ZI307);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      default:
	{
	    ZR308 (*ZI336, *ZI337, &ZI306, &ZI307);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case 75:
	return;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZO306 = ZI306;
    *ZO307 = ZI307;
}

static void
ZR339 (SID_TYPE *ZOq)
{
    SID_TYPE ZIq;

    switch (CURRENT_TERMINAL) {
      case lex_ellipsis:
	{
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: type_list_ellipsis */
	    {
#line 432 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIq) = make_subtype (type_ellipsis, TYPE_LIST);
    (ZIq)->v.next = null;
#line 3661 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: type_list_ellipsis */
	}
	break;
      case lex_name: case lex_char: case lex_const:
      case lex_double: case lex_enum: case lex_float:
      case lex_int: case lex_long: case lex_restrict:
      case lex_short: case lex_signed: case lex_struct:
      case lex_union: case lex_unsigned: case lex_void:
      case lex_volatile:
	{
	    ZRparameter_Hlist (&ZIq);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case 75:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOq = ZIq;
}

static void
ZR340 (int *ZOtag)
{
    int ZItag;

    switch (CURRENT_TERMINAL) {
      case lex_arith:
	{
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: key_arith */
	    {
#line 306 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZItag) = TYPE_ARITH; 
#line 3713 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: key_arith */
	}
	break;
      case lex_float:
	{
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: key_float */
	    {
#line 305 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZItag) = TYPE_FLOAT; 
#line 3732 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: key_float */
	}
	break;
      case lex_int:
	{
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: key_int */
	    {
#line 302 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZItag) = TYPE_INT; 
#line 3751 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: key_int */
	}
	break;
      case lex_scalar:
	{
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: key_scalar */
	    {
#line 307 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZItag) = TYPE_SCALAR; 
#line 3770 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: key_scalar */
	}
	break;
      case lex_signed:
	{
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: key_signed */
	    {
#line 303 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZItag) = TYPE_SIGNED; 
#line 3789 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: key_signed */
	}
	break;
      case lex_struct:
	{
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: key_struct */
	    {
#line 299 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZItag) = TYPE_STRUCT; 
#line 3808 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: key_struct */
	}
	break;
      case lex_union:
	{
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: key_union */
	    {
#line 300 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZItag) = TYPE_UNION; 
#line 3827 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: key_union */
	}
	break;
      case lex_unsigned:
	{
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: key_unsigned */
	    {
#line 304 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZItag) = TYPE_UNSIGNED; 
#line 3846 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: key_unsigned */
	}
	break;
      case 75:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOtag = ZItag;
}

static void
ZRdirect_Hdeclarator (SID_IDENTIFIER *ZO316, SID_TYPE *ZO317)
{
    SID_IDENTIFIER ZI316;
    SID_TYPE ZI317;

    switch (CURRENT_TERMINAL) {
      case lex_open_Hround:
	{
	    SID_IDENTIFIER ZIid;
	    SID_TYPE ZIt;

	    ADVANCE_LEXER;
	    ZRdeclarator (&ZIid, &ZIt);
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      case 75:
		RESTORE_LEXER;
		goto ZL1;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    ZR318 (ZIid, ZIt, &ZI316, &ZI317);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case lex_name:
	{
	    SID_IDENTIFIER ZIid;
	    SID_TYPE ZIt;

	    ZRidentifier (&ZIid);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    /* BEGINNING OF ACTION: type_none */
	    {
#line 357 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIt) = null;
#line 3910 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: type_none */
	    ZR318 (ZIid, ZIt, &ZI316, &ZI317);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case 75:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZO316 = ZI316;
    *ZO317 = ZI317;
}

static void
ZRtype_Hcommand (int *ZOtag)
{
    int ZItag;

    switch (CURRENT_TERMINAL) {
      case lex_open_Hround:
	{
	    ADVANCE_LEXER;
	    ZR340 (&ZItag);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case lex_struct:
	{
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: key_struct_tag */
	    {
#line 296 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZItag) = TYPE_STRUCT_TAG; 
#line 3957 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: key_struct_tag */
	}
	break;
      case lex_union:
	{
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: key_union_tag */
	    {
#line 297 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZItag) = TYPE_UNION_TAG; 
#line 3969 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: key_union_tag */
	}
	break;
      default:
	{
	    /* BEGINNING OF ACTION: key_type */
	    {
#line 295 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZItag) = TYPE_GENERIC; 
#line 3980 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: key_type */
	}
	break;
      case 75:
	return;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOtag = ZItag;
}

static void
ZRtext_Hcommand (SID_COMMAND *ZOc)
{
    SID_COMMAND ZIc;

    switch (CURRENT_TERMINAL) {
      case lex_build_Hinsert:
	{
	    SID_STRING ZIs;

	    /* BEGINNING OF EXTRACT: build-insert */
	    {
#line 244 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 ZIs = token_value; 
#line 4010 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF EXTRACT: build-insert */
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: declare_build_insert */
	    {
#line 672 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIc) = make_object ((ZIs), OBJ_TEXT_SRC);
#line 4019 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: declare_build_insert */
	}
	break;
      case lex_comment:
	{
	    SID_STRING ZIs;

	    /* BEGINNING OF EXTRACT: comment */
	    {
#line 242 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 ZIs = token_value; 
#line 4032 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF EXTRACT: comment */
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: declare_comment */
	    {
#line 664 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIc) = make_object ((ZIs), OBJ_TEXT_INCL);
#line 4041 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: declare_comment */
	}
	break;
      case lex_insert:
	{
	    SID_STRING ZIs;

	    /* BEGINNING OF EXTRACT: insert */
	    {
#line 243 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 ZIs = token_value; 
#line 4054 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF EXTRACT: insert */
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: declare_insert */
	    {
#line 668 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIc) = make_object ((ZIs), OBJ_TEXT_INCL);
#line 4063 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: declare_insert */
	}
	break;
      case lex_if: case lex_ifdef: case lex_ifndef:
	{
	    SID_COMMAND ZIi;
	    SID_STRING ZIs;
	    SID_COMMAND ZIa;
	    SID_COMMAND ZIb;

	    ZRif_Hcommand (&ZIi, &ZIs);
	    ZRcommand_Hlist (&ZIa);
	    /* BEGINNING OF INLINE: 293 */
	    {
		switch (CURRENT_TERMINAL) {
		  case lex_else:
		    {
			ADVANCE_LEXER;
			ZRcommand_Hlist (&ZIb);
			if ((CURRENT_TERMINAL) == 75) {
			    RESTORE_LEXER;
			    goto ZL1;
			}
		    }
		    break;
		  default:
		    {
			/* BEGINNING OF ACTION: command_none */
			{
#line 598 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIb) = null;
#line 4097 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
			}
			/* END OF ACTION: command_none */
		    }
		    break;
		  case 75:
		    RESTORE_LEXER;
		    goto ZL1;
		}
	    }
	    /* END OF INLINE: 293 */
	    switch (CURRENT_TERMINAL) {
	      case lex_endif:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: command_endif */
	    {
#line 859 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    object *p, *q;
    p = join_object ((ZIi), (ZIa));
    if ((ZIb)) {
	q = make_object ((ZIs), OBJ_IF);
	q->u.u_num = CMD_ELSE;
	p = join_object (p, q);
	p = join_object (p, (ZIb));
    }
    q = make_object ((ZIs), OBJ_IF);
    q->u.u_num = CMD_ENDIF;
    (ZIc) = join_object (p, q);
#line 4130 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: command_endif */
	}
	break;
      case 75:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOc = ZIc;
}

static void
ZR347 (SID_IDENTIFIER *ZI345, SID_IDENTIFIER *ZOid, SID_TYPE *ZOt)
{
    SID_IDENTIFIER ZIid;
    SID_TYPE ZIt;

    switch (CURRENT_TERMINAL) {
      case lex_colon:
	{
	    ZRbitfield_Hoperator (&ZIt);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    ZIid = *ZI345;
	}
	break;
      default:
	{
	    SID_TYPE ZI344;

	    /* BEGINNING OF ACTION: type_none */
	    {
#line 357 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZI344) = null;
#line 4174 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: type_none */
	    ZR318 (*ZI345, ZI344, &ZIid, &ZIt);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case 75:
	return;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOid = ZIid;
    *ZOt = ZIt;
}

static void
ZRname_Hversion (int *ZOv)
{
    int ZIv;

    switch (CURRENT_TERMINAL) {
      case lex_dot:
	{
	    SID_STRING ZIn;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_number:
		/* BEGINNING OF EXTRACT: number */
		{
#line 239 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 ZIn = token_value; 
#line 4213 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
		}
		/* END OF EXTRACT: number */
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: version_number */
	    {
#line 545 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIv) = atoi ((ZIn));
#line 4226 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: version_number */
	}
	break;
      default:
	{
	    /* BEGINNING OF ACTION: version_none */
	    {
#line 541 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIv) = no_version;
#line 4238 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: version_none */
	}
	break;
      case 75:
	return;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOv = ZIv;
}

static void
ZR348 (int *ZOcmd)
{
    int ZIcmd;

    switch (CURRENT_TERMINAL) {
      case lex_open_Hround:
	{
	    ADVANCE_LEXER;
	    ZR349 (&ZIcmd);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      default:
	{
	    /* BEGINNING OF ACTION: cmd_func */
	    {
#line 585 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZIcmd) = OBJ_FUNC; 
#line 4276 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: cmd_func */
	}
	break;
      case 75:
	return;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOcmd = ZIcmd;
}

static void
ZRdirect_Habstract_Hdeclarator (SID_STRING *ZO306, SID_TYPE *ZO307)
{
    SID_STRING ZI306;
    SID_TYPE ZI307;

    switch (CURRENT_TERMINAL) {
      case lex_name:
	{
	    SID_STRING ZInm;
	    SID_TYPE ZIt;

	    /* BEGINNING OF EXTRACT: name */
	    {
#line 238 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 ZInm = token_value; 
#line 4308 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF EXTRACT: name */
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: type_none */
	    {
#line 357 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIt) = null;
#line 4317 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: type_none */
	    ZR308 (ZInm, ZIt, &ZI306, &ZI307);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case lex_open_Hround:
	{
	    SID_STRING ZI336;
	    SID_TYPE ZI337;

	    ADVANCE_LEXER;
	    ZRabstract_Hdeclarator (&ZI336, &ZI337);
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      case 75:
		RESTORE_LEXER;
		goto ZL1;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    ZR338 (&ZI336, &ZI337, &ZI306, &ZI307);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      default:
	{
	    SID_STRING ZInm;
	    SID_TYPE ZIt;

	    /* BEGINNING OF ACTION: name_none */
	    {
#line 507 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZInm) = null;
#line 4361 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: name_none */
	    /* BEGINNING OF ACTION: type_none */
	    {
#line 357 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIt) = null;
#line 4369 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: type_none */
	    ZR308 (ZInm, ZIt, &ZI306, &ZI307);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case 75:
	return;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZO306 = ZI306;
    *ZO307 = ZI307;
}

static void
ZRfield_Hdeclarator (SID_IDENTIFIER *ZOid, SID_TYPE *ZOt)
{
    SID_IDENTIFIER ZIid;
    SID_TYPE ZIt;

    switch (CURRENT_TERMINAL) {
      case lex_open_Hround:
	{
	    SID_IDENTIFIER ZI341;
	    SID_TYPE ZI342;

	    ADVANCE_LEXER;
	    ZRdeclarator (&ZI341, &ZI342);
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      case 75:
		RESTORE_LEXER;
		goto ZL1;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    ZR318 (ZI341, ZI342, &ZIid, &ZIt);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case lex_colon:
	{
	    ZRbitfield_Hoperator (&ZIt);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    /* BEGINNING OF ACTION: id_anon */
	    {
#line 530 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    char *nm = string_printf ("%s%d", HIDDEN_NAME, anon_no++);
    if (crt_field_name) {
	nm = string_printf ("%s.%s", crt_field_name, nm);
    }
    (ZIid).iname = nm;
    (ZIid).ivers = no_version;
    (ZIid).ename = token_name (nm);
    (ZIid).evers = no_version;
#line 4441 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: id_anon */
	}
	break;
      case lex_name:
	{
	    SID_IDENTIFIER ZI345;

	    ZRidentifier (&ZI345);
	    ZR347 (&ZI345, &ZIid, &ZIt);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case lex_star:
	{
	    SID_TYPE ZIp;
	    SID_TYPE ZIs;

	    ZRptr_Hoperator (&ZIp);
	    ZRdeclarator (&ZIid, &ZIs);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    /* BEGINNING OF ACTION: type_inject */
	    {
#line 373 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIt) = inject_type ((ZIs), (ZIp));
#line 4474 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: type_inject */
	}
	break;
      case 75:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOid = ZIid;
    *ZOt = ZIt;
}

static void
ZRvariable_Hcommand (void)
{
    switch (CURRENT_TERMINAL) {
      case lex_info:
	{
	    SID_STRING ZIs;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_string:
		/* BEGINNING OF EXTRACT: string */
		{
#line 240 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 ZIs = token_value; 
#line 4508 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
		}
		/* END OF EXTRACT: string */
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	}
	break;
      case lex_variable:
	{
	    SID_STRING ZInm;

	    /* BEGINNING OF EXTRACT: variable */
	    {
#line 241 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 ZInm = token_value; 
#line 4526 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF EXTRACT: variable */
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_equal:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    ZR354 (&ZInm);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case 75:
	return;
      default:
	goto ZL1;
    }
    return;
  ZL1:;
    SAVE_LEXER (75);
    return;
}

static void
ZR349 (int *ZOcmd)
{
    int ZIcmd;

    switch (CURRENT_TERMINAL) {
      case lex_extern:
	{
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: cmd_func_extern */
	    {
#line 586 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZIcmd) = OBJ_EXTERN; 
#line 4575 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: cmd_func_extern */
	}
	break;
      case lex_weak:
	{
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: cmd_func_weak */
	    {
#line 587 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZIcmd) = OBJ_WEAK; 
#line 4594 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: cmd_func_weak */
	}
	break;
      case 75:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOcmd = ZIcmd;
}

static void
ZR350 (SID_TYPE *ZOt)
{
    SID_TYPE ZIt;

    switch (CURRENT_TERMINAL) {
      case lex_close_Hround:
	{
	    SID_TYPE ZIp;

	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: type_list_none */
	    {
#line 418 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIp) = null;
#line 4628 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: type_list_none */
	    /* BEGINNING OF ACTION: type_macro */
	    {
#line 397 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIt) = make_subtype ((type *) null, TYPE_PROC);
    (ZIt)->v.next = (ZIp);
#line 4637 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: type_macro */
	}
	break;
      case lex_name: case lex_char: case lex_const:
      case lex_double: case lex_enum: case lex_float:
      case lex_int: case lex_long: case lex_lvalue:
      case lex_restrict: case lex_short: case lex_signed:
      case lex_struct: case lex_union: case lex_unsigned:
      case lex_void: case lex_volatile:
	{
	    SID_TYPE ZIp;

	    ZRmacro_Hparam_Hlist (&ZIp);
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      case 75:
		RESTORE_LEXER;
		goto ZL1;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: type_macro */
	    {
#line 397 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIt) = make_subtype ((type *) null, TYPE_PROC);
    (ZIt)->v.next = (ZIp);
#line 4668 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: type_macro */
	}
	break;
      case 75:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOt = ZIt;
}

static void
ZR351 (SID_STRING *ZOkey)
{
    SID_STRING ZIkey;

    switch (CURRENT_TERMINAL) {
      case lex_exclaim:
	{
	    ADVANCE_LEXER;
	    ZR352 (&ZIkey);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case lex_question:
	{
	    ADVANCE_LEXER;
	    ZR353 (&ZIkey);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case 75:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOkey = ZIkey;
}

static void
ZRdefine_Hparam_Hclause (SID_STRING *ZOp)
{
    SID_STRING ZIp;

    switch (CURRENT_TERMINAL) {
      case lex_open_Hround:
	{
	    ADVANCE_LEXER;
	    ZR325 (&ZIp);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      default:
	{
	    /* BEGINNING OF ACTION: param_none */
	    {
#line 493 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZIp) = null; 
#line 4747 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: param_none */
	}
	break;
      case 75:
	return;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOp = ZIp;
}

static void
ZRexp_Hcommand (int *ZOcmd)
{
    int ZIcmd;

    switch (CURRENT_TERMINAL) {
      case lex_constant:
	{
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: cmd_constant */
	    {
#line 582 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZIcmd) = OBJ_CONST; 
#line 4776 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: cmd_constant */
	}
	break;
      case lex_exp:
	{
	    ADVANCE_LEXER;
	    ZR329 (&ZIcmd);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case 75:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOcmd = ZIcmd;
}

static void
ZR352 (SID_STRING *ZOkey)
{
    SID_STRING ZIkey;

    switch (CURRENT_TERMINAL) {
      case lex_exclaim:
	{
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: subset_both */
	    {
#line 559 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZIkey) = "11"; 
#line 4824 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: subset_both */
	}
	break;
      case lex_question:
	{
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: subset_first */
	    {
#line 557 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZIkey) = "10"; 
#line 4843 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: subset_first */
	}
	break;
      case 75:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOkey = ZIkey;
}

static void
ZRif_Hcommand (SID_COMMAND *ZOc, SID_STRING *ZOs)
{
    SID_COMMAND ZIc;
    SID_STRING ZIs;

    switch (CURRENT_TERMINAL) {
      case lex_if:
	{
	    ADVANCE_LEXER;
	    ZRconstant_Hvalue (&ZIs);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    /* BEGINNING OF ACTION: command_if */
	    {
#line 844 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIc) = make_object ((ZIs), OBJ_IF);
    (ZIc)->u.u_num = CMD_IF;
#line 4882 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: command_if */
	}
	break;
      case lex_ifdef:
	{
	    ADVANCE_LEXER;
	    ZRifdef_Hmacro_Hname (&ZIs);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    /* BEGINNING OF ACTION: command_ifdef */
	    {
#line 849 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIc) = make_object ((ZIs), OBJ_IF);
    (ZIc)->u.u_num = CMD_IFDEF;
#line 4901 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: command_ifdef */
	}
	break;
      case lex_ifndef:
	{
	    ADVANCE_LEXER;
	    ZRifdef_Hmacro_Hname (&ZIs);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    /* BEGINNING OF ACTION: command_ifndef */
	    {
#line 854 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIc) = make_object ((ZIs), OBJ_IF);
    (ZIc)->u.u_num = CMD_IFNDEF;
#line 4920 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: command_ifndef */
	}
	break;
      case 75:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOc = ZIc;
    *ZOs = ZIs;
}

static void
ZR353 (SID_STRING *ZOkey)
{
    SID_STRING ZIkey;

    switch (CURRENT_TERMINAL) {
      case lex_exclaim:
	{
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: subset_second */
	    {
#line 558 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZIkey) = "01"; 
#line 4959 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: subset_second */
	}
	break;
      case lex_question:
	{
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hround:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: subset_none */
	    {
#line 556 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZIkey) = "00"; 
#line 4978 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: subset_none */
	}
	break;
      case 75:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOkey = ZIkey;
}

static void
ZR354 (SID_STRING *ZInm)
{
    switch (CURRENT_TERMINAL) {
      case lex_minus:
	{
	    SID_STRING ZIs;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_number:
		/* BEGINNING OF EXTRACT: number */
		{
#line 239 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 ZIs = token_value; 
#line 5011 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
		}
		/* END OF EXTRACT: number */
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: variable_minus */
	    {
#line 648 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    set_integer ((*ZInm), -atoi ((ZIs)));
#line 5024 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: variable_minus */
	}
	break;
      case lex_number:
	{
	    SID_STRING ZIs;

	    /* BEGINNING OF EXTRACT: number */
	    {
#line 239 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 ZIs = token_value; 
#line 5037 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF EXTRACT: number */
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: variable_plus */
	    {
#line 644 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    set_integer ((*ZInm), atoi ((ZIs)));
#line 5046 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: variable_plus */
	}
	break;
      case lex_string:
	{
	    SID_STRING ZIs;

	    /* BEGINNING OF EXTRACT: string */
	    {
#line 240 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 ZIs = token_value; 
#line 5059 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF EXTRACT: string */
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: variable_string */
	    {
#line 640 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    set_string ((*ZInm), (ZIs));
#line 5068 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: variable_string */
	}
	break;
      case 75:
	return;
      default:
	goto ZL1;
    }
    return;
  ZL1:;
    SAVE_LEXER (75);
    return;
}

static void
ZRbitfield_Hoperator (SID_TYPE *ZOt)
{
    SID_TYPE ZIt;

    if ((CURRENT_TERMINAL) == 75) {
	return;
    }
    {
	SID_STRING ZIa;

	switch (CURRENT_TERMINAL) {
	  case lex_colon:
	    break;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
	ZRconstant_Hvalue (&ZIa);
	if ((CURRENT_TERMINAL) == 75) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	/* BEGINNING OF ACTION: type_bitfield */
	{
#line 387 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIt) = make_subtype ((type *) null, TYPE_BITFIELD);
    (ZIt)->v.str = (ZIa);
#line 5113 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	}
	/* END OF ACTION: type_bitfield */
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOt = ZIt;
}

static void
ZRuse_Hsubset_Hname (SID_STRING *ZOs)
{
    SID_STRING ZIs;

    if ((CURRENT_TERMINAL) == 75) {
	return;
    }
    {
	SID_STRING ZIa;
	SID_STRING ZIb;

	switch (CURRENT_TERMINAL) {
	  case lex_open_Hround:
	    break;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
	switch (CURRENT_TERMINAL) {
	  case lex_string:
	    /* BEGINNING OF EXTRACT: string */
	    {
#line 240 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 ZIa = token_value; 
#line 5150 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF EXTRACT: string */
	    break;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
	switch (CURRENT_TERMINAL) {
	  case lex_close_Hround:
	    break;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
	switch (CURRENT_TERMINAL) {
	  case lex_comma:
	    break;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
	switch (CURRENT_TERMINAL) {
	  case lex_string:
	    /* BEGINNING OF EXTRACT: string */
	    {
#line 240 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 ZIb = token_value; 
#line 5178 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF EXTRACT: string */
	    break;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
	/* BEGINNING OF ACTION: file_name */
	{
#line 566 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIs) = subset_name ((ZIa), (ZIb), NULL);
#line 5191 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	}
	/* END OF ACTION: file_name */
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOs = ZIs;
}

void
read_spec (SID_COMMAND *ZOc)
{
    SID_COMMAND ZIc;

    if ((CURRENT_TERMINAL) == 75) {
	return;
    }
    {
	ZRsubset_Hcommand (&ZIc);
	switch (CURRENT_TERMINAL) {
	  case lex_semicolon:
	    break;
	  case 75:
	    RESTORE_LEXER;
	    goto ZL1;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
	switch (CURRENT_TERMINAL) {
	  case lex_eof:
	    break;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
    }
    goto ZL0;
  ZL1:;
    {
	/* BEGINNING OF ACTION: syntax_error */
	{
#line 881 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    MSG_syntax_error ();
#line 5239 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	}
	/* END OF ACTION: syntax_error */
	/* BEGINNING OF ACTION: command_none */
	{
#line 598 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIc) = null;
#line 5247 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	}
	/* END OF ACTION: command_none */
    }
  ZL0:;
    *ZOc = ZIc;
}

static void
ZRmacro_Hdeclarator (SID_IDENTIFIER *ZOid, SID_TYPE *ZOt)
{
    SID_IDENTIFIER ZIid;
    SID_TYPE ZIt;

    switch (CURRENT_TERMINAL) {
      case lex_name:
	{
	    ZRidentifier (&ZIid);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    /* BEGINNING OF ACTION: type_none */
	    {
#line 357 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIt) = null;
#line 5274 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: type_none */
	}
	break;
      case lex_star:
	{
	    SID_TYPE ZIp;
	    SID_TYPE ZIs;

	    ZRptr_Hoperator (&ZIp);
	    ZRmacro_Hdeclarator (&ZIid, &ZIs);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    /* BEGINNING OF ACTION: type_inject */
	    {
#line 373 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIt) = inject_type ((ZIs), (ZIp));
#line 5295 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: type_inject */
	}
	break;
      case 75:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOid = ZIid;
    *ZOt = ZIt;
}

static void
ZRsubset_Hname (SID_STRING *ZOs)
{
    SID_STRING ZIs;

    if ((CURRENT_TERMINAL) == 75) {
	return;
    }
    {
	SID_STRING ZIa;

	switch (CURRENT_TERMINAL) {
	  case lex_string:
	    /* BEGINNING OF EXTRACT: string */
	    {
#line 240 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 ZIa = token_value; 
#line 5331 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF EXTRACT: string */
	    break;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
	ZR320 (&ZIa, &ZIs);
	if ((CURRENT_TERMINAL) == 75) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOs = ZIs;
}

static void
ZRbuiltin_Htype (unsigned *ZOb)
{
    unsigned ZIb;

    if ((CURRENT_TERMINAL) == 75) {
	return;
    }
    {
	unsigned ZIa;
	unsigned ZIc;

	ZRtype_Hkeyword (&ZIa);
	/* BEGINNING OF INLINE: 102 */
	{
	    switch (CURRENT_TERMINAL) {
	      case lex_char: case lex_double: case lex_float:
	      case lex_int: case lex_long: case lex_short:
	      case lex_signed: case lex_unsigned: case lex_void:
		{
		    unsigned ZId;

		    ZRbuiltin_Htype (&ZId);
		    if ((CURRENT_TERMINAL) == 75) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		    /* BEGINNING OF ACTION: btype_join */
		    {
#line 276 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    while ((ZIa) & (ZId)) {
	if ((ZIa) == BTYPE_LONG && allow_long_long) {
	    (ZIa) = BTYPE_LLONG;
	} else {
	    MSG_duplicate_type_specifier ();
	    break;
	}
    }
    (ZIc) = ((ZIa) | (ZId));
#line 5393 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
		    }
		    /* END OF ACTION: btype_join */
		}
		break;
	      default:
		{
		    ZIc = ZIa;
		}
		break;
	      case 75:
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	/* END OF INLINE: 102 */
	ZIb = ZIc;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOb = ZIb;
}

static void
ZRobject_Hqualifier (int *ZOlv)
{
    int ZIlv;

    switch (CURRENT_TERMINAL) {
      case lex_lvalue:
	{
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: key_lvalue */
	    {
#line 308 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZIlv) = TYPE_LVALUE; 
#line 5432 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: key_lvalue */
	}
	break;
      default:
	{
	    /* BEGINNING OF ACTION: key_rvalue */
	    {
#line 309 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZIlv) = TYPE_RVALUE; 
#line 5443 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: key_rvalue */
	}
	break;
      case 75:
	return;
    }
    *ZOlv = ZIlv;
}

static void
ZRfield_Hlist (SID_TYPE ZIm, SID_COMMAND *ZOc)
{
    SID_COMMAND ZIc;

    switch (CURRENT_TERMINAL) {
      case lex_if: case lex_ifdef: case lex_ifndef:
	{
	    SID_COMMAND ZIi;
	    SID_STRING ZIs;
	    SID_COMMAND ZIa;
	    SID_COMMAND ZIb;
	    SID_COMMAND ZIc1;
	    SID_COMMAND ZIc2;

	    ZRif_Hcommand (&ZIi, &ZIs);
	    ZRfield_Hlist (ZIm, &ZIa);
	    /* BEGINNING OF INLINE: 242 */
	    {
		switch (CURRENT_TERMINAL) {
		  case lex_else:
		    {
			ADVANCE_LEXER;
			ZRfield_Hlist (ZIm, &ZIb);
			if ((CURRENT_TERMINAL) == 75) {
			    RESTORE_LEXER;
			    goto ZL1;
			}
		    }
		    break;
		  default:
		    {
			/* BEGINNING OF ACTION: command_none */
			{
#line 598 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIb) = null;
#line 5491 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
			}
			/* END OF ACTION: command_none */
		    }
		    break;
		  case 75:
		    RESTORE_LEXER;
		    goto ZL1;
		}
	    }
	    /* END OF INLINE: 242 */
	    switch (CURRENT_TERMINAL) {
	      case lex_endif:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: command_endif */
	    {
#line 859 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    object *p, *q;
    p = join_object ((ZIi), (ZIa));
    if ((ZIb)) {
	q = make_object ((ZIs), OBJ_IF);
	q->u.u_num = CMD_ELSE;
	p = join_object (p, q);
	p = join_object (p, (ZIb));
    }
    q = make_object ((ZIs), OBJ_IF);
    q->u.u_num = CMD_ENDIF;
    (ZIc1) = join_object (p, q);
#line 5524 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: command_endif */
	    ZRfield_Hlist (ZIm, &ZIc2);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    /* BEGINNING OF ACTION: command_join */
	    {
#line 602 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIc) = join_object ((ZIc1), (ZIc2));
#line 5537 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: command_join */
	}
	break;
      case lex_name: case lex_char: case lex_const:
      case lex_double: case lex_enum: case lex_float:
      case lex_int: case lex_long: case lex_restrict:
      case lex_short: case lex_signed: case lex_struct:
      case lex_union: case lex_unsigned: case lex_void:
      case lex_volatile:
	{
	    SID_TYPE ZIt;
	    SID_COMMAND ZIa;
	    SID_COMMAND ZIb;

	    ZRqualified_Htype (&ZIt);
	    ZRfield_Hdeclarator_Hlist (ZIm, ZIt, &ZIa);
	    switch (CURRENT_TERMINAL) {
	      case lex_semicolon:
		break;
	      case 75:
		RESTORE_LEXER;
		goto ZL1;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    ZRfield_Hlist (ZIm, &ZIb);
	    if ((CURRENT_TERMINAL) == 75) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    /* BEGINNING OF ACTION: command_join */
	    {
#line 602 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIc) = join_object ((ZIa), (ZIb));
#line 5575 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: command_join */
	}
	break;
      default:
	{
	    /* BEGINNING OF ACTION: command_none */
	    {
#line 598 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIc) = null;
#line 5587 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: command_none */
	}
	break;
      case 75:
	return;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOc = ZIc;
}

static void
ZRptr_Hoperator (SID_TYPE *ZOt)
{
    SID_TYPE ZIt;

    if ((CURRENT_TERMINAL) == 75) {
	return;
    }
    {
	unsigned ZIcv;

	switch (CURRENT_TERMINAL) {
	  case lex_star:
	    break;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
	ZRtype_Hqualifier_Hopt (&ZIcv);
	if ((CURRENT_TERMINAL) == 75) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	/* BEGINNING OF ACTION: type_ptr */
	{
#line 377 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

    (ZIt) = make_subtype ((type *) null, TYPE_PTR);
    (ZIt)->v.str = cv_qualifier [(ZIcv)];
#line 5632 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	}
	/* END OF ACTION: type_ptr */
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOt = ZIt;
}

static void
ZRtype_Hkeyword (unsigned *ZOb)
{
    unsigned ZIb;

    switch (CURRENT_TERMINAL) {
      case lex_char:
	{
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: btype_char */
	    {
#line 266 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZIb) = BTYPE_CHAR; 
#line 5657 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: btype_char */
	}
	break;
      case lex_double:
	{
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: btype_double */
	    {
#line 273 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZIb) = BTYPE_DOUBLE; 
#line 5669 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: btype_double */
	}
	break;
      case lex_float:
	{
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: btype_float */
	    {
#line 272 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZIb) = BTYPE_FLOAT; 
#line 5681 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: btype_float */
	}
	break;
      case lex_int:
	{
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: btype_int */
	    {
#line 268 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZIb) = BTYPE_INT; 
#line 5693 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: btype_int */
	}
	break;
      case lex_long:
	{
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: btype_long */
	    {
#line 269 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZIb) = BTYPE_LONG; 
#line 5705 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: btype_long */
	}
	break;
      case lex_short:
	{
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: btype_short */
	    {
#line 267 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZIb) = BTYPE_SHORT; 
#line 5717 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: btype_short */
	}
	break;
      case lex_signed:
	{
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: btype_signed */
	    {
#line 270 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZIb) = BTYPE_SIGNED; 
#line 5729 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: btype_signed */
	}
	break;
      case lex_unsigned:
	{
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: btype_unsigned */
	    {
#line 271 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZIb) = BTYPE_UNSIGNED; 
#line 5741 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: btype_unsigned */
	}
	break;
      case lex_void:
	{
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: btype_void */
	    {
#line 274 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"
 (ZIb) = BTYPE_VOID; 
#line 5753 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"
	    }
	    /* END OF ACTION: btype_void */
	}
	break;
      case 75:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (75);
    return;
  ZL0:;
    *ZOb = ZIb;
}

/* BEGINNING OF TRAILER */

#line 886 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/tools/tspec/syntax.act"

#line 5775 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//tools/tspec/syntax.c"

/* END OF FILE */


syntax highlighted by Code2HTML, v. 0.9.1