/* * Automatically generated from the files: * /mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.sid * and * /mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act * by: * /mnt/gmirror/ports/lang/TenDRA/work/tendra/obj/utilities/sid/sid */ /* BEGINNING OF HEADER */ #line 57 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" /* * Copyright (c) 2004, The Tendra Project * 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/calculus/syntax.act,v 1.4 2004/03/12 03:08:04 bp Exp $ */ #include "config.h" #include "calculus.h" #include "common.h" #include "cstring.h" #include "extra.h" #include "lex.h" #include "msgcat.h" #include "syntax.h" #include "type_ops.h" /* * PARSER TYPES * * These types give the implementations of the various types used * in the syntax. */ typedef LIST ( ARGUMENT_P ) ARGUMENT_P_LIST; typedef LIST ( COMPONENT_P ) COMPONENT_P_LIST; typedef LIST ( ECONST_P ) ECONST_P_LIST; typedef LIST ( ENUM_P ) ENUM_P_LIST; typedef LIST ( FIELD_P ) FIELD_P_LIST; typedef LIST ( IDENTITY_P ) IDENTITY_P_LIST; typedef LIST ( MAP_P ) MAP_P_LIST; typedef LIST ( PRIMITIVE_P ) PRIMITIVE_P_LIST; typedef LIST ( STRUCTURE_P ) STRUCTURE_P_LIST; typedef LIST ( UNION_P ) UNION_P_LIST; /* * COUNTER VARIABLES * * The variable enum_value is used to determine the value of enumerators. * enum_max is used to record the maximum value of enum_value. Both are * reset to zero at the end of each enumeration type. no_fields is used * to count the number of field in each union. It is reset to zero at * the end of each union type. */ static number enum_value = 0; static number enum_max = 0; static int no_fields = 0; static LIST ( ECONST_P ) enum_list = NULL_list ( ECONST_P ); /* * COMPILATION MODE * * We allow unreached code in the automatically generated sections. */ #if FS_TENDRA #pragma TenDRA begin #ifndef OLD_PRODUCER #pragma TenDRA unreachable code allow #endif #endif #line 132 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" /* BEGINNING OF FUNCTION DECLARATIONS */ static void ZR254 (number, number *); static void ZRimport_Hitem (void); static void ZR258 (number, number *); static void ZRprimary_Hexp (number *); static void ZR262 (number, number *); static void ZR264 (int *); static void ZR265 (int *); static void ZR268 (CLASS_ID_P *); static void ZR269 (string *); static void ZRextra_Hlist (void); static void ZRclass_Hid (CLASS_ID_P *); static void ZRnew_Hitem_Hlist (void); extern void extra_calculus (void); static void ZRunion_Hlist (UNION_P_LIST *); static void ZRshift_Hexp (number *); static void ZRcomponent_Hdecl (TYPE_P, COMPONENT_P_LIST *); static void ZRadd_Hexp (number *); static void ZRstructure_Hsingle (STRUCTURE_P_LIST *); static void ZRmap_Hlist (MAP_P_LIST *); static void ZRprimitive_Hdefn (CLASS_ID_P, PRIMITIVE_P *); static void ZRunary_Hexp (number *); static void ZRand_Hexp (number *); static void ZRargument_Hdecl (TYPE_P, ARGUMENT_P_LIST *); static void ZRold_Hunit (void); static void ZRenumerator_Hlist (ECONST_P_LIST *); static void ZRcomponent_Hgroup (COMPONENT_P_LIST *); static void ZRnew_Hunit (void); static void ZRidentity_Hdefn (CLASS_ID_P, IDENTITY_P *); static void ZRmult_Hexp (number *); extern void read_calculus (void); static void ZRtype (TYPE_P *); static void ZRstructure_Hdefn (CLASS_ID_P, string, STRUCTURE_P *); static void ZRcomponent_Hlist (COMPONENT_P_LIST *); static void ZRextended_Htype (TYPE_P *); static void ZRprimitive_Hlist (PRIMITIVE_P_LIST *); static void ZR209 (string *); static void ZRargument_Hlist (ARGUMENT_P_LIST *); static void ZRexpression (number *); static void ZRxor_Hexp (number *); static void ZRidentity_Hlist (IDENTITY_P_LIST *); static void ZRor_Hexp (number *); static void ZRunion_Hsingle (UNION_P_LIST *); static void ZRstructure_Hlist (STRUCTURE_P_LIST *); static void ZRunion_Hdefn_Hold (CLASS_ID_P, UNION_P *); static void ZRenum_Hsingle (ENUM_P_LIST *); static void ZRfield_Hid_Hlist (int, FIELD_P_LIST *); static void ZR242 (number, number *); static void ZRfield_Hlist (FIELD_P_LIST *); static void ZRunion_Hdefn_Hnew (CLASS_ID_P, UNION_P *); static void ZR246 (number, number *); static void ZR250 (number, number *); /* BEGINNING OF STATIC VARIABLES */ /* BEGINNING OF FUNCTION DEFINITIONS */ static void ZR254 (number ZI252, number *ZO253) { number ZI253; ZL2_254:; switch (CURRENT_TERMINAL) { case lex_lshift: { number ZIp; number ZIn; ADVANCE_LEXER; ZRadd_Hexp (&ZIp); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } /* BEGINNING OF ACTION: exp-lshift */ { #line 483 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIn) = (ZI252) << (ZIp); #line 216 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: exp-lshift */ /* BEGINNING OF INLINE: 254 */ ZI252 = ZIn; goto ZL2_254; /* END OF INLINE: 254 */ } /*UNREACHED*/ case lex_rshift: { number ZIp; number ZIn; ADVANCE_LEXER; ZRadd_Hexp (&ZIp); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } /* BEGINNING OF ACTION: exp-rshift */ { #line 487 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIn) = (ZI252) >> (ZIp); #line 241 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: exp-rshift */ /* BEGINNING OF INLINE: 254 */ ZI252 = ZIn; goto ZL2_254; /* END OF INLINE: 254 */ } /*UNREACHED*/ default: { ZI253 = ZI252; } break; case 49: return; } goto ZL0; ZL1:; SAVE_LEXER (49); return; ZL0:; *ZO253 = ZI253; } static void ZRimport_Hitem (void) { if ((CURRENT_TERMINAL) == 49) { return; } { string ZIa; switch (CURRENT_TERMINAL) { case lex_identifier: /* BEGINNING OF EXTRACT: identifier */ { #line 222 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" ZIa = string_copy ( token_buff ); #line 282 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF EXTRACT: identifier */ break; default: goto ZL1; } ADVANCE_LEXER; ZR269 (&ZIa); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } } return; ZL1:; SAVE_LEXER (49); return; } static void ZR258 (number ZI256, number *ZO257) { number ZI257; ZL2_258:; switch (CURRENT_TERMINAL) { case lex_minus: { number ZIp; number ZIn; ADVANCE_LEXER; ZRmult_Hexp (&ZIp); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } /* BEGINNING OF ACTION: exp-minus */ { #line 479 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIn) = (ZI256) - (ZIp); #line 325 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: exp-minus */ /* BEGINNING OF INLINE: 258 */ ZI256 = ZIn; goto ZL2_258; /* END OF INLINE: 258 */ } /*UNREACHED*/ case lex_plus: { number ZIp; number ZIn; ADVANCE_LEXER; ZRmult_Hexp (&ZIp); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } /* BEGINNING OF ACTION: exp-plus */ { #line 475 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIn) = (ZI256) + (ZIp); #line 350 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: exp-plus */ /* BEGINNING OF INLINE: 258 */ ZI256 = ZIn; goto ZL2_258; /* END OF INLINE: 258 */ } /*UNREACHED*/ default: { ZI257 = ZI256; } break; case 49: return; } goto ZL0; ZL1:; SAVE_LEXER (49); return; ZL0:; *ZO257 = ZI257; } static void ZRprimary_Hexp (number *ZOn) { number ZIn; switch (CURRENT_TERMINAL) { case lex_identifier: { string ZIe; /* BEGINNING OF EXTRACT: identifier */ { #line 222 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" ZIe = string_copy ( token_buff ); #line 390 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF EXTRACT: identifier */ ADVANCE_LEXER; /* BEGINNING OF ACTION: exp-id */ { #line 427 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" number n = 0; LIST ( ECONST_P ) p = enum_list; while ( !IS_NULL_list ( p ) ) { ECONST_P q = DEREF_ptr ( HEAD_list ( p ) ); string s = DEREF_string ( ec_name ( q ) ); if ( streq ( s, (ZIe) ) ) { n = DEREF_number ( ec_value ( q ) ); break; } p = TAIL_list ( p ); } if ( IS_NULL_list ( p ) ) { MSG_unknown_enumerator ((ZIe)); } (ZIn) = n; #line 413 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: exp-id */ } break; case lex_number: { /* BEGINNING OF EXTRACT: number */ { #line 234 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" ZIn = token_value; #line 425 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF EXTRACT: number */ ADVANCE_LEXER; } break; case lex_open_Hround: { ADVANCE_LEXER; ZRexpression (&ZIn); switch (CURRENT_TERMINAL) { case lex_close_Hround: break; case 49: RESTORE_LEXER; goto ZL1; default: goto ZL1; } ADVANCE_LEXER; } break; case lex_question: { ADVANCE_LEXER; /* BEGINNING OF ACTION: exp-crt */ { #line 423 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIn) = enum_value - 1; #line 455 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: exp-crt */ } break; case 49: return; default: goto ZL1; } goto ZL0; ZL1:; SAVE_LEXER (49); return; ZL0:; *ZOn = ZIn; } static void ZR262 (number ZI260, number *ZO261) { number ZI261; ZL2_262:; switch (CURRENT_TERMINAL) { case lex_div: { number ZIp; number ZIn; ADVANCE_LEXER; ZRunary_Hexp (&ZIp); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } /* BEGINNING OF ACTION: exp-div */ { #line 457 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" if ( (ZIp) == 0 ) { MSG_division_by_zero (); (ZIn) = 0; } else { (ZIn) = (ZI260) / (ZIp); } #line 501 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: exp-div */ /* BEGINNING OF INLINE: 262 */ ZI260 = ZIn; goto ZL2_262; /* END OF INLINE: 262 */ } /*UNREACHED*/ case lex_rem: { number ZIp; number ZIn; ADVANCE_LEXER; ZRunary_Hexp (&ZIp); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } /* BEGINNING OF ACTION: exp-rem */ { #line 466 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" if ( (ZIp) == 0 ) { MSG_division_by_zero (); (ZIn) = 0; } else { (ZIn) = (ZI260) % (ZIp); } #line 531 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: exp-rem */ /* BEGINNING OF INLINE: 262 */ ZI260 = ZIn; goto ZL2_262; /* END OF INLINE: 262 */ } /*UNREACHED*/ case lex_star: { number ZIp; number ZIn; ADVANCE_LEXER; ZRunary_Hexp (&ZIp); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } /* BEGINNING OF ACTION: exp-mult */ { #line 453 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIn) = (ZI260) * (ZIp); #line 556 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: exp-mult */ /* BEGINNING OF INLINE: 262 */ ZI260 = ZIn; goto ZL2_262; /* END OF INLINE: 262 */ } /*UNREACHED*/ default: { ZI261 = ZI260; } break; case 49: return; } goto ZL0; ZL1:; SAVE_LEXER (49); return; ZL0:; *ZO261 = ZI261; } static void ZR264 (int *ZOn) { int ZIn; switch (CURRENT_TERMINAL) { case lex_colon: { ADVANCE_LEXER; /* BEGINNING OF ACTION: three */ { #line 263 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIn) = 3; #line 594 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: three */ } break; default: { /* BEGINNING OF ACTION: one */ { #line 261 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIn) = 1; #line 605 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: one */ } break; case 49: return; } *ZOn = ZIn; } static void ZR265 (int *ZOn) { int ZIn; switch (CURRENT_TERMINAL) { case lex_hash: { ADVANCE_LEXER; /* BEGINNING OF ACTION: two */ { #line 262 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIn) = 2; #line 629 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: two */ } break; default: { /* BEGINNING OF ACTION: one */ { #line 261 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIn) = 1; #line 640 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: one */ } break; case 49: return; } *ZOn = ZIn; } static void ZR268 (CLASS_ID_P *ZI267) { switch (CURRENT_TERMINAL) { case lex_identifier: case lex_list: case lex_ptr: case lex_stack: case lex_vec: case lex_vec_Hptr: { IDENTITY_P ZIq; IDENTITY_P_LIST ZIr; IDENTITY_P_LIST ZIi; ZRidentity_Hdefn (*ZI267, &ZIq); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } /* BEGINNING OF ACTION: null-identity */ { #line 600 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIr) = NULL_list ( IDENTITY_P ); #line 672 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: null-identity */ /* BEGINNING OF ACTION: join-identity */ { #line 630 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" CONS_ptr ( (ZIq), (ZIr), (ZIi) ); #line 680 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: join-identity */ /* BEGINNING OF ACTION: add-identity */ { #line 1139 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" algebra->identities = APPEND_list ( algebra->identities, (ZIi) ); #line 688 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: add-identity */ } break; case lex_string: { PRIMITIVE_P ZIq; PRIMITIVE_P_LIST ZIr; PRIMITIVE_P_LIST ZIp; ZRprimitive_Hdefn (*ZI267, &ZIq); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } /* BEGINNING OF ACTION: null-primitive */ { #line 559 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIr) = NULL_list ( PRIMITIVE_P ); #line 709 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: null-primitive */ /* BEGINNING OF ACTION: join-primitive */ { #line 589 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" CONS_ptr ( (ZIq), (ZIr), (ZIp) ); #line 717 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: join-primitive */ /* BEGINNING OF ACTION: add-primitive */ { #line 1128 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" algebra->primitives = APPEND_list ( algebra->primitives, (ZIp) ); #line 725 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: add-primitive */ } break; case 49: return; default: goto ZL1; } return; ZL1:; SAVE_LEXER (49); return; } static void ZR269 (string *ZIa) { switch (CURRENT_TERMINAL) { case lex_colon_Hcolon: { string ZIi; ADVANCE_LEXER; switch (CURRENT_TERMINAL) { case lex_identifier: /* BEGINNING OF EXTRACT: identifier */ { #line 222 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" ZIi = string_copy ( token_buff ); #line 757 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF EXTRACT: identifier */ break; default: goto ZL1; } ADVANCE_LEXER; /* BEGINNING OF ACTION: import-one */ { #line 1088 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" import_type ( (*ZIa), (ZIi) ); #line 770 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: import-one */ } break; default: { /* BEGINNING OF ACTION: import-all */ { #line 1077 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" import_algebra ( (*ZIa) ); #line 782 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: import-all */ } break; case 49: return; } return; ZL1:; SAVE_LEXER (49); return; } static void ZRextra_Hlist (void) { ZL2_extra_Hlist:; switch (CURRENT_TERMINAL) { case lex_identifier: case lex_list: case lex_ptr: case lex_stack: case lex_vec: case lex_vec_Hptr: { TYPE_P ZIt; ZRtype (&ZIt); switch (CURRENT_TERMINAL) { case lex_semicolon: break; case 49: RESTORE_LEXER; goto ZL1; default: goto ZL1; } ADVANCE_LEXER; /* BEGINNING OF ACTION: make-extra */ { #line 1066 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" UNUSED ( (ZIt) ); #line 822 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: make-extra */ /* BEGINNING OF INLINE: extra-list */ goto ZL2_extra_Hlist; /* END OF INLINE: extra-list */ } /*UNREACHED*/ case 49: return; default: break; } return; ZL1:; SAVE_LEXER (49); return; } static void ZRclass_Hid (CLASS_ID_P *ZOi) { CLASS_ID_P ZIi; if ((CURRENT_TERMINAL) == 49) { return; } { int ZIn; string ZIc; string ZIa; /* BEGINNING OF INLINE: 157 */ { switch (CURRENT_TERMINAL) { case lex_colon: { ADVANCE_LEXER; /* BEGINNING OF ACTION: two */ { #line 262 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIn) = 2; #line 864 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: two */ } break; case lex_hash: { ADVANCE_LEXER; ZR264 (&ZIn); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } } break; default: { /* BEGINNING OF ACTION: zero */ { #line 260 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIn) = 0; #line 885 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: zero */ } break; } } /* END OF INLINE: 157 */ switch (CURRENT_TERMINAL) { case lex_identifier: /* BEGINNING OF EXTRACT: identifier */ { #line 222 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" ZIc = string_copy ( token_buff ); #line 900 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF EXTRACT: identifier */ break; default: goto ZL1; } ADVANCE_LEXER; /* BEGINNING OF INLINE: 160 */ { switch (CURRENT_TERMINAL) { case lex_open_Hround: { ADVANCE_LEXER; switch (CURRENT_TERMINAL) { case lex_identifier: /* BEGINNING OF EXTRACT: identifier */ { #line 222 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" ZIa = string_copy ( token_buff ); #line 921 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF EXTRACT: identifier */ break; default: goto ZL1; } ADVANCE_LEXER; switch (CURRENT_TERMINAL) { case lex_close_Hround: break; default: goto ZL1; } ADVANCE_LEXER; } break; default: { /* BEGINNING OF ACTION: default-name */ { #line 296 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIa) = (ZIc); #line 945 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: default-name */ } break; } } /* END OF INLINE: 160 */ /* BEGINNING OF ACTION: make-class-id */ { #line 308 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIi) = MAKE_ptr ( SIZE_cid ); MAKE_cid ( (ZIc), (ZIa), (ZIn), ( string ) crt_file_name, crt_line_no, (ZIi) ); #line 959 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: make-class-id */ } goto ZL0; ZL1:; SAVE_LEXER (49); return; ZL0:; *ZOi = ZIi; } static void ZRnew_Hitem_Hlist (void) { ZL2_new_Hitem_Hlist:; switch (CURRENT_TERMINAL) { case lex_identifier: case lex_enum: case lex_struct: case lex_union: case lex_import: case lex_colon: case lex_hash: { /* BEGINNING OF INLINE: 231 */ { switch (CURRENT_TERMINAL) { case lex_import: { ADVANCE_LEXER; ZRimport_Hitem (); switch (CURRENT_TERMINAL) { case lex_semicolon: break; case 49: RESTORE_LEXER; goto ZL1; default: goto ZL1; } ADVANCE_LEXER; } break; case lex_identifier: case lex_colon: case lex_hash: { CLASS_ID_P ZI267; ZRclass_Hid (&ZI267); switch (CURRENT_TERMINAL) { case lex_equal: break; case 49: RESTORE_LEXER; goto ZL1; default: goto ZL1; } ADVANCE_LEXER; ZR268 (&ZI267); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } } break; case lex_enum: { ENUM_P_LIST ZIe; ZRenum_Hsingle (&ZIe); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } /* BEGINNING OF ACTION: add-enum */ { #line 1150 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" algebra->enumerations = APPEND_list ( algebra->enumerations, (ZIe) ); #line 1035 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: add-enum */ } break; case lex_struct: { STRUCTURE_P_LIST ZIs; ZRstructure_Hsingle (&ZIs); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } /* BEGINNING OF ACTION: add-structure */ { #line 1161 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" algebra->structures = APPEND_list ( algebra->structures, (ZIs) ); #line 1054 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: add-structure */ } break; case lex_union: { UNION_P_LIST ZIu; ZRunion_Hsingle (&ZIu); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } /* BEGINNING OF ACTION: add-union */ { #line 1172 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" algebra->unions = APPEND_list ( algebra->unions, (ZIu) ); #line 1073 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: add-union */ } break; default: goto ZL1; } } /* END OF INLINE: 231 */ /* BEGINNING OF INLINE: new-item-list */ goto ZL2_new_Hitem_Hlist; /* END OF INLINE: new-item-list */ } /*UNREACHED*/ case 49: return; default: break; } return; ZL1:; SAVE_LEXER (49); return; } void extra_calculus (void) { if ((CURRENT_TERMINAL) == 49) { return; } { ZRextra_Hlist (); switch (CURRENT_TERMINAL) { case lex_eof: break; case 49: RESTORE_LEXER; goto ZL1; default: goto ZL1; } ADVANCE_LEXER; } return; ZL1:; { /* BEGINNING OF ACTION: syntax-error */ { #line 283 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" MSG_syntax_error (); #line 1126 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: syntax-error */ } } static void ZRunion_Hlist (UNION_P_LIST *ZOp) { UNION_P_LIST ZIp; switch (CURRENT_TERMINAL) { case lex_identifier: case lex_colon: case lex_hash: { CLASS_ID_P ZIi; UNION_P ZIq; UNION_P_LIST ZIr; ZRclass_Hid (&ZIi); ZRunion_Hdefn_Hold (ZIi, &ZIq); ZRunion_Hlist (&ZIr); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } /* BEGINNING OF ACTION: join-union */ { #line 1054 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" CONS_ptr ( (ZIq), (ZIr), (ZIp) ); #line 1156 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: join-union */ } break; default: { /* BEGINNING OF ACTION: null-union */ { #line 971 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIp) = NULL_list ( UNION_P ); #line 1168 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: null-union */ } break; case 49: return; } goto ZL0; ZL1:; SAVE_LEXER (49); return; ZL0:; *ZOp = ZIp; } static void ZRshift_Hexp (number *ZO253) { number ZI253; if ((CURRENT_TERMINAL) == 49) { return; } { number ZIn; ZRadd_Hexp (&ZIn); ZR254 (ZIn, &ZI253); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } } goto ZL0; ZL1:; SAVE_LEXER (49); return; ZL0:; *ZO253 = ZI253; } static void ZRcomponent_Hdecl (TYPE_P ZIt, COMPONENT_P_LIST *ZOp) { COMPONENT_P_LIST ZIp; if ((CURRENT_TERMINAL) == 49) { return; } { string ZIi; string ZIv; COMPONENT_P ZIq; COMPONENT_P_LIST ZIr; switch (CURRENT_TERMINAL) { case lex_identifier: /* BEGINNING OF EXTRACT: identifier */ { #line 222 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" ZIi = string_copy ( token_buff ); #line 1231 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF EXTRACT: identifier */ break; default: goto ZL1; } ADVANCE_LEXER; /* BEGINNING OF INLINE: 196 */ { switch (CURRENT_TERMINAL) { case lex_equal: { ADVANCE_LEXER; switch (CURRENT_TERMINAL) { case lex_string: /* BEGINNING OF EXTRACT: string */ { #line 246 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" ZIv = string_copy ( token_buff ); #line 1252 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF EXTRACT: string */ break; default: goto ZL1; } ADVANCE_LEXER; } break; default: { /* BEGINNING OF ACTION: null-string */ { #line 272 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIv) = NULL; #line 1269 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: null-string */ } break; } } /* END OF INLINE: 196 */ /* BEGINNING OF ACTION: make-component */ { #line 722 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIq) = MAKE_ptr ( SIZE_cmp ); MAKE_cmp ( (ZIi), (ZIt), (ZIv), (ZIq) ); #line 1283 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: make-component */ /* BEGINNING OF INLINE: 198 */ { switch (CURRENT_TERMINAL) { case lex_comma: { ADVANCE_LEXER; ZRcomponent_Hdecl (ZIt, &ZIr); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } } break; default: { /* BEGINNING OF ACTION: null-component */ { #line 710 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIr) = NULL_list ( COMPONENT_P ); #line 1306 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: null-component */ } break; } } /* END OF INLINE: 198 */ /* BEGINNING OF ACTION: join-component */ { #line 735 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" CONS_ptr ( (ZIq), (ZIr), (ZIp) ); #line 1319 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: join-component */ } goto ZL0; ZL1:; SAVE_LEXER (49); return; ZL0:; *ZOp = ZIp; } static void ZRadd_Hexp (number *ZO257) { number ZI257; if ((CURRENT_TERMINAL) == 49) { return; } { number ZIn; ZRmult_Hexp (&ZIn); ZR258 (ZIn, &ZI257); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } } goto ZL0; ZL1:; SAVE_LEXER (49); return; ZL0:; *ZO257 = ZI257; } static void ZRstructure_Hsingle (STRUCTURE_P_LIST *ZOp) { STRUCTURE_P_LIST ZIp; if ((CURRENT_TERMINAL) == 49) { return; } { CLASS_ID_P ZIi; string ZIj; STRUCTURE_P ZIq; STRUCTURE_P_LIST ZIr; switch (CURRENT_TERMINAL) { case lex_struct: break; default: goto ZL1; } ADVANCE_LEXER; ZRclass_Hid (&ZIi); switch (CURRENT_TERMINAL) { case lex_equal: break; case 49: RESTORE_LEXER; goto ZL1; default: goto ZL1; } ADVANCE_LEXER; ZR209 (&ZIj); ZRstructure_Hdefn (ZIi, ZIj, &ZIq); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } /* BEGINNING OF ACTION: null-structure */ { #line 758 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIr) = NULL_list ( STRUCTURE_P ); #line 1400 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: null-structure */ /* BEGINNING OF ACTION: join-structure */ { #line 801 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" CONS_ptr ( (ZIq), (ZIr), (ZIp) ); #line 1408 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: join-structure */ } goto ZL0; ZL1:; SAVE_LEXER (49); return; ZL0:; *ZOp = ZIp; } static void ZRmap_Hlist (MAP_P_LIST *ZOp) { MAP_P_LIST ZIp; switch (CURRENT_TERMINAL) { case lex_identifier: case lex_string: case lex_list: case lex_ptr: case lex_stack: case lex_vec: case lex_vec_Hptr: { TYPE_P ZIt; int ZIn; string ZIi; ARGUMENT_P_LIST ZIa; MAP_P ZIq; MAP_P_LIST ZIr; ZRextended_Htype (&ZIt); /* BEGINNING OF INLINE: 216 */ { switch (CURRENT_TERMINAL) { case lex_hash: { ADVANCE_LEXER; /* BEGINNING OF ACTION: one */ { #line 261 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIn) = 1; #line 1448 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: one */ } break; default: { /* BEGINNING OF ACTION: zero */ { #line 260 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIn) = 0; #line 1459 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: zero */ } break; case 49: RESTORE_LEXER; goto ZL1; } } /* END OF INLINE: 216 */ switch (CURRENT_TERMINAL) { case lex_identifier: /* BEGINNING OF EXTRACT: identifier */ { #line 222 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" ZIi = string_copy ( token_buff ); #line 1477 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF EXTRACT: identifier */ break; default: goto ZL1; } ADVANCE_LEXER; switch (CURRENT_TERMINAL) { case lex_open_Hround: break; default: goto ZL1; } ADVANCE_LEXER; /* BEGINNING OF INLINE: 217 */ { switch (CURRENT_TERMINAL) { case lex_identifier: case lex_string: case lex_list: case lex_ptr: case lex_stack: case lex_vec: case lex_vec_Hptr: { ZRargument_Hlist (&ZIa); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } } break; default: { /* BEGINNING OF ACTION: null-argument */ { #line 889 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIa) = NULL_list ( ARGUMENT_P ); #line 1513 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: null-argument */ } break; } } /* END OF INLINE: 217 */ switch (CURRENT_TERMINAL) { case lex_close_Hround: break; default: goto ZL1; } ADVANCE_LEXER; /* BEGINNING OF ACTION: make-map */ { #line 948 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIq) = MAKE_ptr ( SIZE_map ); MAKE_map ( (ZIi), (ZIn), (ZIt), (ZIa), (ZIq) ); #line 1534 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: make-map */ ZRmap_Hlist (&ZIr); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } /* BEGINNING OF ACTION: join-map */ { #line 960 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" CONS_ptr ( (ZIq), (ZIr), (ZIp) ); #line 1547 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: join-map */ } break; default: { /* BEGINNING OF ACTION: null-map */ { #line 936 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIp) = NULL_list ( MAP_P ); #line 1559 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: null-map */ } break; case 49: return; } goto ZL0; ZL1:; SAVE_LEXER (49); return; ZL0:; *ZOp = ZIp; } static void ZRprimitive_Hdefn (CLASS_ID_P ZIi, PRIMITIVE_P *ZOp) { PRIMITIVE_P ZIp; if ((CURRENT_TERMINAL) == 49) { return; } { string ZIs; switch (CURRENT_TERMINAL) { case lex_string: /* BEGINNING OF EXTRACT: string */ { #line 246 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" ZIs = string_copy ( token_buff ); #line 1593 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF EXTRACT: string */ break; default: goto ZL1; } ADVANCE_LEXER; switch (CURRENT_TERMINAL) { case lex_semicolon: break; default: goto ZL1; } ADVANCE_LEXER; /* BEGINNING OF ACTION: make-primitive */ { #line 570 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" TYPE r; TYPE_P t; (ZIp) = MAKE_ptr ( SIZE_prim ); MAKE_prim ( (ZIi), (ZIs), (ZIp) ); t = MAKE_ptr ( SIZE_type ); MAKE_type_primitive ( 0, (ZIp), r ); COPY_type ( t, r ); IGNORE register_type ( t ); #line 1620 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: make-primitive */ } goto ZL0; ZL1:; SAVE_LEXER (49); return; ZL0:; *ZOp = ZIp; } static void ZRunary_Hexp (number *ZOn) { number ZIn; switch (CURRENT_TERMINAL) { case lex_compl: { number ZIm; ADVANCE_LEXER; switch (CURRENT_TERMINAL) { case lex_number: /* BEGINNING OF EXTRACT: number */ { #line 234 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" ZIm = token_value; #line 1650 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF EXTRACT: number */ break; default: goto ZL1; } ADVANCE_LEXER; /* BEGINNING OF ACTION: exp-compl */ { #line 449 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIn) = ~(ZIm); #line 1663 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: exp-compl */ } break; case lex_minus: { number ZIm; ADVANCE_LEXER; switch (CURRENT_TERMINAL) { case lex_number: /* BEGINNING OF EXTRACT: number */ { #line 234 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" ZIm = token_value; #line 1680 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF EXTRACT: number */ break; default: goto ZL1; } ADVANCE_LEXER; /* BEGINNING OF ACTION: exp-neg */ { #line 445 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIn) = -(ZIm); #line 1693 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: exp-neg */ } break; case lex_plus: { ADVANCE_LEXER; switch (CURRENT_TERMINAL) { case lex_number: /* BEGINNING OF EXTRACT: number */ { #line 234 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" ZIn = token_value; #line 1708 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF EXTRACT: number */ break; default: goto ZL1; } ADVANCE_LEXER; } break; case lex_identifier: case lex_number: case lex_open_Hround: case lex_question: { ZRprimary_Hexp (&ZIn); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } } break; case 49: return; default: goto ZL1; } goto ZL0; ZL1:; SAVE_LEXER (49); return; ZL0:; *ZOn = ZIn; } static void ZRand_Hexp (number *ZO249) { number ZI249; if ((CURRENT_TERMINAL) == 49) { return; } { number ZIn; ZRshift_Hexp (&ZIn); ZR250 (ZIn, &ZI249); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } } goto ZL0; ZL1:; SAVE_LEXER (49); return; ZL0:; *ZO249 = ZI249; } static void ZRargument_Hdecl (TYPE_P ZIt, ARGUMENT_P_LIST *ZOp) { ARGUMENT_P_LIST ZIp; if ((CURRENT_TERMINAL) == 49) { return; } { string ZIi; ARGUMENT_P ZIq; ARGUMENT_P_LIST ZIr; switch (CURRENT_TERMINAL) { case lex_identifier: /* BEGINNING OF EXTRACT: identifier */ { #line 222 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" ZIi = string_copy ( token_buff ); #line 1787 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF EXTRACT: identifier */ break; default: goto ZL1; } ADVANCE_LEXER; /* BEGINNING OF ACTION: make-argument */ { #line 900 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIq) = MAKE_ptr ( SIZE_arg ); MAKE_arg ( (ZIi), (ZIt), (ZIq) ); #line 1801 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: make-argument */ /* BEGINNING OF INLINE: 212 */ { switch (CURRENT_TERMINAL) { case lex_comma: { ADVANCE_LEXER; ZRargument_Hdecl (ZIt, &ZIr); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } } break; default: { /* BEGINNING OF ACTION: null-argument */ { #line 889 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIr) = NULL_list ( ARGUMENT_P ); #line 1824 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: null-argument */ } break; } } /* END OF INLINE: 212 */ /* BEGINNING OF ACTION: join-argument */ { #line 913 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" CONS_ptr ( (ZIq), (ZIr), (ZIp) ); #line 1837 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: join-argument */ } goto ZL0; ZL1:; SAVE_LEXER (49); return; ZL0:; *ZOp = ZIp; } static void ZRold_Hunit (void) { if ((CURRENT_TERMINAL) == 49) { return; } { string ZIm; PRIMITIVE_P_LIST ZIp; IDENTITY_P_LIST ZIi; STRUCTURE_P_LIST ZIs; UNION_P_LIST ZIu; switch (CURRENT_TERMINAL) { case lex_identifier: /* BEGINNING OF EXTRACT: identifier */ { #line 222 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" ZIm = string_copy ( token_buff ); #line 1869 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF EXTRACT: identifier */ break; default: goto ZL1; } ADVANCE_LEXER; /* BEGINNING OF ACTION: set-main */ { #line 1100 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" string nm = (ZIm); if ( !new_format ) MSG_old_style_algebra_syntax (); if ( find_algebra ( nm ) ) { MSG_algebra_already_defined (nm); } algebra->name = nm; #line 1887 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: set-main */ switch (CURRENT_TERMINAL) { case lex_colon: break; default: goto ZL1; } ADVANCE_LEXER; switch (CURRENT_TERMINAL) { case lex_primitives: break; default: goto ZL1; } ADVANCE_LEXER; switch (CURRENT_TERMINAL) { case lex_colon: break; default: goto ZL1; } ADVANCE_LEXER; ZRprimitive_Hlist (&ZIp); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } /* BEGINNING OF ACTION: add-primitive */ { #line 1128 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" algebra->primitives = APPEND_list ( algebra->primitives, (ZIp) ); #line 1921 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: add-primitive */ switch (CURRENT_TERMINAL) { case lex_identities: break; default: goto ZL1; } ADVANCE_LEXER; switch (CURRENT_TERMINAL) { case lex_colon: break; default: goto ZL1; } ADVANCE_LEXER; ZRidentity_Hlist (&ZIi); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } /* BEGINNING OF ACTION: add-identity */ { #line 1139 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" algebra->identities = APPEND_list ( algebra->identities, (ZIi) ); #line 1948 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: add-identity */ switch (CURRENT_TERMINAL) { case lex_structures: break; default: goto ZL1; } ADVANCE_LEXER; switch (CURRENT_TERMINAL) { case lex_colon: break; default: goto ZL1; } ADVANCE_LEXER; ZRstructure_Hlist (&ZIs); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } /* BEGINNING OF ACTION: add-structure */ { #line 1161 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" algebra->structures = APPEND_list ( algebra->structures, (ZIs) ); #line 1975 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: add-structure */ switch (CURRENT_TERMINAL) { case lex_unions: break; default: goto ZL1; } ADVANCE_LEXER; switch (CURRENT_TERMINAL) { case lex_colon: break; default: goto ZL1; } ADVANCE_LEXER; ZRunion_Hlist (&ZIu); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } /* BEGINNING OF ACTION: add-union */ { #line 1172 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" algebra->unions = APPEND_list ( algebra->unions, (ZIu) ); #line 2002 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: add-union */ switch (CURRENT_TERMINAL) { case lex_extras: break; default: goto ZL1; } ADVANCE_LEXER; switch (CURRENT_TERMINAL) { case lex_colon: break; default: goto ZL1; } ADVANCE_LEXER; ZRextra_Hlist (); switch (CURRENT_TERMINAL) { case lex_hash: break; case 49: RESTORE_LEXER; goto ZL1; default: goto ZL1; } ADVANCE_LEXER; } return; ZL1:; SAVE_LEXER (49); return; } static void ZRenumerator_Hlist (ECONST_P_LIST *ZOp) { ECONST_P_LIST ZIp; switch (CURRENT_TERMINAL) { case lex_identifier: { string ZIs; ECONST_P ZIq; ECONST_P_LIST ZIr; /* BEGINNING OF EXTRACT: identifier */ { #line 222 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" ZIs = string_copy ( token_buff ); #line 2054 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF EXTRACT: identifier */ ADVANCE_LEXER; /* BEGINNING OF INLINE: 187 */ { switch (CURRENT_TERMINAL) { case lex_equal: { number ZIn; ADVANCE_LEXER; ZRexpression (&ZIn); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } /* BEGINNING OF ACTION: set-econst */ { #line 548 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" enum_value = (ZIn); #line 2076 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: set-econst */ } break; default: break; } } /* END OF INLINE: 187 */ /* BEGINNING OF ACTION: make-econst */ { #line 521 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" number v = enum_value++; if ( v > enum_max ) enum_max = v; (ZIq) = MAKE_ptr ( SIZE_ec ); MAKE_ec ( (ZIs), v, (ZIq) ); CONS_ptr ( (ZIq), enum_list, enum_list ); #line 2095 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: make-econst */ /* BEGINNING OF INLINE: 188 */ { switch (CURRENT_TERMINAL) { case lex_comma: { ADVANCE_LEXER; ZRenumerator_Hlist (&ZIr); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } } break; default: { /* BEGINNING OF ACTION: null-econst */ { #line 510 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIr) = NULL_list ( ECONST_P ); #line 2118 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: null-econst */ } break; } } /* END OF INLINE: 188 */ /* BEGINNING OF ACTION: join-econst */ { #line 537 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" CONS_ptr ( (ZIq), (ZIr), (ZIp) ); #line 2131 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: join-econst */ } break; default: { /* BEGINNING OF ACTION: null-econst */ { #line 510 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIp) = NULL_list ( ECONST_P ); #line 2143 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: null-econst */ } break; case 49: return; } goto ZL0; ZL1:; SAVE_LEXER (49); return; ZL0:; *ZOp = ZIp; } static void ZRcomponent_Hgroup (COMPONENT_P_LIST *ZOp) { COMPONENT_P_LIST ZIp; if ((CURRENT_TERMINAL) == 49) { return; } { switch (CURRENT_TERMINAL) { case lex_open_Hbrace: break; default: goto ZL1; } ADVANCE_LEXER; ZRcomponent_Hlist (&ZIp); switch (CURRENT_TERMINAL) { case lex_close_Hbrace: break; case 49: RESTORE_LEXER; goto ZL1; default: goto ZL1; } ADVANCE_LEXER; } goto ZL0; ZL1:; SAVE_LEXER (49); return; ZL0:; *ZOp = ZIp; } static void ZRnew_Hunit (void) { if ((CURRENT_TERMINAL) == 49) { return; } { string ZIm; switch (CURRENT_TERMINAL) { case lex_algebra: break; default: goto ZL1; } ADVANCE_LEXER; /* BEGINNING OF ACTION: set-new-unit */ { #line 1194 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" new_format = 1; #line 2216 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: set-new-unit */ switch (CURRENT_TERMINAL) { case lex_identifier: /* BEGINNING OF EXTRACT: identifier */ { #line 222 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" ZIm = string_copy ( token_buff ); #line 2226 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF EXTRACT: identifier */ break; default: goto ZL1; } ADVANCE_LEXER; /* BEGINNING OF ACTION: set-main */ { #line 1100 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" string nm = (ZIm); if ( !new_format ) MSG_old_style_algebra_syntax (); if ( find_algebra ( nm ) ) { MSG_algebra_already_defined (nm); } algebra->name = nm; #line 2244 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: set-main */ /* BEGINNING OF INLINE: 233 */ { switch (CURRENT_TERMINAL) { case lex_open_Hround: { number ZIa; number ZIb; ADVANCE_LEXER; switch (CURRENT_TERMINAL) { case lex_number: /* BEGINNING OF EXTRACT: number */ { #line 234 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" ZIa = token_value; #line 2263 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF EXTRACT: number */ break; default: goto ZL1; } ADVANCE_LEXER; switch (CURRENT_TERMINAL) { case lex_dot: break; default: goto ZL1; } ADVANCE_LEXER; switch (CURRENT_TERMINAL) { case lex_number: /* BEGINNING OF EXTRACT: number */ { #line 234 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" ZIb = token_value; #line 2285 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF EXTRACT: number */ break; default: goto ZL1; } ADVANCE_LEXER; switch (CURRENT_TERMINAL) { case lex_close_Hround: break; default: goto ZL1; } ADVANCE_LEXER; /* BEGINNING OF ACTION: set-version */ { #line 1116 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" algebra->major_no = ( int ) (ZIa); algebra->minor_no = ( int ) (ZIb); #line 2306 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: set-version */ } break; default: break; } } /* END OF INLINE: 233 */ switch (CURRENT_TERMINAL) { case lex_colon: break; default: goto ZL1; } ADVANCE_LEXER; ZRnew_Hitem_Hlist (); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } } return; ZL1:; SAVE_LEXER (49); return; } static void ZRidentity_Hdefn (CLASS_ID_P ZIi, IDENTITY_P *ZOp) { IDENTITY_P ZIp; if ((CURRENT_TERMINAL) == 49) { return; } { TYPE_P ZIt; ZRtype (&ZIt); switch (CURRENT_TERMINAL) { case lex_semicolon: break; case 49: RESTORE_LEXER; goto ZL1; default: goto ZL1; } ADVANCE_LEXER; /* BEGINNING OF ACTION: make-identity */ { #line 611 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" TYPE r; TYPE_P t; (ZIp) = MAKE_ptr ( SIZE_ident ); MAKE_ident ( (ZIi), (ZIt), (ZIp) ); t = MAKE_ptr ( SIZE_type ); MAKE_type_ident ( 0, (ZIp), r ); COPY_type ( t, r ); IGNORE register_type ( t ); #line 2369 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: make-identity */ } goto ZL0; ZL1:; SAVE_LEXER (49); return; ZL0:; *ZOp = ZIp; } static void ZRmult_Hexp (number *ZO261) { number ZI261; if ((CURRENT_TERMINAL) == 49) { return; } { number ZIn; ZRunary_Hexp (&ZIn); ZR262 (ZIn, &ZI261); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } } goto ZL0; ZL1:; SAVE_LEXER (49); return; ZL0:; *ZO261 = ZI261; } void read_calculus (void) { if ((CURRENT_TERMINAL) == 49) { return; } { /* BEGINNING OF ACTION: set-old-unit */ { #line 1183 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" new_format = 0; #line 2419 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: set-old-unit */ /* BEGINNING OF INLINE: 236 */ { switch (CURRENT_TERMINAL) { case lex_algebra: { ZRnew_Hunit (); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } } break; case lex_identifier: { ZRold_Hunit (); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } } break; default: goto ZL1; } } /* END OF INLINE: 236 */ switch (CURRENT_TERMINAL) { case lex_eof: break; default: goto ZL1; } ADVANCE_LEXER; } return; ZL1:; { /* BEGINNING OF ACTION: syntax-error */ { #line 283 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" MSG_syntax_error (); #line 2464 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: syntax-error */ } } static void ZRtype (TYPE_P *ZOt) { TYPE_P ZIt; switch (CURRENT_TERMINAL) { case lex_identifier: { string ZIi; /* BEGINNING OF EXTRACT: identifier */ { #line 222 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" ZIi = string_copy ( token_buff ); #line 2485 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF EXTRACT: identifier */ ADVANCE_LEXER; /* BEGINNING OF ACTION: find-type */ { #line 331 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIt) = find_type ( algebra, (ZIi) ); #line 2494 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: find-type */ } break; case lex_list: { TYPE_P ZIs; ADVANCE_LEXER; ZRtype (&ZIs); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } /* BEGINNING OF ACTION: list-type */ { #line 353 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIt) = compound_type ( type_list_tag, (ZIs), 0 ); #line 2514 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: list-type */ } break; case lex_ptr: { TYPE_P ZIs; ADVANCE_LEXER; ZRtype (&ZIs); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } /* BEGINNING OF ACTION: ptr-type */ { #line 342 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIt) = compound_type ( type_ptr_tag, (ZIs), 0 ); #line 2534 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: ptr-type */ } break; case lex_stack: { TYPE_P ZIs; ADVANCE_LEXER; ZRtype (&ZIs); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } /* BEGINNING OF ACTION: stack-type */ { #line 364 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIt) = compound_type ( type_stack_tag, (ZIs), 0 ); #line 2554 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: stack-type */ } break; case lex_vec: { TYPE_P ZIs; ADVANCE_LEXER; ZRtype (&ZIs); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } /* BEGINNING OF ACTION: vec-type */ { #line 375 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIt) = compound_type ( type_vec_tag, (ZIs), 0 ); #line 2574 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: vec-type */ } break; case lex_vec_Hptr: { TYPE_P ZIs; ADVANCE_LEXER; ZRtype (&ZIs); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } /* BEGINNING OF ACTION: vec-ptr-type */ { #line 386 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIt) = compound_type ( type_vec_ptr_tag, (ZIs), 0 ); #line 2594 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: vec-ptr-type */ } break; case 49: return; default: goto ZL1; } goto ZL0; ZL1:; { /* BEGINNING OF ACTION: error-type */ { #line 411 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" MSG_type_expected (); (ZIt) = find_type ( algebra, "ERROR!" ); #line 2613 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: error-type */ } ZL0:; *ZOt = ZIt; } static void ZRstructure_Hdefn (CLASS_ID_P ZIi, string ZIj, STRUCTURE_P *ZOp) { STRUCTURE_P ZIp; if ((CURRENT_TERMINAL) == 49) { return; } { COMPONENT_P_LIST ZIc; ZRcomponent_Hgroup (&ZIc); switch (CURRENT_TERMINAL) { case lex_semicolon: break; case 49: RESTORE_LEXER; goto ZL1; default: goto ZL1; } ADVANCE_LEXER; /* BEGINNING OF ACTION: make-structure */ { #line 770 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" TYPE r; TYPE_P t; string nm = (ZIj); STRUCTURE_P str = NULL_ptr ( STRUCTURE ); if ( nm ) { r = DEREF_type ( find_type ( algebra, nm ) ); if ( IS_type_structure ( r ) ) { str = DEREF_ptr ( type_structure_struc ( r ) ); (ZIc) = ADD_list ( DEREF_list ( str_defn ( str ) ), (ZIc), SIZE_ptr ( COMPONENT ) ); } else { MSG_cant_inherit_from (nm); } } (ZIp) = MAKE_ptr ( SIZE_str ); MAKE_str ( (ZIi), str, (ZIc), 0, (ZIp) ); t = MAKE_ptr ( SIZE_type ); MAKE_type_structure ( 0, (ZIp), r ); COPY_type ( t, r ); IGNORE register_type ( t ); #line 2667 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: make-structure */ } goto ZL0; ZL1:; SAVE_LEXER (49); return; ZL0:; *ZOp = ZIp; } static void ZRcomponent_Hlist (COMPONENT_P_LIST *ZOp) { COMPONENT_P_LIST ZIp; switch (CURRENT_TERMINAL) { case lex_identifier: case lex_list: case lex_ptr: case lex_stack: case lex_vec: case lex_vec_Hptr: { TYPE_P ZIt; COMPONENT_P_LIST ZIq; COMPONENT_P_LIST ZIr; ZRtype (&ZIt); ZRcomponent_Hdecl (ZIt, &ZIq); switch (CURRENT_TERMINAL) { case lex_semicolon: break; case 49: RESTORE_LEXER; goto ZL1; default: goto ZL1; } ADVANCE_LEXER; ZRcomponent_Hlist (&ZIr); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } /* BEGINNING OF ACTION: link-component */ { #line 747 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIp) = APPEND_list ( (ZIq), (ZIr) ); #line 2714 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: link-component */ } break; default: { /* BEGINNING OF ACTION: null-component */ { #line 710 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIp) = NULL_list ( COMPONENT_P ); #line 2726 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: null-component */ } break; case 49: return; } goto ZL0; ZL1:; SAVE_LEXER (49); return; ZL0:; *ZOp = ZIp; } static void ZRextended_Htype (TYPE_P *ZOt) { TYPE_P ZIt; switch (CURRENT_TERMINAL) { case lex_string: { string ZIs; /* BEGINNING OF EXTRACT: string */ { #line 246 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" ZIs = string_copy ( token_buff ); #line 2757 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF EXTRACT: string */ ADVANCE_LEXER; /* BEGINNING OF ACTION: quoted-type */ { #line 397 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" TYPE r; (ZIt) = MAKE_ptr ( SIZE_type ); MAKE_type_quote ( 0, (ZIs), r ); COPY_type ( (ZIt), r ); #line 2769 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: quoted-type */ } break; case lex_identifier: case lex_list: case lex_ptr: case lex_stack: case lex_vec: case lex_vec_Hptr: { ZRtype (&ZIt); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } } break; case 49: return; default: goto ZL1; } goto ZL0; ZL1:; { /* BEGINNING OF ACTION: error-type */ { #line 411 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" MSG_type_expected (); (ZIt) = find_type ( algebra, "ERROR!" ); #line 2798 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: error-type */ } ZL0:; *ZOt = ZIt; } static void ZRprimitive_Hlist (PRIMITIVE_P_LIST *ZOp) { PRIMITIVE_P_LIST ZIp; switch (CURRENT_TERMINAL) { case lex_identifier: case lex_colon: case lex_hash: { CLASS_ID_P ZIi; PRIMITIVE_P ZIq; PRIMITIVE_P_LIST ZIr; ZRclass_Hid (&ZIi); switch (CURRENT_TERMINAL) { case lex_colon: break; case 49: RESTORE_LEXER; goto ZL1; default: goto ZL1; } ADVANCE_LEXER; ZRprimitive_Hdefn (ZIi, &ZIq); ZRprimitive_Hlist (&ZIr); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } /* BEGINNING OF ACTION: join-primitive */ { #line 589 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" CONS_ptr ( (ZIq), (ZIr), (ZIp) ); #line 2840 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: join-primitive */ } break; default: { /* BEGINNING OF ACTION: null-primitive */ { #line 559 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIp) = NULL_list ( PRIMITIVE_P ); #line 2852 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: null-primitive */ } break; case 49: return; } goto ZL0; ZL1:; SAVE_LEXER (49); return; ZL0:; *ZOp = ZIp; } static void ZR209 (string *ZOj) { string ZIj; switch (CURRENT_TERMINAL) { case lex_identifier: { /* BEGINNING OF EXTRACT: identifier */ { #line 222 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" ZIj = string_copy ( token_buff ); #line 2881 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF EXTRACT: identifier */ ADVANCE_LEXER; switch (CURRENT_TERMINAL) { case lex_plus: break; default: goto ZL1; } ADVANCE_LEXER; } break; default: { /* BEGINNING OF ACTION: null-identifier */ { #line 320 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIj) = NULL; #line 2901 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: null-identifier */ } break; case 49: return; } goto ZL0; ZL1:; SAVE_LEXER (49); return; ZL0:; *ZOj = ZIj; } static void ZRargument_Hlist (ARGUMENT_P_LIST *ZOp) { ARGUMENT_P_LIST ZIp; if ((CURRENT_TERMINAL) == 49) { return; } { TYPE_P ZIt; ARGUMENT_P_LIST ZIq; ARGUMENT_P_LIST ZIr; ZRextended_Htype (&ZIt); ZRargument_Hdecl (ZIt, &ZIq); /* BEGINNING OF INLINE: 214 */ { switch (CURRENT_TERMINAL) { case lex_semicolon: { ADVANCE_LEXER; ZRargument_Hlist (&ZIr); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } } break; default: { /* BEGINNING OF ACTION: null-argument */ { #line 889 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIr) = NULL_list ( ARGUMENT_P ); #line 2952 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: null-argument */ } break; case 49: RESTORE_LEXER; goto ZL1; } } /* END OF INLINE: 214 */ /* BEGINNING OF ACTION: link-argument */ { #line 925 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIp) = APPEND_list ( (ZIq), (ZIr) ); #line 2968 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: link-argument */ } goto ZL0; ZL1:; SAVE_LEXER (49); return; ZL0:; *ZOp = ZIp; } static void ZRexpression (number *ZOn) { number ZIn; if ((CURRENT_TERMINAL) == 49) { return; } { ZRor_Hexp (&ZIn); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } } goto ZL0; ZL1:; SAVE_LEXER (49); return; ZL0:; *ZOn = ZIn; } static void ZRxor_Hexp (number *ZO245) { number ZI245; if ((CURRENT_TERMINAL) == 49) { return; } { number ZIn; ZRand_Hexp (&ZIn); ZR246 (ZIn, &ZI245); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } } goto ZL0; ZL1:; SAVE_LEXER (49); return; ZL0:; *ZO245 = ZI245; } static void ZRidentity_Hlist (IDENTITY_P_LIST *ZOp) { IDENTITY_P_LIST ZIp; switch (CURRENT_TERMINAL) { case lex_identifier: case lex_colon: case lex_hash: { CLASS_ID_P ZIi; IDENTITY_P ZIq; IDENTITY_P_LIST ZIr; ZRclass_Hid (&ZIi); switch (CURRENT_TERMINAL) { case lex_colon: break; case 49: RESTORE_LEXER; goto ZL1; default: goto ZL1; } ADVANCE_LEXER; ZRidentity_Hdefn (ZIi, &ZIq); ZRidentity_Hlist (&ZIr); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } /* BEGINNING OF ACTION: join-identity */ { #line 630 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" CONS_ptr ( (ZIq), (ZIr), (ZIp) ); #line 3063 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: join-identity */ } break; default: { /* BEGINNING OF ACTION: null-identity */ { #line 600 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIp) = NULL_list ( IDENTITY_P ); #line 3075 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: null-identity */ } break; case 49: return; } goto ZL0; ZL1:; SAVE_LEXER (49); return; ZL0:; *ZOp = ZIp; } static void ZRor_Hexp (number *ZO241) { number ZI241; if ((CURRENT_TERMINAL) == 49) { return; } { number ZIn; ZRxor_Hexp (&ZIn); ZR242 (ZIn, &ZI241); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } } goto ZL0; ZL1:; SAVE_LEXER (49); return; ZL0:; *ZO241 = ZI241; } static void ZRunion_Hsingle (UNION_P_LIST *ZOp) { UNION_P_LIST ZIp; if ((CURRENT_TERMINAL) == 49) { return; } { CLASS_ID_P ZIi; UNION_P ZIq; UNION_P_LIST ZIr; switch (CURRENT_TERMINAL) { case lex_union: break; default: goto ZL1; } ADVANCE_LEXER; ZRclass_Hid (&ZIi); ZRunion_Hdefn_Hnew (ZIi, &ZIq); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } /* BEGINNING OF ACTION: null-union */ { #line 971 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIr) = NULL_list ( UNION_P ); #line 3148 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: null-union */ /* BEGINNING OF ACTION: join-union */ { #line 1054 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" CONS_ptr ( (ZIq), (ZIr), (ZIp) ); #line 3156 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: join-union */ } goto ZL0; ZL1:; SAVE_LEXER (49); return; ZL0:; *ZOp = ZIp; } static void ZRstructure_Hlist (STRUCTURE_P_LIST *ZOp) { STRUCTURE_P_LIST ZIp; switch (CURRENT_TERMINAL) { case lex_identifier: case lex_colon: case lex_hash: { CLASS_ID_P ZIi; string ZIj; STRUCTURE_P ZIq; STRUCTURE_P_LIST ZIr; ZRclass_Hid (&ZIi); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } /* BEGINNING OF ACTION: null-identifier */ { #line 320 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIj) = NULL; #line 3191 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: null-identifier */ ZRstructure_Hdefn (ZIi, ZIj, &ZIq); ZRstructure_Hlist (&ZIr); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } /* BEGINNING OF ACTION: join-structure */ { #line 801 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" CONS_ptr ( (ZIq), (ZIr), (ZIp) ); #line 3205 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: join-structure */ } break; default: { /* BEGINNING OF ACTION: null-structure */ { #line 758 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIp) = NULL_list ( STRUCTURE_P ); #line 3217 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: null-structure */ } break; case 49: return; } goto ZL0; ZL1:; SAVE_LEXER (49); return; ZL0:; *ZOp = ZIp; } static void ZRunion_Hdefn_Hold (CLASS_ID_P ZIi, UNION_P *ZOp) { UNION_P ZIp; if ((CURRENT_TERMINAL) == 49) { return; } { COMPONENT_P_LIST ZIc; FIELD_P_LIST ZIf; MAP_P_LIST ZIm; string ZIj; /* BEGINNING OF INLINE: 219 */ { switch (CURRENT_TERMINAL) { case lex_open_Hbrace: { ZRcomponent_Hgroup (&ZIc); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } } break; default: { /* BEGINNING OF ACTION: null-component */ { #line 710 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIc) = NULL_list ( COMPONENT_P ); #line 3266 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: null-component */ } break; } } /* END OF INLINE: 219 */ /* BEGINNING OF INLINE: 220 */ { switch (CURRENT_TERMINAL) { case lex_identifier: case lex_hash: { ZRfield_Hlist (&ZIf); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } } break; default: { /* BEGINNING OF ACTION: null-field */ { #line 812 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIf) = NULL_list ( FIELD_P ); #line 3293 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: null-field */ } break; } } /* END OF INLINE: 220 */ switch (CURRENT_TERMINAL) { case lex_with: break; default: goto ZL1; } ADVANCE_LEXER; switch (CURRENT_TERMINAL) { case lex_maps: break; default: goto ZL1; } ADVANCE_LEXER; switch (CURRENT_TERMINAL) { case lex_open_Hsquare: break; default: goto ZL1; } ADVANCE_LEXER; ZRmap_Hlist (&ZIm); switch (CURRENT_TERMINAL) { case lex_close_Hsquare: break; case 49: RESTORE_LEXER; goto ZL1; default: goto ZL1; } ADVANCE_LEXER; /* BEGINNING OF ACTION: null-identifier */ { #line 320 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIj) = NULL; #line 3338 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: null-identifier */ /* BEGINNING OF ACTION: make-union */ { #line 983 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" TYPE r; TYPE_P t; int tag = 0; string nm = (ZIj); FIELD_P_LIST p = (ZIf); UNION_P un = NULL_ptr ( UNION ); /* Deal with overall inheritance */ if ( nm ) { r = DEREF_type ( find_type ( algebra, nm ) ); if ( IS_type_onion ( r ) ) { un = DEREF_ptr ( type_onion_un ( r ) ); (ZIc) = ADD_list ( DEREF_list ( un_s_defn ( un ) ), (ZIc), SIZE_ptr ( COMPONENT ) ); (ZIf) = ADD_list ( DEREF_list ( un_u_defn ( un ) ), p, SIZE_ptr ( FIELD ) ); (ZIm) = ADD_list ( DEREF_list ( un_map ( un ) ), (ZIm), SIZE_ptr ( MAP ) ); tag = DEREF_int ( un_no_fields ( un ) ); no_fields += tag; } else { MSG_cant_inherit_from (nm); } } /* Deal with inheritance of fields and field tags */ while ( !IS_NULL_list ( p ) ) { FIELD_P q = DEREF_ptr ( HEAD_list ( p ) ); FIELD_P b = DEREF_ptr ( fld_base ( q ) ); if ( !IS_NULL_ptr ( b ) ) { int ok = 0; FIELD_P_LIST pp = (ZIf); string n = DEREF_string ( fld_name ( b ) ); while ( !IS_NULL_list ( pp ) ) { FIELD_P qq = DEREF_ptr ( HEAD_list ( pp ) ); string nn = DEREF_string ( fld_name ( qq ) ); if ( streq ( n, nn ) ) { COMPONENT_P_LIST cc = DEREF_list ( fld_defn ( qq ) ); COMPONENT_P_LIST c = DEREF_list ( fld_defn ( q ) ); c = ADD_list ( cc, c, SIZE_ptr ( COMPONENT ) ); COPY_list ( fld_defn ( q ), c ); COPY_ptr ( fld_base ( q ), qq ); ok = 1; break; } pp = TAIL_list ( pp ); } if ( !ok ) MSG_cant_find_field (n); } COPY_int ( fld_tag ( q ), tag++ ); p = TAIL_list ( p ); } /* Construct output */ (ZIp) = MAKE_ptr ( SIZE_un ); MAKE_un ( (ZIi), un, (ZIc), (ZIf), (ZIm), no_fields, (ZIp) ); no_fields = 0; t = MAKE_ptr ( SIZE_type ); MAKE_type_onion ( 0, (ZIp), r ); COPY_type ( t, r ); IGNORE register_type ( t ); #line 3406 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: make-union */ } goto ZL0; ZL1:; SAVE_LEXER (49); return; ZL0:; *ZOp = ZIp; } static void ZRenum_Hsingle (ENUM_P_LIST *ZOp) { ENUM_P_LIST ZIp; if ((CURRENT_TERMINAL) == 49) { return; } { int ZIl; CLASS_ID_P ZIi; ECONST_P_LIST ZIf; ECONST_P_LIST ZIe; ENUM_P ZIq; ENUM_P_LIST ZIr; switch (CURRENT_TERMINAL) { case lex_enum: break; default: goto ZL1; } ADVANCE_LEXER; /* BEGINNING OF INLINE: 190 */ { switch (CURRENT_TERMINAL) { case lex_exclaim: { ADVANCE_LEXER; /* BEGINNING OF ACTION: zero */ { #line 260 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIl) = 0; #line 3451 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: zero */ } break; default: { /* BEGINNING OF ACTION: one */ { #line 261 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIl) = 1; #line 3462 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: one */ } break; } } /* END OF INLINE: 190 */ ZRclass_Hid (&ZIi); switch (CURRENT_TERMINAL) { case lex_equal: break; case 49: RESTORE_LEXER; goto ZL1; default: goto ZL1; } ADVANCE_LEXER; /* BEGINNING OF INLINE: 192 */ { switch (CURRENT_TERMINAL) { case lex_identifier: { string ZIj; /* BEGINNING OF EXTRACT: identifier */ { #line 222 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" ZIj = string_copy ( token_buff ); #line 3493 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF EXTRACT: identifier */ ADVANCE_LEXER; /* BEGINNING OF ACTION: get-enum */ { #line 653 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" string nm = (ZIj); TYPE r = DEREF_type ( find_type ( algebra, nm ) ); if ( IS_type_enumeration ( r ) ) { ENUM_P en = DEREF_ptr ( type_enumeration_en ( r ) ); (ZIf) = DEREF_list ( en_consts ( en ) ); enum_value = DEREF_number ( en_order ( en ) ); enum_max = enum_value; } else { MSG_cant_inherit_from (nm); (ZIf) = NULL_list ( ECONST_P ); } #line 3512 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: get-enum */ switch (CURRENT_TERMINAL) { case lex_plus: break; default: goto ZL1; } ADVANCE_LEXER; } break; default: { /* BEGINNING OF ACTION: null-econst */ { #line 510 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIf) = NULL_list ( ECONST_P ); #line 3531 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: null-econst */ } break; } } /* END OF INLINE: 192 */ 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 49: RESTORE_LEXER; goto ZL1; default: goto ZL1; } ADVANCE_LEXER; switch (CURRENT_TERMINAL) { case lex_semicolon: break; default: goto ZL1; } ADVANCE_LEXER; /* BEGINNING OF ACTION: make-enum */ { #line 675 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" TYPE r; TYPE_P t; (ZIe) = ADD_list ( (ZIf), (ZIe), SIZE_ptr ( ECONST ) ); (ZIq) = MAKE_ptr ( SIZE_en ); MAKE_en ( (ZIi), (ZIe), enum_max + 1, (ZIl), (ZIq) ); enum_value = 0; enum_max = 0; DESTROY_list ( enum_list, SIZE_ptr ( ECONST ) ); enum_list = NULL_list ( ECONST_P ); t = MAKE_ptr ( SIZE_type ); MAKE_type_enumeration ( 0, (ZIq), r ); COPY_type ( t, r ); IGNORE register_type ( t ); #line 3581 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: make-enum */ /* BEGINNING OF ACTION: null-enum */ { #line 641 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIr) = NULL_list ( ENUM_P ); #line 3589 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: null-enum */ /* BEGINNING OF ACTION: join-enum */ { #line 699 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" CONS_ptr ( (ZIq), (ZIr), (ZIp) ); #line 3597 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: join-enum */ } goto ZL0; ZL1:; SAVE_LEXER (49); return; ZL0:; *ZOp = ZIp; } static void ZRfield_Hid_Hlist (int ZIn, FIELD_P_LIST *ZOp) { FIELD_P_LIST ZIp; if ((CURRENT_TERMINAL) == 49) { return; } { string ZIi; COMPONENT_P_LIST ZIc; FIELD_P ZIq; FIELD_P_LIST ZIr; switch (CURRENT_TERMINAL) { case lex_identifier: /* BEGINNING OF EXTRACT: identifier */ { #line 222 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" ZIi = string_copy ( token_buff ); #line 3630 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF EXTRACT: identifier */ break; default: goto ZL1; } ADVANCE_LEXER; /* BEGINNING OF ACTION: null-component */ { #line 710 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIc) = NULL_list ( COMPONENT_P ); #line 3643 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: null-component */ /* BEGINNING OF ACTION: make-field */ { #line 824 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIq) = MAKE_ptr ( SIZE_fld ); MAKE_fld ( (ZIi), 0, (ZIn), 0, NULL_ptr ( FIELD ), (ZIc), (ZIq) ); no_fields++; #line 3653 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: make-field */ /* BEGINNING OF INLINE: 206 */ { switch (CURRENT_TERMINAL) { case lex_comma: { ADVANCE_LEXER; ZRfield_Hid_Hlist (ZIn, &ZIr); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } } break; default: { /* BEGINNING OF ACTION: null-field */ { #line 812 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIr) = NULL_list ( FIELD_P ); #line 3676 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: null-field */ } break; } } /* END OF INLINE: 206 */ /* BEGINNING OF ACTION: join-field */ { #line 837 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" CONS_ptr ( (ZIq), (ZIr), (ZIp) ); #line 3689 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: join-field */ } goto ZL0; ZL1:; SAVE_LEXER (49); return; ZL0:; *ZOp = ZIp; } static void ZR242 (number ZI240, number *ZO241) { number ZI241; ZL2_242:; switch (CURRENT_TERMINAL) { case lex_or: { number ZIp; number ZIn; ADVANCE_LEXER; ZRxor_Hexp (&ZIp); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } /* BEGINNING OF ACTION: exp-or */ { #line 499 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIn) = (ZI240) | (ZIp); #line 3724 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: exp-or */ /* BEGINNING OF INLINE: 242 */ ZI240 = ZIn; goto ZL2_242; /* END OF INLINE: 242 */ } /*UNREACHED*/ default: { ZI241 = ZI240; } break; case 49: return; } goto ZL0; ZL1:; SAVE_LEXER (49); return; ZL0:; *ZO241 = ZI241; } static void ZRfield_Hlist (FIELD_P_LIST *ZOp) { FIELD_P_LIST ZIp; if ((CURRENT_TERMINAL) == 49) { return; } { int ZIn; FIELD_P_LIST ZIq; string ZIj; COMPONENT_P_LIST ZIc; FIELD_P_LIST ZIr; /* BEGINNING OF INLINE: 208 */ { switch (CURRENT_TERMINAL) { case lex_hash: { ADVANCE_LEXER; ZR265 (&ZIn); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } } break; default: { /* BEGINNING OF ACTION: zero */ { #line 260 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIn) = 0; #line 3783 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: zero */ } break; } } /* END OF INLINE: 208 */ ZRfield_Hid_Hlist (ZIn, &ZIq); switch (CURRENT_TERMINAL) { case lex_arrow: break; case 49: RESTORE_LEXER; goto ZL1; default: goto ZL1; } ADVANCE_LEXER; ZR209 (&ZIj); ZRcomponent_Hgroup (&ZIc); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } /* BEGINNING OF ACTION: set-field-cmp */ { #line 860 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" int n = 0; FIELD_P_LIST p = (ZIq); FIELD_P b = NULL_ptr ( FIELD ); if ( (ZIj) ) { b = MAKE_ptr ( SIZE_fld ); MAKE_fld ( (ZIj), 0, 0, 0, NULL_ptr ( FIELD ), NULL_list ( COMPONENT_P ), b ); } while ( !IS_NULL_list ( p ) ) { FIELD_P q = DEREF_ptr ( HEAD_list ( p ) ); COPY_ptr ( fld_base ( q ), b ); COPY_list ( fld_defn ( q ), (ZIc) ); p = TAIL_list ( p ); n++; } if ( n >= 2 ) { FIELD_P q = DEREF_ptr ( HEAD_list ( (ZIq) ) ); COPY_int ( fld_set ( q ), n ); } #line 3831 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: set-field-cmp */ /* BEGINNING OF INLINE: 210 */ { switch (CURRENT_TERMINAL) { case lex_comma: { ADVANCE_LEXER; ZRfield_Hlist (&ZIr); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } } break; default: { /* BEGINNING OF ACTION: null-field */ { #line 812 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIr) = NULL_list ( FIELD_P ); #line 3854 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: null-field */ } break; } } /* END OF INLINE: 210 */ /* BEGINNING OF ACTION: link-field */ { #line 848 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIp) = APPEND_list ( (ZIq), (ZIr) ); #line 3867 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: link-field */ } goto ZL0; ZL1:; SAVE_LEXER (49); return; ZL0:; *ZOp = ZIp; } static void ZRunion_Hdefn_Hnew (CLASS_ID_P ZIi, UNION_P *ZOp) { UNION_P ZIp; if ((CURRENT_TERMINAL) == 49) { return; } { COMPONENT_P_LIST ZIc; string ZIj; FIELD_P_LIST ZIf; MAP_P_LIST ZIm; switch (CURRENT_TERMINAL) { case lex_equal: break; default: goto ZL1; } ADVANCE_LEXER; /* BEGINNING OF INLINE: 222 */ { switch (CURRENT_TERMINAL) { case lex_open_Hbrace: { ZRcomponent_Hgroup (&ZIc); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } /* BEGINNING OF ACTION: null-identifier */ { #line 320 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIj) = NULL; #line 3915 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: null-identifier */ } break; case lex_identifier: { /* BEGINNING OF ACTION: null-component */ { #line 710 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIc) = NULL_list ( COMPONENT_P ); #line 3927 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: null-component */ /* BEGINNING OF EXTRACT: identifier */ { #line 222 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" ZIj = string_copy ( token_buff ); #line 3935 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF EXTRACT: identifier */ ADVANCE_LEXER; } break; default: goto ZL1; } } /* END OF INLINE: 222 */ switch (CURRENT_TERMINAL) { case lex_plus: break; default: goto ZL1; } ADVANCE_LEXER; switch (CURRENT_TERMINAL) { case lex_open_Hbrace: break; default: goto ZL1; } ADVANCE_LEXER; ZRfield_Hlist (&ZIf); switch (CURRENT_TERMINAL) { case lex_close_Hbrace: break; case 49: RESTORE_LEXER; goto ZL1; default: goto ZL1; } ADVANCE_LEXER; /* BEGINNING OF INLINE: 223 */ { switch (CURRENT_TERMINAL) { case lex_colon: { ADVANCE_LEXER; switch (CURRENT_TERMINAL) { case lex_open_Hsquare: break; default: goto ZL1; } ADVANCE_LEXER; ZRmap_Hlist (&ZIm); switch (CURRENT_TERMINAL) { case lex_close_Hsquare: break; case 49: RESTORE_LEXER; goto ZL1; default: goto ZL1; } ADVANCE_LEXER; } break; default: { /* BEGINNING OF ACTION: null-map */ { #line 936 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIm) = NULL_list ( MAP_P ); #line 4004 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: null-map */ } break; } } /* END OF INLINE: 223 */ switch (CURRENT_TERMINAL) { case lex_semicolon: break; default: goto ZL1; } ADVANCE_LEXER; /* BEGINNING OF ACTION: make-union */ { #line 983 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" TYPE r; TYPE_P t; int tag = 0; string nm = (ZIj); FIELD_P_LIST p = (ZIf); UNION_P un = NULL_ptr ( UNION ); /* Deal with overall inheritance */ if ( nm ) { r = DEREF_type ( find_type ( algebra, nm ) ); if ( IS_type_onion ( r ) ) { un = DEREF_ptr ( type_onion_un ( r ) ); (ZIc) = ADD_list ( DEREF_list ( un_s_defn ( un ) ), (ZIc), SIZE_ptr ( COMPONENT ) ); (ZIf) = ADD_list ( DEREF_list ( un_u_defn ( un ) ), p, SIZE_ptr ( FIELD ) ); (ZIm) = ADD_list ( DEREF_list ( un_map ( un ) ), (ZIm), SIZE_ptr ( MAP ) ); tag = DEREF_int ( un_no_fields ( un ) ); no_fields += tag; } else { MSG_cant_inherit_from (nm); } } /* Deal with inheritance of fields and field tags */ while ( !IS_NULL_list ( p ) ) { FIELD_P q = DEREF_ptr ( HEAD_list ( p ) ); FIELD_P b = DEREF_ptr ( fld_base ( q ) ); if ( !IS_NULL_ptr ( b ) ) { int ok = 0; FIELD_P_LIST pp = (ZIf); string n = DEREF_string ( fld_name ( b ) ); while ( !IS_NULL_list ( pp ) ) { FIELD_P qq = DEREF_ptr ( HEAD_list ( pp ) ); string nn = DEREF_string ( fld_name ( qq ) ); if ( streq ( n, nn ) ) { COMPONENT_P_LIST cc = DEREF_list ( fld_defn ( qq ) ); COMPONENT_P_LIST c = DEREF_list ( fld_defn ( q ) ); c = ADD_list ( cc, c, SIZE_ptr ( COMPONENT ) ); COPY_list ( fld_defn ( q ), c ); COPY_ptr ( fld_base ( q ), qq ); ok = 1; break; } pp = TAIL_list ( pp ); } if ( !ok ) MSG_cant_find_field (n); } COPY_int ( fld_tag ( q ), tag++ ); p = TAIL_list ( p ); } /* Construct output */ (ZIp) = MAKE_ptr ( SIZE_un ); MAKE_un ( (ZIi), un, (ZIc), (ZIf), (ZIm), no_fields, (ZIp) ); no_fields = 0; t = MAKE_ptr ( SIZE_type ); MAKE_type_onion ( 0, (ZIp), r ); COPY_type ( t, r ); IGNORE register_type ( t ); #line 4084 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: make-union */ } goto ZL0; ZL1:; SAVE_LEXER (49); return; ZL0:; *ZOp = ZIp; } static void ZR246 (number ZI244, number *ZO245) { number ZI245; ZL2_246:; switch (CURRENT_TERMINAL) { case lex_xor: { number ZIp; number ZIn; ADVANCE_LEXER; ZRand_Hexp (&ZIp); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } /* BEGINNING OF ACTION: exp-xor */ { #line 495 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIn) = (ZI244) ^ (ZIp); #line 4119 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: exp-xor */ /* BEGINNING OF INLINE: 246 */ ZI244 = ZIn; goto ZL2_246; /* END OF INLINE: 246 */ } /*UNREACHED*/ default: { ZI245 = ZI244; } break; case 49: return; } goto ZL0; ZL1:; SAVE_LEXER (49); return; ZL0:; *ZO245 = ZI245; } static void ZR250 (number ZI248, number *ZO249) { number ZI249; ZL2_250:; switch (CURRENT_TERMINAL) { case lex_and: { number ZIp; number ZIn; ADVANCE_LEXER; ZRshift_Hexp (&ZIp); if ((CURRENT_TERMINAL) == 49) { RESTORE_LEXER; goto ZL1; } /* BEGINNING OF ACTION: exp-and */ { #line 491 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" (ZIn) = (ZI248) & (ZIp); #line 4167 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" } /* END OF ACTION: exp-and */ /* BEGINNING OF INLINE: 250 */ ZI248 = ZIn; goto ZL2_250; /* END OF INLINE: 250 */ } /*UNREACHED*/ default: { ZI249 = ZI248; } break; case 49: return; } goto ZL0; ZL1:; SAVE_LEXER (49); return; ZL0:; *ZO249 = ZI249; } /* BEGINNING OF TRAILER */ #line 1199 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/src/utilities/calculus/syntax.act" #line 4196 "/mnt/gmirror/ports/lang/TenDRA/work/tendra/obj//utilities/calculus/syntax.c" /* END OF FILE */