/* * Automatically generated from the files: * /mnt/gmirror/ports/lang/TenDRA/work/tendra/src/producers/cpp/../common/parse/psyntax.sid * and * /mnt/gmirror/ports/lang/TenDRA/work/tendra/src/producers/cpp/../common/parse/psyntax.act * by: * /mnt/gmirror/ports/lang/TenDRA/work/tendra/obj/utilities/sid/sid */ /* BEGINNING OF HEADER */ #define __SID_SPLIT /* * Crown Copyright (c) 1997, 1998 * * This TenDRA(r) Computer Program is subject to Copyright * owned by the United Kingdom Secretary of State for Defence * acting through the Defence Evaluation and Research Agency * (DERA). It is made available to Recipients with a * royalty-free licence for its use, reproduction, transfer * to other parties and amendment for any purpose not excluding * product development provided that any such use et cetera * shall be deemed to be acceptance of the following conditions:- * * (1) Its Recipients shall ensure that this Notice is * reproduced upon any copies or amended versions of it; * * (2) Any amended version of it shall be clearly marked to * show both the nature of and the organisation responsible * for the relevant amendment or amendments; * * (3) Its onward transfer from a recipient to another * party shall be deemed to be that party's acceptance of * these conditions; * * (4) DERA gives no warranty or assurance as to its * quality or suitability for any purpose and DERA accepts * no liability whatsoever in relation to any use to which * it may be put. */ #include "config.h" #include "producer.h" #include "c_types.h" #include "exp_ops.h" #include "hashid_ops.h" #include "id_ops.h" #include "tok_ops.h" #include "type_ops.h" #include "error.h" #include "catalog.h" #include "option.h" #include "access.h" #include "allocate.h" #include "assign.h" #include "basetype.h" #include "cast.h" #include "chktype.h" #include "class.h" #include "constant.h" #include "construct.h" #include "convert.h" #include "declare.h" #include "derive.h" #include "exception.h" #include "expression.h" #include "function.h" #include "hash.h" #include "identifier.h" #include "initialise.h" #include "inttype.h" #include "label.h" #include "lex.h" #include "literal.h" #include "member.h" #include "namespace.h" #include "parse.h" #include "pragma.h" #include "predict.h" #include "preproc.h" #include "printf.h" #include "redeclare.h" #include "rewrite.h" #include "statement.h" #include "symbols.h" #include "template.h" #include "tokdef.h" #include "token.h" #include "typeid.h" #include "variable.h" /* * COMPOUND TYPE ALIASES * * These are the aliases for the compound types used in the parser. */ typedef LIST (IDENTIFIER) SID_LIST_ID; /* * DECLARE FUNCTIONS * * The function declarations are included at this point so that the * type definitions are in scope. */ #include "psyntax.h" extern void parse_tok_type(TYPE *); extern void parse_mem_type(TYPE *); extern void parse_operator(IDENTIFIER *); /* * COMPILATION MODE * * The output of sid is automatically generated. Hence it is not * necessarily appropriate to apply the same level of checking to this * as to the rest of the program. These pragmas describe the relaxations * allowed for the sid output. */ #if FS_TENDRA #pragma TenDRA begin #pragma TenDRA variable analysis off #ifndef OLD_PRODUCER #pragma TenDRA unreachable code allow #endif #endif void XR554 (int *XO401) { int XI401; switch (CURRENT_TERMINAL) { case lex_asm: { ADVANCE_LEXER; { (XI401) = lex_asm; } } break; case lex_discard: { ADVANCE_LEXER; XR856 (&XI401); if ((CURRENT_TERMINAL) == 358) { RESTORE_LEXER; goto XL1; } } break; case lex_exhaustive: { ADVANCE_LEXER; { (XI401) = lex_exhaustive; } } break; case lex_fall: { ADVANCE_LEXER; switch (CURRENT_TERMINAL) { case lex_into: break; default: goto XL1; } ADVANCE_LEXER; switch (CURRENT_TERMINAL) { case lex_case: break; default: goto XL1; } ADVANCE_LEXER; { (XI401) = lex_fall; } } break; case lex_inline: { ADVANCE_LEXER; { (XI401) = lex_inline; } } break; case lex_operator: { ADVANCE_LEXER; { (XI401) = crt_lex_token; if ((XI401) >= FIRST_SYMBOL && (XI401) <= LAST_SYMBOL) crt_lex_token = lex_plus; } switch (CURRENT_TERMINAL) { case lex_plus: break; default: goto XL1; } ADVANCE_LEXER; } break; case lex_set: { ADVANCE_LEXER; XR857 (&XI401); if ((CURRENT_TERMINAL) == 358) { RESTORE_LEXER; goto XL1; } } break; case lex_type: { ADVANCE_LEXER; switch (CURRENT_TERMINAL) { case lex_representation: break; default: goto XL1; } ADVANCE_LEXER; { (XI401) = lex_representation; } } break; case lex_weak: { ADVANCE_LEXER; { (XI401) = lex_weak; } } break; case lex_keyword: { IDENTIFIER XI379; XR553 (&XI379); if ((CURRENT_TERMINAL) == 358) { RESTORE_LEXER; goto XL1; } { (XI401) = find_keyword ((XI379)); } } break; case 358: return; default: goto XL1; } goto XL0; XL1:; SAVE_LEXER (358); return; XL0:; *XO401 = XI401; } void XR451 (DECL_SPEC *XO413) { DECL_SPEC XI413; switch (CURRENT_TERMINAL) { case lex_private: { ADVANCE_LEXER; { (XI413) = dspec_private; } } break; case lex_protected: { ADVANCE_LEXER; { (XI413) = dspec_protected; } } break; case lex_public: { ADVANCE_LEXER; { (XI413) = dspec_public; } } break; default: { { (XI413) = dspec_public; } } break; case 358: return; } *XO413 = XI413; } void XR761 (int *XO712) { int XI712; if ((CURRENT_TERMINAL) == 358) { return; } { EXP XI452; switch (CURRENT_TERMINAL) { case lex_error: break; default: goto XL1; } ADVANCE_LEXER; { switch (CURRENT_TERMINAL) { case lex_string_Hexp: { { XI452 = crt_token->pp_data.exp; } ADVANCE_LEXER; } break; case lex_wstring_Hexp: { { XI452 = crt_token->pp_data.exp; } ADVANCE_LEXER; } break; default: goto XL1; } } { STRING s = DEREF_str (exp_string_lit_str ((XI452))); (XI712) = find_error_no (s, 0); if ((XI712) == -1) { report (preproc_loc, ERR_pragma_error_bad (s)); } } } goto XL0; XL1:; SAVE_LEXER (358); return; XL0:; *XO712 = XI712; } void XR486 (void) { if ((CURRENT_TERMINAL) == 358) { return; } { TYPE XI401; IDENTIFIER XI379; { in_token_decl = 1; } switch (CURRENT_TERMINAL) { case lex_member: break; default: goto XL1; } ADVANCE_LEXER; switch (CURRENT_TERMINAL) { case lex_definition: break; default: goto XL1; } ADVANCE_LEXER; { (XI401) = type_error; parse_tok_type (&(XI401)); object_type ((XI401), null_tag); } switch (CURRENT_TERMINAL) { case lex_colon: break; default: goto XL1; } ADVANCE_LEXER; { switch (CURRENT_TERMINAL) { case lex_identifier: { { XI379 = crt_token->pp_data.id.use; } ADVANCE_LEXER; } break; case lex_namespace_Hname: { { XI379 = crt_token->pp_data.id.use; } ADVANCE_LEXER; } break; case lex_statement_Hname: { { XI379 = crt_token->pp_data.id.use; } ADVANCE_LEXER; } break; case lex_type_Hname: { { XI379 = crt_token->pp_data.id.use; } ADVANCE_LEXER; } break; default: goto XL1; } } { in_token_decl = 0; } { if (define_mem_macro ((XI379), (XI401))) no_declarations++; } } return; XL1:; SAVE_LEXER (358); return; } void XR499 (int XI413) { XL2_499:; switch (CURRENT_TERMINAL) { case lex_identifier: case lex_type_Hname: case lex_namespace_Hname: case lex_statement_Hname: { IDENTIFIER XI379; { switch (CURRENT_TERMINAL) { case lex_identifier: { { XI379 = crt_token->pp_data.id.use; } ADVANCE_LEXER; } break; case lex_namespace_Hname: { { XI379 = crt_token->pp_data.id.use; } ADVANCE_LEXER; } break; case lex_statement_Hname: { { XI379 = crt_token->pp_data.id.use; } ADVANCE_LEXER; } break; case lex_type_Hname: { { XI379 = crt_token->pp_data.id.use; } ADVANCE_LEXER; } break; default: goto XL1; } } { preserve_id ((XI379), (XI413)); } goto XL2_499; } /*UNREACHED*/ case 358: return; default: break; } return; XL1:; SAVE_LEXER (358); return; } void XR745 (unsigned *XO449) { unsigned XI449; switch (CURRENT_TERMINAL) { case lex_as: { ADVANCE_LEXER; XR736 (&XI449); if ((CURRENT_TERMINAL) == 358) { RESTORE_LEXER; goto XL1; } } break; default: { { (XI449) = CAST_EXPLICIT; } } break; case 358: return; } goto XL0; XL1:; SAVE_LEXER (358); return; XL0:; *XO449 = XI449; } void XR511 (unsigned *XO381) { unsigned XI381; switch (CURRENT_TERMINAL) { case lex_allow: { ADVANCE_LEXER; { (XI381) = (unsigned) OPTION_OFF; } } break; case lex_disallow: { ADVANCE_LEXER; { (XI381) = (unsigned) OPTION_ON; } } break; case lex_off: { ADVANCE_LEXER; { (XI381) = (unsigned) OPTION_OFF; } } break; case lex_on: { ADVANCE_LEXER; { (XI381) = (unsigned) OPTION_ON; } } break; case lex_warning: { ADVANCE_LEXER; { (XI381) = (unsigned) OPTION_WARN; } } break; case 358: return; default: goto XL1; } goto XL0; XL1:; SAVE_LEXER (358); return; XL0:; *XO381 = XI381; } void XR417 (SID_LIST_ID *XO406) { SID_LIST_ID XI406; if ((CURRENT_TERMINAL) == 358) { return; } { IDENTIFIER XI379; SID_LIST_ID XI409; XR415 (&XI379); { switch (CURRENT_TERMINAL) { case lex_comma: { ADVANCE_LEXER; XR835 (&XI409); if ((CURRENT_TERMINAL) == 358) { RESTORE_LEXER; goto XL1; } } break; default: { { (XI409) = NULL_list (IDENTIFIER); } } break; case 358: RESTORE_LEXER; goto XL1; } } { CONS_id ((XI379), (XI409), (XI406)); } } goto XL0; XL1:; SAVE_LEXER (358); return; XL0:; *XO406 = XI406; } void XR555 (void) { switch (CURRENT_TERMINAL) { case lex_undef: { IDENTIFIER XI379; ADVANCE_LEXER; XR553 (&XI379); if ((CURRENT_TERMINAL) == 358) { RESTORE_LEXER; goto XL1; } { undef_keyword ((XI379)); } } break; case lex_keyword: { IDENTIFIER XI379; int XI401; XR553 (&XI379); switch (CURRENT_TERMINAL) { case lex_for: break; case 358: RESTORE_LEXER; goto XL1; default: goto XL1; } ADVANCE_LEXER; XR554 (&XI401); if ((CURRENT_TERMINAL) == 358) { RESTORE_LEXER; goto XL1; } { define_keyword ((XI379), (XI401)); } } break; case 358: return; default: goto XL1; } return; XL1:; SAVE_LEXER (358); return; } void XR501 (void) { XL2_501:; switch (CURRENT_TERMINAL) { case lex_identifier: case lex_type_Hname: case lex_namespace_Hname: case lex_statement_Hname: { IDENTIFIER XI379; { switch (CURRENT_TERMINAL) { case lex_identifier: { { XI379 = crt_token->pp_data.id.use; } ADVANCE_LEXER; } break; case lex_namespace_Hname: { { XI379 = crt_token->pp_data.id.use; } ADVANCE_LEXER; } break; case lex_statement_Hname: { { XI379 = crt_token->pp_data.id.use; } ADVANCE_LEXER; } break; case lex_type_Hname: { { XI379 = crt_token->pp_data.id.use; } ADVANCE_LEXER; } break; default: goto XL1; } } { preserve_id ((XI379), lex_suspend); } goto XL2_501; } /*UNREACHED*/ case 358: return; default: break; } return; XL1:; SAVE_LEXER (358); return; } void XR510 (unsigned *XO381) { unsigned XI381; switch (CURRENT_TERMINAL) { case lex_allow: { ADVANCE_LEXER; { (XI381) = (unsigned) OPTION_OFF; } } break; case lex_disallow: { ADVANCE_LEXER; { (XI381) = (unsigned) OPTION_ON; } } break; case lex_warning: { ADVANCE_LEXER; { (XI381) = (unsigned) OPTION_WARN; } } break; case 358: return; default: goto XL1; } goto XL0; XL1:; SAVE_LEXER (358); return; XL0:; *XO381 = XI381; } void XR450 (int *XO448, int *XO449) { int XI448; int XI449; switch (CURRENT_TERMINAL) { case lex_const: { ADVANCE_LEXER; { (XI448) = 0; } { (XI449) = 1; } } break; case lex_lvalue: { ADVANCE_LEXER; { (XI448) = 1; } { (XI449) = 0; } } break; case lex_rvalue: { ADVANCE_LEXER; { (XI448) = 0; } { (XI449) = 0; } } break; default: { { (XI448) = 0; } { (XI449) = 0; } } break; case 358: return; } *XO448 = XI448; *XO449 = XI449; } void XR757 (EXP *XO448) { EXP XI448; switch (CURRENT_TERMINAL) { case lex_as: { ADVANCE_LEXER; { switch (CURRENT_TERMINAL) { case lex_char_Hexp: { { XI448 = crt_token->pp_data.exp; } ADVANCE_LEXER; } break; case lex_wchar_Hexp: { { XI448 = crt_token->pp_data.exp; } ADVANCE_LEXER; } break; default: goto XL1; } } switch (CURRENT_TERMINAL) { case lex_allow: break; default: goto XL1; } ADVANCE_LEXER; } break; case lex_disallow: { ADVANCE_LEXER; { (XI448) = NULL_exp; } } break; case 358: return; default: goto XL1; } goto XL0; XL1:; SAVE_LEXER (358); return; XL0:; *XO448 = XI448; } void XR411 (SID_LIST_ID XI410, IDENTIFIER *XO379) { IDENTIFIER XI379; switch (CURRENT_TERMINAL) { case lex_exp_Hcap: { IDENTIFIER XI405; ADVANCE_LEXER; { switch (CURRENT_TERMINAL) { case lex_identifier: { { XI405 = crt_token->pp_data.id.use; } ADVANCE_LEXER; } break; case lex_namespace_Hname: { { XI405 = crt_token->pp_data.id.use; } ADVANCE_LEXER; } break; case lex_statement_Hname: { { XI405 = crt_token->pp_data.id.use; } ADVANCE_LEXER; } break; case lex_type_Hname: { { XI405 = crt_token->pp_data.id.use; } ADVANCE_LEXER; } break; default: goto XL1; } } { (XI379) = prog_tok_param ((XI405), NULL_type, tok_exp_tag, (XI410)); } } break; case lex_member_Hcap: { TYPE XI401; IDENTIFIER XI405; ADVANCE_LEXER; { (XI401) = type_error; parse_tok_type (&(XI401)); object_type ((XI401), null_tag); } switch (CURRENT_TERMINAL) { case lex_colon: break; default: goto XL1; } ADVANCE_LEXER; { switch (CURRENT_TERMINAL) { case lex_identifier: { { XI405 = crt_token->pp_data.id.use; } ADVANCE_LEXER; } break; case lex_namespace_Hname: { { XI405 = crt_token->pp_data.id.use; } ADVANCE_LEXER; } break; case lex_statement_Hname: { { XI405 = crt_token->pp_data.id.use; } ADVANCE_LEXER; } break; case lex_type_Hname: { { XI405 = crt_token->pp_data.id.use; } ADVANCE_LEXER; } break; default: goto XL1; } } { (XI379) = prog_tok_param ((XI405), (XI401), tok_member_tag, (XI410)); } } break; case lex_proc_Hcap: { IDENTIFIER XI405; ADVANCE_LEXER; { switch (CURRENT_TERMINAL) { case lex_identifier: { { XI405 = crt_token->pp_data.id.use; } ADVANCE_LEXER; } break; case lex_namespace_Hname: { { XI405 = crt_token->pp_data.id.use; } ADVANCE_LEXER; } break; case lex_statement_Hname: { { XI405 = crt_token->pp_data.id.use; } ADVANCE_LEXER; } break; case lex_type_Hname: { { XI405 = crt_token->pp_data.id.use; } ADVANCE_LEXER; } break; default: goto XL1; } } { (XI379) = prog_tok_param ((XI405), NULL_type, tok_proc_tag, (XI410)); } } break; case lex_stmt_Hcap: { IDENTIFIER XI405; ADVANCE_LEXER; { switch (CURRENT_TERMINAL) { case lex_identifier: { { XI405 = crt_token->pp_data.id.use; } ADVANCE_LEXER; } break; case lex_namespace_Hname: { { XI405 = crt_token->pp_data.id.use; } ADVANCE_LEXER; } break; case lex_statement_Hname: { { XI405 = crt_token->pp_data.id.use; } ADVANCE_LEXER; } break; case lex_type_Hname: { { XI405 = crt_token->pp_data.id.use; } ADVANCE_LEXER; } break; default: goto XL1; } } { (XI379) = prog_tok_param ((XI405), NULL_type, tok_stmt_tag, (XI410)); } } break; case lex_type_Hcap: { TYPE XI401; ADVANCE_LEXER; { (XI401) = type_error; parse_tok_type (&(XI401)); object_type ((XI401), null_tag); } { IDENTIFIER tid = DEREF_id (type_name ((XI401))); (XI379) = prog_tok_param (tid, (XI401), tok_type_tag, (XI410)); } } break; case 358: return; default: goto XL1; } goto XL0; XL1:; SAVE_LEXER (358); return; XL0:; *XO379 = XI379; } void XR400 (TOKEN *XO404) { TOKEN XI404; switch (CURRENT_TERMINAL) { case lex_arith_Hcap: { ADVANCE_LEXER; { (XI404) = make_type_token (btype_arith); } } break; case lex_class_Hcap: { ADVANCE_LEXER; { (XI404) = make_type_token (btype_lang); } } break; case lex_exp_Hcap: { int XI448; int XI449; TYPE XI401; ADVANCE_LEXER; XR450 (&XI448, &XI449); switch (CURRENT_TERMINAL) { case lex_colon: break; case 358: RESTORE_LEXER; goto XL1; default: goto XL1; } ADVANCE_LEXER; { (XI401) = type_error; parse_tok_type (&(XI401)); object_type ((XI401), null_tag); } switch (CURRENT_TERMINAL) { case lex_colon: break; default: goto XL1; } ADVANCE_LEXER; { (XI404) = make_exp_token ((XI401), (XI448), (XI449)); } } break; case lex_float_Hcap: { ADVANCE_LEXER; { (XI404) = make_type_token (btype_float); } } break; case lex_func_Hcap: { TYPE XI401; ADVANCE_LEXER; { (XI401) = type_error; parse_tok_type (&(XI401)); object_type ((XI401), id_function_tag); } switch (CURRENT_TERMINAL) { case lex_colon: break; default: goto XL1; } ADVANCE_LEXER; { (XI404) = make_func_token ((XI401)); } } break; case lex_int_Hcap: { ADVANCE_LEXER; { MAKE_tok_snat (NULL_nat, (XI404)); } } break; case lex_member_Hcap: { DECL_SPEC XI413; TYPE XI401; TYPE XI452; ADVANCE_LEXER; XR451 (&XI413); if ((CURRENT_TERMINAL) == 358) { RESTORE_LEXER; goto XL1; } { (XI401) = type_error; parse_mem_type (&(XI401)); object_type ((XI401), null_tag); } switch (CURRENT_TERMINAL) { case lex_colon: break; default: goto XL1; } ADVANCE_LEXER; { (XI452) = type_error; parse_tok_type (&(XI452)); object_type ((XI452), null_tag); } switch (CURRENT_TERMINAL) { case lex_colon: break; default: goto XL1; } ADVANCE_LEXER; { (XI404) = make_member_token ((XI401), (XI452), (XI413)); } } break; case lex_nat_Hcap: { ADVANCE_LEXER; { MAKE_tok_nat (NULL_nat, (XI404)); } } break; case lex_proc_Hcap: { ADVANCE_LEXER; XR834 (&XI404); if ((CURRENT_TERMINAL) == 358) { RESTORE_LEXER; goto XL1; } } break; case lex_scalar_Hcap: { ADVANCE_LEXER; { (XI404) = make_type_token (btype_scalar); } } break; case lex_stmt_Hcap: { ADVANCE_LEXER; { MAKE_tok_stmt (NULL_exp, (XI404)); } } break; case lex_struct_Hcap: { ADVANCE_LEXER; { (XI404) = make_type_token (btype_struct); } } break; case lex_type_Hcap: { ADVANCE_LEXER; { (XI404) = make_type_token (btype_none); } } break; case lex_union_Hcap: { ADVANCE_LEXER; { (XI404) = make_type_token (btype_union); } } break; case lex_variety_Hcap: { ADVANCE_LEXER; XR833 (&XI404); if ((CURRENT_TERMINAL) == 358) { RESTORE_LEXER; goto XL1; } } break; case 358: return; default: goto XL1; } goto XL0; XL1:; SAVE_LEXER (358); return; XL0:; *XO404 = XI404; } void XR512 (unsigned *XO381) { unsigned XI381; switch (CURRENT_TERMINAL) { case lex_warning: { ADVANCE_LEXER; { (XI381) = (unsigned) OPTION_WARN; } } break; default: { { (XI381) = (unsigned) OPTION_ON; } } break; case 358: return; } *XO381 = XI381; } /* BEGINNING OF TRAILER */ /* END OF FILE */