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

/* BEGINNING OF HEADER */

#line 30 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/lexi/syntax.act"

/*
 * Copyright (c) 2003, 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/utilities/lexi/syntax.act,v 1.6 2004/03/08 16:41:20 bp Exp $
 */


#include "config.h"
#include "char.h"
#include "cstring.h"
#include "lex.h"
#include "msgcat.h"
#include "syntax.h"


/*
    PARSER TYPES

    These types give the implementation of the types used in the syntax.
*/

typedef letter *SID_CHARS ;
typedef char *SID_STRING ;


/*
    SID IDENTIFIER PREFIX

    This string is added to the start of each sid identifier.
*/

char *sid_prefix = "lex_" ;


/*
    CURRENT CONDITIONAL

    This variable is used to record the current conditional.
*/

static char *crt_cond = NULL ;


#line 108 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/lexi/syntax.c"

/* BEGINNING OF FUNCTION DECLARATIONS */

static void ZRstring_Hplus (SID_STRING *);
static void ZRchars (SID_CHARS *);
static void ZRargs (int *);
static void ZRtrigraph_Hdefn (void);
static void ZR60 (SID_STRING *, int *);
extern void read_lex (void);
static void ZR68 (void);
static void ZRcommand_Hlist (void);
static void ZRkeyword_Hdefn (void);
static void ZRif_Hcommand (void);
static void ZRcommand (void);
static void ZRtoken_Hdefn (void);

/* BEGINNING OF STATIC VARIABLES */


/* BEGINNING OF FUNCTION DEFINITIONS */

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

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

	/* BEGINNING OF INLINE: 44 */
	{
	    switch (CURRENT_TERMINAL) {
	      case lex_digit:
		{
		    /* BEGINNING OF EXTRACT: digit */
		    {
#line 231 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/lexi/syntax.act"
 ZIa = "0123456789" ; 
#line 150 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/lexi/syntax.c"
		    }
		    /* END OF EXTRACT: digit */
		    ADVANCE_LEXER;
		}
		break;
	      case lex_lower:
		{
		    /* BEGINNING OF EXTRACT: lower */
		    {
#line 230 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/lexi/syntax.act"
 ZIa = "abcdefghijklmnopqrstuvwxyz" ; 
#line 162 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/lexi/syntax.c"
		    }
		    /* END OF EXTRACT: lower */
		    ADVANCE_LEXER;
		}
		break;
	      case lex_string:
		{
		    /* BEGINNING OF EXTRACT: string */
		    {
#line 218 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/lexi/syntax.act"

    ZIa = string_copy(token_buff) ;
#line 175 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/lexi/syntax.c"
		    }
		    /* END OF EXTRACT: string */
		    ADVANCE_LEXER;
		}
		break;
	      case lex_upper:
		{
		    /* BEGINNING OF EXTRACT: upper */
		    {
#line 229 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/lexi/syntax.act"
 ZIa = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ; 
#line 187 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/lexi/syntax.c"
		    }
		    /* END OF EXTRACT: upper */
		    ADVANCE_LEXER;
		}
		break;
	      default:
		goto ZL1;
	    }
	}
	/* END OF INLINE: 44 */
	/* BEGINNING OF INLINE: 46 */
	{
	    switch (CURRENT_TERMINAL) {
	      case lex_plus:
		{
		    SID_STRING ZIb;

		    ADVANCE_LEXER;
		    ZRstring_Hplus (&ZIb);
		    if ((CURRENT_TERMINAL) == 23) {
			RESTORE_LEXER;
			goto ZL1;
		    }
		    /* BEGINNING OF ACTION: string-concat */
		    {
#line 243 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/lexi/syntax.act"

    (ZIs) = string_concat((ZIa), (ZIb));
#line 216 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/lexi/syntax.c"
		    }
		    /* END OF ACTION: string-concat */
		}
		break;
	      default:
		{
		    ZIs = ZIa;
		}
		break;
	    }
	}
	/* END OF INLINE: 46 */
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (23);
    return;
  ZL0:;
    *ZOs = ZIs;
}

static void
ZRchars (SID_CHARS *ZOc)
{
    SID_CHARS ZIc;

    if ((CURRENT_TERMINAL) == 23) {
	return;
    }
    {
	SID_STRING ZIs;

	ZRstring_Hplus (&ZIs);
	if ((CURRENT_TERMINAL) == 23) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	/* BEGINNING OF ACTION: make-chars */
	{
#line 255 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/lexi/syntax.act"

    (ZIc) = make_string ( (ZIs) ) ;
#line 259 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/lexi/syntax.c"
	}
	/* END OF ACTION: make-chars */
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (23);
    return;
  ZL0:;
    *ZOc = ZIc;
}

static void
ZRargs (int *ZOa)
{
    int ZIa;

    switch (CURRENT_TERMINAL) {
      case lex_open:
	{
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_close:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: true */
	    {
#line 392 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/lexi/syntax.act"
 (ZIa) = 1 ; 
#line 291 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/lexi/syntax.c"
	    }
	    /* END OF ACTION: true */
	}
	break;
      default:
	{
	    /* BEGINNING OF ACTION: false */
	    {
#line 393 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/lexi/syntax.act"
 (ZIa) = 0 ; 
#line 302 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/lexi/syntax.c"
	    }
	    /* END OF ACTION: false */
	}
	break;
      case 23:
	return;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (23);
    return;
  ZL0:;
    *ZOa = ZIa;
}

static void
ZRtrigraph_Hdefn (void)
{
    if ((CURRENT_TERMINAL) == 23) {
	return;
    }
    {
	SID_CHARS ZIs;
	SID_STRING ZIt;

	switch (CURRENT_TERMINAL) {
	  case lex_mapping:
	    break;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
	ZRchars (&ZIs);
	switch (CURRENT_TERMINAL) {
	  case lex_arrow:
	    break;
	  case 23:
	    RESTORE_LEXER;
	    goto ZL1;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
	ZRstring_Hplus (&ZIt);
	if ((CURRENT_TERMINAL) == 23) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	/* BEGINNING OF ACTION: make-trigraph */
	{
#line 293 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/lexi/syntax.act"

    char *data [3] ;
    data [0] = (ZIt) ;
    data [1] = NULL ;
    data [2] = crt_cond ;
    add_char ( pre_pass, (ZIs), data ) ;
#line 360 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/lexi/syntax.c"
	}
	/* END OF ACTION: make-trigraph */
    }
    return;
  ZL1:;
    SAVE_LEXER (23);
    return;
}

static void
ZR60 (SID_STRING *ZOi, int *ZOa)
{
    SID_STRING ZIi;
    int ZIa;

    switch (CURRENT_TERMINAL) {
      case lex_identifier:
	{
	    /* BEGINNING OF EXTRACT: identifier */
	    {
#line 173 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/lexi/syntax.act"

    ZIi = string_copy(token_buff);
#line 384 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/lexi/syntax.c"
	    }
	    /* END OF EXTRACT: identifier */
	    ADVANCE_LEXER;
	    ZRargs (&ZIa);
	    if ((CURRENT_TERMINAL) == 23) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case lex_sid_Hidentifier:
	{
	    /* BEGINNING OF EXTRACT: sid-identifier */
	    {
#line 185 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/lexi/syntax.act"

    int n ;
    char *s ;
    char buff [1000] ;
    strcpy(buff, sid_prefix);
    n = ( int ) strlen ( buff ) ;
    for ( s = token_buff ; *s ; s++ ) {
	if ( *s == '-' ) {
	    buff [ n++ ] = '_' ;
	    buff [ n++ ] = 'H' ;
	} else if ( *s == '_' ) {
	    buff [ n++ ] = '_' ;
	    buff [ n++ ] = '_' ;
	} else {
	    buff [ n++ ] = *s ;
	}
	if ( n >= 900 ) {
	    MSG_id_too_long();
	    break ;
	}
    }
    buff [n] = 0 ;
    ZIi = string_copy(buff);
#line 423 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/lexi/syntax.c"
	    }
	    /* END OF EXTRACT: sid-identifier */
	    ADVANCE_LEXER;
	    /* BEGINNING OF ACTION: false */
	    {
#line 393 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/lexi/syntax.act"
 (ZIa) = 0 ; 
#line 431 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/lexi/syntax.c"
	    }
	    /* END OF ACTION: false */
	}
	break;
      case 23:
	return;
      default:
	goto ZL1;
    }
    goto ZL0;
  ZL1:;
    SAVE_LEXER (23);
    return;
  ZL0:;
    *ZOi = ZIi;
    *ZOa = ZIa;
}

void
read_lex (void)
{
    if ((CURRENT_TERMINAL) == 23) {
	return;
    }
    {
	ZRcommand_Hlist ();
	/* BEGINNING OF INLINE: 67 */
	{
	    if ((CURRENT_TERMINAL) == 23) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {
		switch (CURRENT_TERMINAL) {
		  case lex_eof:
		    break;
		  default:
		    goto ZL3;
		}
		ADVANCE_LEXER;
	    }
	    goto ZL2;
	  ZL3:;
	    {
		/* BEGINNING OF ACTION: syntax-error */
		{
#line 402 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/lexi/syntax.act"

    MSG_syntax_error();
#line 481 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/lexi/syntax.c"
		}
		/* END OF ACTION: syntax-error */
	    }
	  ZL2:;
	}
	/* END OF INLINE: 67 */
    }
    return;
  ZL1:;
    SAVE_LEXER (23);
    return;
}

static void
ZR68 (void)
{
    switch (CURRENT_TERMINAL) {
      case lex_identifier:
	{
	    SID_STRING ZIi;
	    SID_CHARS ZIs;

	    /* BEGINNING OF EXTRACT: identifier */
	    {
#line 173 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/lexi/syntax.act"

    ZIi = string_copy(token_buff);
#line 509 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/lexi/syntax.c"
	    }
	    /* END OF EXTRACT: identifier */
	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_equal:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    ZRchars (&ZIs);
	    if ((CURRENT_TERMINAL) == 23) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    /* BEGINNING OF ACTION: make-group */
	    {
#line 282 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/lexi/syntax.act"

    make_group ( (ZIi), (ZIs) ) ;
#line 530 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/lexi/syntax.c"
	    }
	    /* END OF ACTION: make-group */
	    switch (CURRENT_TERMINAL) {
	      case lex_semicolon:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	}
	break;
      case lex_white:
	{
	    SID_CHARS ZIs;

	    ADVANCE_LEXER;
	    switch (CURRENT_TERMINAL) {
	      case lex_equal:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	    ZRchars (&ZIs);
	    if ((CURRENT_TERMINAL) == 23) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    /* BEGINNING OF ACTION: make-white */
	    {
#line 268 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/lexi/syntax.act"

    if ( white_space ) {
	MSG_ws_grp_already_defined();
    }
    white_space = (ZIs) ;
#line 567 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/lexi/syntax.c"
	    }
	    /* END OF ACTION: make-white */
	    switch (CURRENT_TERMINAL) {
	      case lex_semicolon:
		break;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	}
	break;
      case 23:
	return;
      default:
	goto ZL1;
    }
    return;
  ZL1:;
    SAVE_LEXER (23);
    return;
}

static void
ZRcommand_Hlist (void)
{
  ZL2_command_Hlist:;
    switch (CURRENT_TERMINAL) {
      case lex_group: case lex_keyword: case lex_mapping:
      case lex_token: case lex_if: case lex_open_Hbrace:
      case lex_semicolon:
	{
	    ZRcommand ();
	    /* BEGINNING OF INLINE: command-list */
	    if ((CURRENT_TERMINAL) == 23) {
		RESTORE_LEXER;
		goto ZL1;
	    } else {
		goto ZL2_command_Hlist;
	    }
	    /* END OF INLINE: command-list */
	}
	/*UNREACHED*/
      case 23:
	return;
      default:
	break;
    }
    return;
  ZL1:;
    {
	/* BEGINNING OF ACTION: syntax-error */
	{
#line 402 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/lexi/syntax.act"

    MSG_syntax_error();
#line 623 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/lexi/syntax.c"
	}
	/* END OF ACTION: syntax-error */
    }
}

static void
ZRkeyword_Hdefn (void)
{
    if ((CURRENT_TERMINAL) == 23) {
	return;
    }
    {
	SID_STRING ZIs;
	SID_STRING ZIi;
	int ZIa;

	switch (CURRENT_TERMINAL) {
	  case lex_keyword:
	    break;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
	switch (CURRENT_TERMINAL) {
	  case lex_string:
	    /* BEGINNING OF EXTRACT: string */
	    {
#line 218 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/lexi/syntax.act"

    ZIs = string_copy(token_buff) ;
#line 654 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/lexi/syntax.c"
	    }
	    /* END OF EXTRACT: string */
	    break;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
	switch (CURRENT_TERMINAL) {
	  case lex_arrow:
	    break;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
	ZR60 (&ZIi, &ZIa);
	if ((CURRENT_TERMINAL) == 23) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	/* BEGINNING OF ACTION: make-keyword */
	{
#line 323 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/lexi/syntax.act"

    char *data [3] ;
    data [0] = (ZIi) ;
    data [1] = ( (ZIa) ? "()" : NULL ) ;
    data [2] = crt_cond ;
    add_keyword ( (ZIs), data ) ;
#line 683 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/lexi/syntax.c"
	}
	/* END OF ACTION: make-keyword */
    }
    return;
  ZL1:;
    SAVE_LEXER (23);
    return;
}

static void
ZRif_Hcommand (void)
{
    if ((CURRENT_TERMINAL) == 23) {
	return;
    }
    {
	SID_STRING ZIi;
	SID_STRING ZIj;

	switch (CURRENT_TERMINAL) {
	  case lex_if:
	    break;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
	switch (CURRENT_TERMINAL) {
	  case lex_open:
	    break;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
	switch (CURRENT_TERMINAL) {
	  case lex_identifier:
	    /* BEGINNING OF EXTRACT: identifier */
	    {
#line 173 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/lexi/syntax.act"

    ZIi = string_copy(token_buff);
#line 724 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/lexi/syntax.c"
	    }
	    /* END OF EXTRACT: identifier */
	    break;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
	switch (CURRENT_TERMINAL) {
	  case lex_close:
	    break;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
	/* BEGINNING OF ACTION: get-condition */
	{
#line 370 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/lexi/syntax.act"

    (ZIj) = crt_cond ;
#line 744 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/lexi/syntax.c"
	}
	/* END OF ACTION: get-condition */
	/* BEGINNING OF ACTION: add-condition */
	{
#line 338 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/lexi/syntax.act"

    if ( crt_cond ) {
	crt_cond = string_concat(crt_cond, string_concat(" && ", (ZIi)));
    } else {
	crt_cond = (ZIi) ;
    }
#line 756 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/lexi/syntax.c"
	}
	/* END OF ACTION: add-condition */
	ZRcommand ();
	/* BEGINNING OF INLINE: 65 */
	{
	    if ((CURRENT_TERMINAL) == 23) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	    {
		switch (CURRENT_TERMINAL) {
		  case lex_else:
		    break;
		  default:
		    goto ZL3;
		}
		ADVANCE_LEXER;
		/* BEGINNING OF ACTION: compl-condition */
		{
#line 353 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/lexi/syntax.act"

    if ( crt_cond ) {
	if ( strchr ( crt_cond, '&' ) ) {
	    crt_cond = string_concat(string_concat("!( ", crt_cond ), " )");
	} else {
	    crt_cond = string_concat("!", crt_cond);
	}
    }
#line 785 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/lexi/syntax.c"
		}
		/* END OF ACTION: compl-condition */
		ZRcommand ();
		if ((CURRENT_TERMINAL) == 23) {
		    RESTORE_LEXER;
		    goto ZL3;
		}
		/* BEGINNING OF ACTION: set-condition */
		{
#line 381 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/lexi/syntax.act"

    crt_cond = (ZIj) ;
#line 798 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/lexi/syntax.c"
		}
		/* END OF ACTION: set-condition */
	    }
	    goto ZL2;
	  ZL3:;
	    {
		/* BEGINNING OF ACTION: set-condition */
		{
#line 381 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/lexi/syntax.act"

    crt_cond = (ZIj) ;
#line 810 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/lexi/syntax.c"
		}
		/* END OF ACTION: set-condition */
	    }
	  ZL2:;
	}
	/* END OF INLINE: 65 */
    }
    return;
  ZL1:;
    SAVE_LEXER (23);
    return;
}

static void
ZRcommand (void)
{
    switch (CURRENT_TERMINAL) {
      case lex_group:
	{
	    ADVANCE_LEXER;
	    ZR68 ();
	    if ((CURRENT_TERMINAL) == 23) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case lex_open_Hbrace:
	{
	    ADVANCE_LEXER;
	    ZRcommand_Hlist ();
	    switch (CURRENT_TERMINAL) {
	      case lex_close_Hbrace:
		break;
	      case 23:
		RESTORE_LEXER;
		goto ZL1;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	}
	break;
      case lex_semicolon:
	{
	    ADVANCE_LEXER;
	}
	break;
      case lex_if:
	{
	    ZRif_Hcommand ();
	    if ((CURRENT_TERMINAL) == 23) {
		RESTORE_LEXER;
		goto ZL1;
	    }
	}
	break;
      case lex_keyword:
	{
	    ZRkeyword_Hdefn ();
	    switch (CURRENT_TERMINAL) {
	      case lex_semicolon:
		break;
	      case 23:
		RESTORE_LEXER;
		goto ZL1;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	}
	break;
      case lex_token:
	{
	    ZRtoken_Hdefn ();
	    switch (CURRENT_TERMINAL) {
	      case lex_semicolon:
		break;
	      case 23:
		RESTORE_LEXER;
		goto ZL1;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	}
	break;
      case lex_mapping:
	{
	    ZRtrigraph_Hdefn ();
	    switch (CURRENT_TERMINAL) {
	      case lex_semicolon:
		break;
	      case 23:
		RESTORE_LEXER;
		goto ZL1;
	      default:
		goto ZL1;
	    }
	    ADVANCE_LEXER;
	}
	break;
      case 23:
	return;
      default:
	goto ZL1;
    }
    return;
  ZL1:;
    SAVE_LEXER (23);
    return;
}

static void
ZRtoken_Hdefn (void)
{
    if ((CURRENT_TERMINAL) == 23) {
	return;
    }
    {
	SID_CHARS ZIs;
	SID_STRING ZIi;
	int ZIa;

	switch (CURRENT_TERMINAL) {
	  case lex_token:
	    break;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
	ZRchars (&ZIs);
	switch (CURRENT_TERMINAL) {
	  case lex_arrow:
	    break;
	  case 23:
	    RESTORE_LEXER;
	    goto ZL1;
	  default:
	    goto ZL1;
	}
	ADVANCE_LEXER;
	ZR60 (&ZIi, &ZIa);
	if ((CURRENT_TERMINAL) == 23) {
	    RESTORE_LEXER;
	    goto ZL1;
	}
	/* BEGINNING OF ACTION: make-token */
	{
#line 308 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/lexi/syntax.act"

    char *data [3] ;
    data [0] = (ZIi) ;
    data [1] = ( (ZIa) ? "()" : NULL ) ;
    data [2] = crt_cond ;
    add_char ( main_pass, (ZIs), data ) ;
#line 967 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/lexi/syntax.c"
	}
	/* END OF ACTION: make-token */
    }
    return;
  ZL1:;
    SAVE_LEXER (23);
    return;
}

/* BEGINNING OF TRAILER */

#line 407 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/lexi/syntax.act"

#line 981 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/lexi/syntax.c"

/* END OF FILE */


syntax highlighted by Code2HTML, v. 0.9.1