
/*  A Bison parser, made from asn1p_y.y
    by GNU Bison version 1.28  */

#define YYBISON 1  /* Identify Bison output.  */

#define yyparse asn1p_parse
#define yylex asn1p_lex
#define yyerror asn1p_error
#define yylval asn1p_lval
#define yychar asn1p_char
#define yydebug asn1p_debug
#define yynerrs asn1p_nerrs
#define	TOK_PPEQ	257
#define	TOK_opaque	258
#define	TOK_bstring	259
#define	TOK_cstring	260
#define	TOK_hstring	261
#define	TOK_identifier	262
#define	TOK_number	263
#define	TOK_number_negative	264
#define	TOK_typereference	265
#define	TOK_capitalreference	266
#define	TOK_typefieldreference	267
#define	TOK_valuefieldreference	268
#define	TOK_ABSENT	269
#define	TOK_ABSTRACT_SYNTAX	270
#define	TOK_ALL	271
#define	TOK_ANY	272
#define	TOK_APPLICATION	273
#define	TOK_AUTOMATIC	274
#define	TOK_BEGIN	275
#define	TOK_BIT	276
#define	TOK_BMPString	277
#define	TOK_BOOLEAN	278
#define	TOK_BY	279
#define	TOK_CHARACTER	280
#define	TOK_CHOICE	281
#define	TOK_CLASS	282
#define	TOK_COMPONENT	283
#define	TOK_COMPONENTS	284
#define	TOK_CONSTRAINED	285
#define	TOK_CONTAINING	286
#define	TOK_DEFAULT	287
#define	TOK_DEFINITIONS	288
#define	TOK_DEFINED	289
#define	TOK_EMBEDDED	290
#define	TOK_ENCODED	291
#define	TOK_ENCODING_CONTROL	292
#define	TOK_END	293
#define	TOK_ENUMERATED	294
#define	TOK_EXPLICIT	295
#define	TOK_EXPORTS	296
#define	TOK_EXTENSIBILITY	297
#define	TOK_EXTERNAL	298
#define	TOK_FALSE	299
#define	TOK_FROM	300
#define	TOK_GeneralizedTime	301
#define	TOK_GeneralString	302
#define	TOK_GraphicString	303
#define	TOK_IA5String	304
#define	TOK_IDENTIFIER	305
#define	TOK_IMPLICIT	306
#define	TOK_IMPLIED	307
#define	TOK_IMPORTS	308
#define	TOK_INCLUDES	309
#define	TOK_INSTANCE	310
#define	TOK_INSTRUCTIONS	311
#define	TOK_INTEGER	312
#define	TOK_ISO646String	313
#define	TOK_MAX	314
#define	TOK_MIN	315
#define	TOK_MINUS_INFINITY	316
#define	TOK_NULL	317
#define	TOK_NumericString	318
#define	TOK_OBJECT	319
#define	TOK_ObjectDescriptor	320
#define	TOK_OCTET	321
#define	TOK_OF	322
#define	TOK_OPTIONAL	323
#define	TOK_PATTERN	324
#define	TOK_PDV	325
#define	TOK_PLUS_INFINITY	326
#define	TOK_PRESENT	327
#define	TOK_PrintableString	328
#define	TOK_PRIVATE	329
#define	TOK_REAL	330
#define	TOK_RELATIVE_OID	331
#define	TOK_SEQUENCE	332
#define	TOK_SET	333
#define	TOK_SIZE	334
#define	TOK_STRING	335
#define	TOK_SYNTAX	336
#define	TOK_T61String	337
#define	TOK_TAGS	338
#define	TOK_TeletexString	339
#define	TOK_TRUE	340
#define	TOK_TYPE_IDENTIFIER	341
#define	TOK_UNIQUE	342
#define	TOK_UNIVERSAL	343
#define	TOK_UniversalString	344
#define	TOK_UTCTime	345
#define	TOK_UTF8String	346
#define	TOK_VideotexString	347
#define	TOK_VisibleString	348
#define	TOK_WITH	349
#define	TOK_EXCEPT	350
#define	TOK_INTERSECTION	351
#define	TOK_UNION	352
#define	TOK_TwoDots	353
#define	TOK_ThreeDots	354
#define	TOK_tag	355

#line 1 "asn1p_y.y"


#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <assert.h>

#include "asn1parser.h"

#define YYPARSE_PARAM	param
#define YYERROR_VERBOSE

int yylex(void);
int yyerror(const char *msg);
void asn1p_lexer_hack_push_opaque_state(void);
void asn1p_lexer_hack_enable_with_syntax(void);
void asn1p_lexer_hack_push_encoding_control(void);
#define	yylineno	asn1p_lineno
extern int asn1p_lineno;


static asn1p_value_t *
	_convert_bitstring2binary(char *str, int base);

#define	checkmem(ptr)	do {					\
		if(!(ptr))					\
		return yyerror("Memory failure");		\
	} while(0)

#define	CONSTRAINT_INSERT(root, constr_type, arg1, arg2) do {	\
		if(arg1->type != constr_type) {			\
			int __ret;				\
			root = asn1p_constraint_new(yylineno);	\
			checkmem(root);				\
			root->type = constr_type;		\
			__ret = asn1p_constraint_insert(root,	\
				arg1);				\
			checkmem(__ret == 0);			\
		} else {					\
			root = arg1;				\
		}						\
		if(arg2) {					\
			int __ret				\
			= asn1p_constraint_insert(root, arg2);	\
			checkmem(__ret == 0);			\
		}						\
	} while(0)


#line 58 "asn1p_y.y"
typedef union {
	asn1p_t			*a_grammar;
	asn1p_module_flags_e	 a_module_flags;
	asn1p_module_t		*a_module;
	asn1p_expr_type_e	 a_type;	/* ASN.1 Type */
	asn1p_expr_t		*a_expr;	/* Constructed collection */
	asn1p_constraint_t	*a_constr;	/* Constraint */
	enum asn1p_constraint_type_e	a_ctype;/* Constraint type */
	asn1p_xports_t		*a_xports;	/* IMports/EXports */
	asn1p_oid_t		*a_oid;		/* Object Identifier */
	asn1p_oid_arc_t		 a_oid_arc;	/* Single OID's arc */
	struct asn1p_type_tag_s	 a_tag;		/* A tag */
	asn1p_ref_t		*a_ref;		/* Reference to custom type */
	asn1p_wsyntx_t		*a_wsynt;	/* WITH SYNTAX contents */
	asn1p_wsyntx_chunk_t	*a_wchunk;	/* WITH SYNTAX chunk */
	struct asn1p_ref_component_s a_refcomp;	/* Component of a reference */
	asn1p_value_t		*a_value;	/* Number, DefinedValue, etc */
	struct asn1p_param_s	 a_parg;	/* A parameter argument */
	asn1p_paramlist_t	*a_plist;	/* A pargs list */
	enum asn1p_expr_marker_e a_marker;	/* OPTIONAL/DEFAULT */
	enum asn1p_constr_pres_e a_pres;	/* PRESENT/ABSENT/OPTIONAL */
	asn1_integer_t		 a_int;
	char	*tv_str;
	struct {
		char *buf;
		int len;
	}	tv_opaque;
	struct {
		char *name;
		struct asn1p_type_tag_s tag;
	} tv_nametag;
} YYSTYPE;
#include <stdio.h>

#ifndef __cplusplus
#ifndef __STDC__
#define const
#endif
#endif



#define	YYFINAL		395
#define	YYFLAG		-32768
#define	YYNTBASE	115

#define YYTRANSLATE(x) ((unsigned)(x) <= 355 ? yytranslate[x] : 213)

static const char yytranslate[] = {     0,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,   111,     2,     2,     2,     2,     2,     2,   106,
   107,     2,     2,   109,     2,   112,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,   110,   108,   113,
     2,     2,     2,   114,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,    97,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,   104,    99,   105,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,     2,     2,     2,     1,     3,     4,     5,     6,
     7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
    37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
    47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
    57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
    67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
    77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
    87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
    98,   100,   101,   102,   103
};

#if YYDEBUG != 0
static const short yyprhs[] = {     0,
     0,     2,     4,     7,    16,    17,    19,    23,    26,    28,
    31,    33,    38,    40,    41,    43,    45,    48,    51,    54,
    57,    60,    63,    64,    66,    68,    71,    73,    75,    77,
    79,    81,    82,    86,    88,    92,    95,    97,   100,   105,
   107,   111,   113,   115,   119,   123,   126,   128,   132,   134,
   136,   143,   145,   147,   148,   150,   152,   156,   158,   160,
   165,   169,   173,   180,   182,   186,   188,   192,   196,   198,
   202,   204,   206,   208,   212,   216,   220,   222,   224,   228,
   231,   233,   239,   240,   242,   244,   248,   251,   256,   261,
   262,   264,   265,   272,   274,   277,   279,   281,   283,   287,
   291,   295,   297,   299,   304,   309,   314,   319,   324,   326,
   331,   336,   338,   342,   344,   348,   352,   354,   358,   360,
   364,   366,   368,   370,   372,   377,   378,   382,   384,   386,
   388,   390,   392,   394,   398,   400,   403,   405,   407,   409,
   411,   414,   417,   419,   421,   424,   427,   429,   431,   433,
   435,   438,   440,   443,   445,   447,   449,   451,   453,   455,
   457,   459,   461,   463,   465,   467,   469,   471,   473,   475,
   477,   479,   481,   482,   484,   486,   491,   495,   500,   502,
   506,   512,   514,   518,   522,   526,   531,   535,   537,   541,
   545,   549,   553,   555,   557,   559,   562,   565,   569,   571,
   573,   575,   577,   579,   581,   583,   589,   591,   595,   597,
   601,   602,   604,   606,   608,   610,   612,   614,   618,   623,
   625,   629,   632,   636,   638,   642,   643,   645,   647,   650,
   652,   654,   655,   659,   662,   666,   668,   672,   674,   679,
   684,   686,   688,   690,   692,   693,   695,   697,   700,   703,
   705,   707,   709
};

static const short yyrhs[] = {   116,
     0,   117,     0,   116,   117,     0,   210,   118,    34,   122,
     3,    21,   125,    39,     0,     0,   119,     0,   104,   120,
   105,     0,   104,   105,     0,   121,     0,   120,   121,     0,
   212,     0,   212,   106,     9,   107,     0,     9,     0,     0,
   123,     0,   124,     0,   123,   124,     0,    41,    84,     0,
    52,    84,     0,    20,    84,     0,    43,    53,     0,    12,
    57,     0,     0,   126,     0,   127,     0,   126,   127,     0,
   129,     0,   134,     0,   142,     0,   168,     0,   137,     0,
     0,    38,    12,   128,     0,   176,     0,    54,   130,   108,
     0,    54,    46,     0,   131,     0,   130,   131,     0,   132,
    46,   210,   118,     0,   133,     0,   132,   109,   133,     0,
   210,     0,   212,     0,    42,   135,   108,     0,    42,    17,
   108,     0,    42,   108,     0,   136,     0,   135,   109,   136,
     0,   210,     0,   212,     0,   210,   138,     3,   104,   139,
   105,     0,   163,     0,   173,     0,     0,   140,     0,   141,
     0,   140,   109,   141,     0,   102,     0,   184,     0,   210,
     3,   208,    87,     0,   210,     3,   161,     0,   210,     3,
   151,     0,   210,   104,   143,   105,     3,   161,     0,   144,
     0,   143,   109,   144,     0,   210,     0,   210,   110,   212,
     0,   173,   110,   212,     0,   146,     0,   145,   109,   146,
     0,   161,     0,   212,     0,   148,     0,   147,   109,   148,
     0,   212,   161,   200,     0,    30,    68,   161,     0,   160,
     0,   150,     0,   149,   109,   150,     0,   212,   161,     0,
   160,     0,    28,   104,   153,   105,   155,     0,     0,    88,
     0,   154,     0,   153,   109,   154,     0,   166,   200,     0,
   166,   161,   200,   152,     0,   166,   166,   200,   152,     0,
     0,   156,     0,     0,    95,    82,   104,   157,   158,   105,
     0,   159,     0,   158,   159,     0,     4,     0,   166,     0,
   102,     0,   102,   111,   171,     0,   102,   111,   207,     0,
   208,   162,   180,     0,   175,     0,   176,     0,    27,   104,
   149,   105,     0,    78,   104,   147,   105,     0,    79,   104,
   147,   105,     0,    78,   180,    68,   162,     0,    79,   180,
    68,   162,     0,    18,     0,    18,    35,    25,   212,     0,
   210,   104,   145,   105,     0,   163,     0,    56,    68,   163,
     0,    11,     0,    11,   112,   210,     0,    11,   112,   212,
     0,   211,     0,   211,   112,   164,     0,   165,     0,   164,
   112,   165,     0,   167,     0,   167,     0,    13,     0,    14,
     0,   212,   138,     3,   169,     0,     0,   104,   170,   172,
     0,     5,     0,     7,     0,     6,     0,   207,     0,   171,
     0,   212,     0,   210,   112,   212,     0,     4,     0,   172,
     4,     0,    24,     0,    63,     0,    76,     0,   174,     0,
    67,    81,     0,    65,    51,     0,    77,     0,    44,     0,
    36,    71,     0,    26,    81,     0,    91,     0,    47,     0,
    58,     0,    40,     0,    22,    81,     0,   173,     0,   174,
   204,     0,    23,     0,    48,     0,    49,     0,    50,     0,
    59,     0,    64,     0,    74,     0,    83,     0,    85,     0,
    90,     0,    92,     0,    93,     0,    94,     0,    66,     0,
    99,     0,   100,     0,    97,     0,    98,     0,    96,     0,
     0,   181,     0,   182,     0,    80,   106,   183,   107,     0,
   106,   183,   107,     0,   182,   106,   183,   107,     0,   184,
     0,   184,   109,   102,     0,   184,   109,   102,   109,   184,
     0,   185,     0,   184,   177,   185,     0,   184,   178,   185,
     0,   185,   179,   185,     0,   187,   106,   183,   107,     0,
   106,   183,   107,     0,   188,     0,   188,   186,   188,     0,
    61,   186,   188,     0,   188,   186,    60,     0,    61,   186,
    60,     0,   194,     0,   189,     0,   101,     0,   101,   113,
     0,   113,   101,     0,   113,   101,   113,     0,    80,     0,
    46,     0,   207,     0,   212,     0,     6,     0,    45,     0,
    86,     0,    95,    30,   104,   190,   105,     0,   191,     0,
   190,   109,   191,     0,   102,     0,   212,   180,   192,     0,
     0,   193,     0,    73,     0,    15,     0,    69,     0,   195,
     0,   196,     0,   104,   210,   105,     0,   195,   104,   197,
   105,     0,   198,     0,   197,   109,   198,     0,   114,   199,
     0,   114,   112,   199,     0,   212,     0,   199,   112,   212,
     0,     0,   201,     0,    69,     0,    33,   202,     0,   188,
     0,   173,     0,     0,   104,   203,   172,     0,   104,   105,
     0,   104,   205,   105,     0,   206,     0,   205,   109,   206,
     0,   212,     0,   212,   106,   207,   107,     0,   212,   106,
   171,   107,     0,   207,     0,   102,     0,     9,     0,    10,
     0,     0,   209,     0,   103,     0,   103,    52,     0,   103,
    41,     0,    11,     0,    12,     0,    12,     0,     8,     0
};

#endif

#if YYDEBUG != 0
static const short yyrline[] = { 0,
   299,   305,   311,   327,   352,   354,   357,   361,   366,   373,
   381,   386,   390,   399,   401,   409,   413,   421,   425,   428,
   431,   435,   455,   457,   465,   469,   501,   505,   514,   521,
   534,   541,   543,   555,   568,   575,   580,   586,   592,   601,
   607,   613,   620,   628,   632,   635,   642,   648,   654,   661,
   670,   680,   688,   696,   698,   708,   711,   715,   718,   730,
   742,   748,   764,   773,   783,   793,   798,   805,   815,   821,
   827,   831,   843,   849,   855,   862,   869,   874,   880,   886,
   892,   897,   907,   909,   912,   920,   926,   935,   941,   958,
   960,   965,   969,   974,   979,   985,   989,  1000,  1009,  1018,
  1029,  1051,  1055,  1061,  1067,  1073,  1079,  1087,  1095,  1101,
  1115,  1139,  1146,  1160,  1169,  1179,  1189,  1197,  1218,  1227,
  1236,  1237,  1239,  1246,  1258,  1268,  1270,  1275,  1279,  1283,
  1287,  1290,  1295,  1307,  1323,  1334,  1348,  1350,  1351,  1352,
  1353,  1354,  1355,  1356,  1357,  1358,  1359,  1360,  1366,  1368,
  1369,  1372,  1379,  1391,  1393,  1397,  1401,  1402,  1403,  1404,
  1405,  1409,  1410,  1411,  1412,  1416,  1417,  1424,  1424,  1425,
  1425,  1426,  1428,  1430,  1435,  1439,  1448,  1452,  1457,  1461,
  1467,  1477,  1481,  1484,  1487,  1492,  1501,  1509,  1515,  1522,
  1530,  1538,  1547,  1550,  1555,  1557,  1558,  1559,  1562,  1566,
  1571,  1575,  1586,  1591,  1596,  1603,  1609,  1613,  1618,  1624,
  1636,  1638,  1641,  1645,  1648,  1653,  1657,  1665,  1680,  1686,
  1693,  1706,  1718,  1733,  1737,  1754,  1756,  1759,  1763,  1769,
  1772,  1774,  1774,  1794,  1799,  1804,  1810,  1816,  1824,  1832,
  1840,  1847,  1857,  1862,  1892,  1894,  1897,  1902,  1906,  1912,
  1917,  1924,  1931
};
#endif


#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)

static const char * const yytname[] = {   "$","error","$undefined.","TOK_PPEQ",
"TOK_opaque","TOK_bstring","TOK_cstring","TOK_hstring","TOK_identifier","TOK_number",
"TOK_number_negative","TOK_typereference","TOK_capitalreference","TOK_typefieldreference",
"TOK_valuefieldreference","TOK_ABSENT","TOK_ABSTRACT_SYNTAX","TOK_ALL","TOK_ANY",
"TOK_APPLICATION","TOK_AUTOMATIC","TOK_BEGIN","TOK_BIT","TOK_BMPString","TOK_BOOLEAN",
"TOK_BY","TOK_CHARACTER","TOK_CHOICE","TOK_CLASS","TOK_COMPONENT","TOK_COMPONENTS",
"TOK_CONSTRAINED","TOK_CONTAINING","TOK_DEFAULT","TOK_DEFINITIONS","TOK_DEFINED",
"TOK_EMBEDDED","TOK_ENCODED","TOK_ENCODING_CONTROL","TOK_END","TOK_ENUMERATED",
"TOK_EXPLICIT","TOK_EXPORTS","TOK_EXTENSIBILITY","TOK_EXTERNAL","TOK_FALSE",
"TOK_FROM","TOK_GeneralizedTime","TOK_GeneralString","TOK_GraphicString","TOK_IA5String",
"TOK_IDENTIFIER","TOK_IMPLICIT","TOK_IMPLIED","TOK_IMPORTS","TOK_INCLUDES","TOK_INSTANCE",
"TOK_INSTRUCTIONS","TOK_INTEGER","TOK_ISO646String","TOK_MAX","TOK_MIN","TOK_MINUS_INFINITY",
"TOK_NULL","TOK_NumericString","TOK_OBJECT","TOK_ObjectDescriptor","TOK_OCTET",
"TOK_OF","TOK_OPTIONAL","TOK_PATTERN","TOK_PDV","TOK_PLUS_INFINITY","TOK_PRESENT",
"TOK_PrintableString","TOK_PRIVATE","TOK_REAL","TOK_RELATIVE_OID","TOK_SEQUENCE",
"TOK_SET","TOK_SIZE","TOK_STRING","TOK_SYNTAX","TOK_T61String","TOK_TAGS","TOK_TeletexString",
"TOK_TRUE","TOK_TYPE_IDENTIFIER","TOK_UNIQUE","TOK_UNIVERSAL","TOK_UniversalString",
"TOK_UTCTime","TOK_UTF8String","TOK_VideotexString","TOK_VisibleString","TOK_WITH",
"TOK_EXCEPT","'^'","TOK_INTERSECTION","'|'","TOK_UNION","TOK_TwoDots","TOK_ThreeDots",
"TOK_tag","'{'","'}'","'('","')'","';'","','","':'","'!'","'.'","'<'","'@'",
"ParsedGrammar","ModuleList","ModuleSpecification","optObjectIdentifier","ObjectIdentifier",
"ObjectIdentifierBody","ObjectIdentifierElement","optModuleSpecificationFlags",
"ModuleSpecificationFlags","ModuleSpecificationFlag","optModuleSpecificationBody",
"ModuleSpecificationBody","ModuleSpecificationElement","@1","ImportsDefinition",
"ImportsBundleSet","ImportsBundle","ImportsList","ImportsElement","ExportsDefinition",
"ExportsBody","ExportsElement","ValueSetDefinition","DefinedTypeRef","optValueSetBody",
"ValueSetBody","ValueSetElement","DataTypeReference","ParameterArgumentList",
"ParameterArgumentName","ActualParameterList","ActualParameter","ComponentTypeLists",
"ComponentType","AlternativeTypeLists","AlternativeType","ClassDeclaration",
"optUnique","ClassFieldList","ClassField","optWithSyntax","WithSyntax","@2",
"WithSyntaxFormat","WithSyntaxFormatToken","ExtensionAndException","Type","TypeDeclaration",
"ComplexTypeReference","ComplexTypeReferenceAmpList","ComplexTypeReferenceElement",
"ClassFieldIdentifier","ClassFieldName","ValueDefinition","InlineOrDefinedValue",
"@3","DefinedValue","Opaque","BasicTypeId","BasicTypeId_UniverationCompatible",
"BasicType","BasicString","Union","Intersection","Except","optConstraints","Constraints",
"SetOfConstraints","ElementSetSpecs","ElementSetSpec","ConstraintSubtypeElement",
"ConstraintRangeSpec","ConstraintSpec","ConstraintValue","WithComponents","WithComponentsList",
"WithComponentsElement","optPresenceConstraint","PresenceConstraint","TableConstraint",
"SimpleTableConstraint","ComponentRelationConstraint","AtNotationList","AtNotationElement",
"ComponentIdList","optMarker","Marker","DefaultValue","@4","UniverationDefinition",
"UniverationList","UniverationElement","SignedNumber","optTag","Tag","TypeRefName",
"ObjectClassReference","Identifier", NULL
};
#endif

static const short yyr1[] = {     0,
   115,   116,   116,   117,   118,   118,   119,   119,   120,   120,
   121,   121,   121,   122,   122,   123,   123,   124,   124,   124,
   124,   124,   125,   125,   126,   126,   127,   127,   127,   127,
   127,   128,   127,   127,   129,   129,   130,   130,   131,   132,
   132,   133,   133,   134,   134,   134,   135,   135,   136,   136,
   137,   138,   138,   139,   139,   140,   140,   141,   141,   142,
   142,   142,   142,   143,   143,   144,   144,   144,   145,   145,
   146,   146,   147,   147,   148,   148,   148,   149,   149,   150,
   150,   151,   152,   152,   153,   153,   154,   154,   154,   155,
   155,   157,   156,   158,   158,   159,   159,   160,   160,   160,
   161,   162,   162,   162,   162,   162,   162,   162,   162,   162,
   162,   162,   162,   163,   163,   163,   163,   163,   164,   164,
   165,   166,   167,   167,   168,   170,   169,   169,   169,   169,
   169,   169,   171,   171,   172,   172,   173,   173,   173,   173,
   173,   173,   173,   173,   173,   173,   173,   173,   174,   174,
   174,   175,   175,   176,   176,   176,   176,   176,   176,   176,
   176,   176,   176,   176,   176,   176,   176,   177,   177,   178,
   178,   179,   180,   180,   181,   181,   182,   182,   183,   183,
   183,   184,   184,   184,   184,   185,   185,   185,   185,   185,
   185,   185,   185,   185,   186,   186,   186,   186,   187,   187,
   188,   188,   188,   188,   188,   189,   190,   190,   191,   191,
   192,   192,   193,   193,   193,   194,   194,   195,   196,   197,
   197,   198,   198,   199,   199,   200,   200,   201,   201,   202,
   202,   203,   202,   204,   204,   205,   205,   206,   206,   206,
   206,   206,   207,   207,   208,   208,   209,   209,   209,   210,
   210,   211,   212
};

static const short yyr2[] = {     0,
     1,     1,     2,     8,     0,     1,     3,     2,     1,     2,
     1,     4,     1,     0,     1,     1,     2,     2,     2,     2,
     2,     2,     0,     1,     1,     2,     1,     1,     1,     1,
     1,     0,     3,     1,     3,     2,     1,     2,     4,     1,
     3,     1,     1,     3,     3,     2,     1,     3,     1,     1,
     6,     1,     1,     0,     1,     1,     3,     1,     1,     4,
     3,     3,     6,     1,     3,     1,     3,     3,     1,     3,
     1,     1,     1,     3,     3,     3,     1,     1,     3,     2,
     1,     5,     0,     1,     1,     3,     2,     4,     4,     0,
     1,     0,     6,     1,     2,     1,     1,     1,     3,     3,
     3,     1,     1,     4,     4,     4,     4,     4,     1,     4,
     4,     1,     3,     1,     3,     3,     1,     3,     1,     3,
     1,     1,     1,     1,     4,     0,     3,     1,     1,     1,
     1,     1,     1,     3,     1,     2,     1,     1,     1,     1,
     2,     2,     1,     1,     2,     2,     1,     1,     1,     1,
     2,     1,     2,     1,     1,     1,     1,     1,     1,     1,
     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
     1,     1,     0,     1,     1,     4,     3,     4,     1,     3,
     5,     1,     3,     3,     3,     4,     3,     1,     3,     3,
     3,     3,     1,     1,     1,     2,     2,     3,     1,     1,
     1,     1,     1,     1,     1,     5,     1,     3,     1,     3,
     0,     1,     1,     1,     1,     1,     1,     3,     4,     1,
     3,     2,     3,     1,     3,     0,     1,     1,     2,     1,
     1,     0,     3,     2,     3,     1,     3,     1,     4,     4,
     1,     1,     1,     1,     0,     1,     1,     2,     2,     1,
     1,     1,     1
};

static const short yydefact[] = {     0,
   250,   251,     1,     2,     5,     3,     0,     0,     6,   253,
    13,     8,     0,     9,    11,    14,     7,    10,     0,     0,
     0,     0,     0,     0,     0,    15,    16,     0,    22,    20,
    18,    21,    19,     0,    17,    12,    23,   154,     0,     0,
   155,   156,   157,     0,   158,   159,   167,   160,   161,   162,
   163,   164,   165,   166,     0,    24,    25,    27,    28,    31,
    29,    30,    34,     0,     0,    32,     0,    46,     0,    47,
    49,    50,    36,     0,    37,     0,    40,    42,    43,     4,
    26,   245,   114,   252,     0,   137,     0,     0,   150,   144,
   148,   149,   138,     0,     0,   139,   143,   147,     0,     0,
    52,    53,   140,   117,     0,    33,    45,    44,     0,    35,
    38,     0,     0,     0,   247,    62,    61,     0,   246,     0,
   151,   146,   145,   142,   141,     0,    64,     0,    66,     0,
     0,     0,    48,     5,    41,     0,   249,   248,   114,   252,
   109,     0,     0,   173,   173,    60,   173,   112,   152,   140,
   102,   103,     0,   115,   116,     0,     0,     0,     0,    54,
   123,   124,   118,   119,   121,   128,   130,   129,   243,   244,
   126,   125,   132,   131,     0,   133,    39,     0,    85,   245,
   122,     0,     0,     0,     0,     0,     0,     0,   174,   175,
     0,     0,   101,     0,   153,   245,   245,    65,    68,    67,
   203,   204,   200,     0,   199,   205,     0,    58,     0,     0,
     0,    55,    56,    59,   182,     0,   188,   194,   193,   216,
   217,   201,   202,     0,     0,     0,    90,     0,     0,   228,
   226,   226,    87,   227,     0,     0,    98,     0,    78,    81,
   245,   113,     0,     0,     0,    73,    77,   245,     0,   179,
     0,     0,     0,     0,   242,   234,     0,   236,   241,   238,
     0,    69,    71,    72,    63,   195,     0,     0,     0,     0,
     0,    51,     0,   170,   171,   168,   169,     0,     0,   172,
     0,     0,     0,     0,   120,   135,   127,   134,     0,    82,
    91,    86,   232,   231,   230,   229,    83,    83,   110,     0,
   104,     0,    80,     0,   245,   105,     0,   226,   177,     0,
   107,     0,   106,   108,   235,     0,     0,   111,   245,   196,
   197,   192,   190,     0,   218,   187,    57,   183,   184,   185,
     0,   191,   189,     0,     0,   220,   136,     0,     0,    84,
    88,    89,    99,   100,    79,   176,    76,    74,    75,   180,
   178,   237,     0,     0,    70,   198,   209,     0,   207,   173,
   186,     0,   222,   224,   219,     0,    92,   233,     0,   240,
   239,   206,     0,   211,   223,     0,   221,     0,   181,   208,
   214,   215,   213,   210,   212,   225,    96,     0,    94,    97,
    93,    95,     0,     0,     0
};

static const short yydefgoto[] = {   393,
     3,     4,     8,     9,    13,    14,    25,    26,    27,    55,
    56,    57,   106,    58,    74,    75,    76,    77,    59,    69,
    70,    60,   100,   211,   212,   213,    61,   126,   127,   261,
   262,   245,   246,   238,   239,   116,   341,   178,   179,   290,
   291,   378,   388,   389,   247,   263,   147,   148,   163,   164,
   180,   181,    62,   172,   225,   173,   287,   149,   103,   151,
   152,   278,   279,   281,   188,   189,   190,   249,   250,   215,
   268,   216,   217,   218,   358,   359,   384,   385,   219,   220,
   221,   335,   336,   363,   233,   234,   296,   339,   195,   257,
   258,   222,   235,   119,   153,   104,   223
};

static const short yypact[] = {    29,
-32768,-32768,    29,-32768,   -79,-32768,    18,    22,-32768,-32768,
-32768,-32768,    42,-32768,    34,   236,-32768,-32768,    99,    71,
   115,   118,   102,   121,   190,   236,-32768,   105,-32768,-32768,
-32768,-32768,-32768,   224,-32768,-32768,   329,-32768,   235,    11,
-32768,-32768,-32768,   192,-32768,-32768,-32768,-32768,-32768,-32768,
-32768,-32768,-32768,-32768,   227,   329,-32768,-32768,-32768,-32768,
-32768,-32768,-32768,    33,   238,-32768,   173,-32768,    54,-32768,
-32768,-32768,-32768,    23,-32768,   -17,-32768,-32768,-32768,-32768,
-32768,   -10,   174,-32768,   210,-32768,   211,   223,-32768,-32768,
-32768,-32768,-32768,   247,   216,-32768,-32768,-32768,   543,   296,
-32768,-32768,-32768,   199,   310,-32768,-32768,-32768,   246,-32768,
-32768,    29,   246,   212,   176,-32768,-32768,   406,-32768,   246,
-32768,-32768,-32768,-32768,-32768,   109,-32768,   208,   213,   217,
   155,    78,-32768,   -79,-32768,   155,-32768,-32768,    -9,   221,
   291,   231,   260,   103,   128,-32768,   117,-32768,-32768,   232,
-32768,-32768,   240,-32768,-32768,   336,   543,   342,   342,   135,
-32768,-32768,   241,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
-32768,-32768,-32768,-32768,   242,-32768,-32768,   150,-32768,    61,
-32768,   326,    16,   278,   251,    40,   140,   292,-32768,   253,
    40,   294,-32768,    52,-32768,    24,   261,-32768,-32768,-32768,
-32768,-32768,-32768,    25,-32768,-32768,   338,-32768,    29,   140,
   265,   263,-32768,   233,   277,   270,    25,-32768,-32768,   276,
-32768,-32768,-32768,   155,   377,   342,   287,   155,   298,-32768,
    35,    35,-32768,-32768,   483,   342,   274,   156,-32768,-32768,
   261,-32768,   140,   318,   158,-32768,-32768,   261,   280,   249,
   483,   140,   164,   483,-32768,-32768,   166,-32768,-32768,   284,
   167,-32768,-32768,-32768,-32768,   279,   290,   165,   297,   289,
   299,-32768,   135,-32768,-32768,-32768,-32768,   140,   140,-32768,
   140,   140,   182,   293,-32768,-32768,   400,-32768,   323,-32768,
-32768,-32768,-32768,-32768,-32768,-32768,   320,   320,-32768,   388,
-32768,    16,-32768,   302,   261,-32768,    40,    35,-32768,   308,
-32768,   304,-32768,-32768,-32768,    56,   388,-32768,    24,-32768,
   300,-32768,-32768,    30,-32768,-32768,-32768,-32768,-32768,-32768,
   309,-32768,-32768,     9,   175,-32768,-32768,   311,   377,-32768,
-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   316,
-32768,-32768,   313,   319,-32768,-32768,-32768,   178,-32768,   117,
-32768,   342,   315,-32768,-32768,   293,-32768,   400,   140,-32768,
-32768,-32768,    30,    92,   315,   342,-32768,   239,   233,-32768,
-32768,-32768,-32768,-32768,-32768,-32768,-32768,     7,-32768,-32768,
-32768,-32768,   431,   434,-32768
};

static const short yypgoto[] = {-32768,
-32768,   432,   303,-32768,-32768,   423,-32768,-32768,   412,-32768,
-32768,   383,-32768,-32768,-32768,   366,-32768,   328,-32768,-32768,
   334,-32768,   379,-32768,-32768,   172,-32768,-32768,   295,-32768,
   129,   256,   142,-32768,   149,-32768,   159,-32768,   230,-32768,
-32768,-32768,-32768,    72,  -169,   -81,   -18,   -49,-32768,   237,
  -172,   -68,-32768,-32768,-32768,  -246,   120,   -52,  -115,-32768,
   116,-32768,-32768,-32768,  -138,-32768,-32768,   -12,  -156,  -200,
   250,-32768,  -186,-32768,-32768,    90,-32768,-32768,-32768,-32768,
-32768,-32768,   100,   106,  -179,-32768,-32768,-32768,-32768,-32768,
   160,  -122,   392,-32768,     2,-32768,    -7
};


#define	YYLAST		634


static const short yytable[] = {    15,
   117,     5,   150,   214,     5,    15,   192,   232,   193,   174,
   387,   102,   102,   240,   101,   101,    10,   114,    10,   161,
   162,     1,     2,    10,     7,    10,    11,    67,   112,    65,
    10,    10,    72,     1,     2,    82,    79,    10,    64,     1,
     2,    71,   295,    83,    84,    78,   128,    10,    65,    10,
    11,   297,   298,   343,    85,    16,    86,    64,    87,    10,
   169,   170,   165,    10,   169,   170,    79,   229,    88,   244,
   353,   259,    89,   161,   162,    78,    90,   328,   329,    91,
   330,   323,   166,   167,   168,    10,   169,   170,     1,     2,
    92,   113,   115,   229,  -250,    93,   333,    94,   231,    95,
   129,    72,   120,   230,   128,    79,   381,    28,    96,    97,
    71,   391,   155,   134,    78,   265,   214,   237,    68,   150,
   362,   154,    12,    98,   176,   266,   115,    29,   349,   230,
   110,   357,   240,   175,   242,   150,    99,   267,   150,    19,
   201,   237,    10,   169,   170,   201,    17,    10,   169,   170,
   199,   200,    63,   255,    32,   165,   256,   255,   129,   303,
   382,   108,   109,   115,   383,  -226,   308,   161,   162,  -226,
   201,    63,    10,   169,   170,   241,   294,   344,   248,   202,
   203,   171,   185,   248,   202,   203,   260,   201,   264,    10,
   169,   170,    34,   259,   354,   204,   185,   271,    30,    10,
   204,    31,     1,     2,    33,   390,   186,   185,   187,   202,
   270,    36,   379,   156,   205,   390,   137,   157,   288,   205,
   206,   374,   187,   347,   322,   206,   202,   138,   299,   207,
   304,   191,   311,   187,   207,   314,   208,    73,   209,   312,
   210,   332,   387,   209,    37,   210,    66,    20,    83,    84,
   206,   161,   162,    10,   227,    21,     1,     2,   228,    85,
   301,    86,   306,    87,   302,    80,   307,   206,   313,   331,
   315,   318,   307,    88,   316,   319,    22,    89,    23,   365,
   107,    90,   372,   366,    91,   120,   373,    24,    83,    84,
   121,   122,   176,   123,   241,    92,   125,   124,   130,   248,
    93,   175,    94,   201,    95,    10,   169,   170,   260,   176,
   131,   264,   132,    96,    97,   136,   360,   158,   175,    85,
   160,    86,   159,    87,  -251,   182,   364,   184,    98,   274,
   275,   276,   277,    88,   183,   194,    10,    89,   197,     1,
     2,    90,   202,   196,    91,   274,   275,   276,   277,    10,
   236,    38,   224,   226,   364,    92,   243,   310,   252,   251,
    93,   254,    94,   115,    95,   360,    39,   269,   386,   272,
    40,   273,   280,    96,    97,   282,    41,    42,    43,   284,
   286,   289,    44,   206,   300,   305,   309,    45,    98,   317,
   321,   320,    46,   325,    47,    10,   169,   170,     1,     2,
   324,   293,    48,   337,   338,   326,   334,   340,   346,   350,
   351,    49,   356,    50,   367,   361,   139,   140,    51,   370,
    52,    53,    54,   141,   369,   371,   376,    85,    38,    86,
   394,    87,   142,   395,     6,    18,   177,    35,    81,   111,
   135,    88,   133,   105,   327,    89,   253,   355,   348,    90,
   345,   198,    91,    41,    42,    43,   342,   292,   368,   392,
   285,   143,   380,    92,    45,   377,   283,   375,    93,    46,
    94,    47,    95,   118,     0,   352,     0,     0,     0,    48,
     0,    96,    97,   144,   145,     0,     0,     0,    49,     0,
    50,     0,   146,   139,   140,    51,    98,    52,    53,    54,
   141,     0,     0,     0,    85,    38,    86,     0,    87,   142,
     0,     0,     0,     0,     0,     0,     0,     0,    88,     0,
     0,     0,    89,     0,     0,     0,    90,     0,     0,    91,
    41,    42,    43,     0,     0,     0,     0,     0,   143,     0,
    92,    45,     0,     0,     0,    93,    46,    94,    47,    95,
     0,     0,     0,     1,     2,     0,    48,     0,    96,    97,
   144,   145,     0,     0,    85,    49,    86,    50,    87,     0,
     0,     0,    51,    98,    52,    53,    54,     0,    88,     0,
     0,     0,    89,     0,     0,     0,    90,     0,     0,    91,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    92,     0,     0,     0,     0,    93,     0,    94,     0,    95,
     0,     0,     0,     0,     0,     0,     0,     0,    96,    97,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,    98
};

static const short yycheck[] = {     7,
    82,     0,   118,   160,     3,    13,   145,   180,   147,   132,
     4,    64,    65,   183,    64,    65,     8,    28,     8,    13,
    14,    11,    12,     8,   104,     8,     9,    17,    46,    37,
     8,     8,    40,    11,    12,     3,    44,     8,    37,    11,
    12,    40,   229,    11,    12,    44,    99,     8,    56,     8,
     9,   231,   232,   300,    22,    34,    24,    56,    26,     8,
     9,    10,   131,     8,     9,    10,    74,    33,    36,    30,
   317,   194,    40,    13,    14,    74,    44,   278,   279,    47,
   281,   268,     5,     6,     7,     8,     9,    10,    11,    12,
    58,   109,   103,    33,   104,    63,   283,    65,   180,    67,
    99,   109,   112,    69,   157,   113,    15,     9,    76,    77,
   109,   105,   120,   112,   113,   197,   273,   102,   108,   235,
   112,   120,   105,    91,   132,   101,   103,    57,   308,    69,
   108,   102,   302,   132,   184,   251,   104,   113,   254,   106,
     6,   102,     8,     9,    10,     6,   105,     8,     9,    10,
   158,   159,    37,   102,    53,   224,   105,   102,   157,   241,
    69,   108,   109,   103,    73,   105,   248,    13,    14,   109,
     6,    56,     8,     9,    10,   183,   229,   300,   186,    45,
    46,   104,    80,   191,    45,    46,   194,     6,   196,     8,
     9,    10,     3,   316,   317,    61,    80,   210,    84,     8,
    61,    84,    11,    12,    84,   378,   104,    80,   106,    45,
   209,   107,   369,   105,    80,   388,    41,   109,   226,    80,
    86,   360,   106,   305,    60,    86,    45,    52,   236,    95,
   243,   104,   251,   106,    95,   254,   102,    46,   104,   252,
   106,    60,     4,   104,    21,   106,    12,    12,    11,    12,
    86,    13,    14,     8,   105,    20,    11,    12,   109,    22,
   105,    24,   105,    26,   109,    39,   109,    86,   105,   282,
   105,   105,   109,    36,   109,   109,    41,    40,    43,   105,
   108,    44,   105,   109,    47,   112,   109,    52,    11,    12,
    81,    81,   300,    71,   302,    58,    81,    51,     3,   307,
    63,   300,    65,     6,    67,     8,     9,    10,   316,   317,
   112,   319,     3,    76,    77,   104,   324,   110,   317,    22,
   104,    24,   110,    26,   104,    35,   334,    68,    91,    97,
    98,    99,   100,    36,   104,   104,     8,    40,     3,    11,
    12,    44,    45,   104,    47,    97,    98,    99,   100,     8,
    25,    23,   112,   112,   362,    58,   106,   109,   106,    68,
    63,    68,    65,   103,    67,   373,    38,    30,   376,   105,
    42,   109,    96,    76,    77,   106,    48,    49,    50,   104,
     4,    95,    54,    86,   111,    68,   107,    59,    91,   106,
   101,   113,    64,   105,    66,     8,     9,    10,    11,    12,
   104,   104,    74,     4,    82,   107,   114,    88,   107,   102,
   107,    83,   113,    85,   104,   107,    11,    12,    90,   107,
    92,    93,    94,    18,   109,   107,   112,    22,    23,    24,
     0,    26,    27,     0,     3,    13,   134,    26,    56,    74,
   113,    36,   109,    65,   273,    40,   191,   319,   307,    44,
   302,   157,    47,    48,    49,    50,   298,   228,   339,   388,
   224,    56,   373,    58,    59,   366,   217,   362,    63,    64,
    65,    66,    67,    82,    -1,   316,    -1,    -1,    -1,    74,
    -1,    76,    77,    78,    79,    -1,    -1,    -1,    83,    -1,
    85,    -1,    87,    11,    12,    90,    91,    92,    93,    94,
    18,    -1,    -1,    -1,    22,    23,    24,    -1,    26,    27,
    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    36,    -1,
    -1,    -1,    40,    -1,    -1,    -1,    44,    -1,    -1,    47,
    48,    49,    50,    -1,    -1,    -1,    -1,    -1,    56,    -1,
    58,    59,    -1,    -1,    -1,    63,    64,    65,    66,    67,
    -1,    -1,    -1,    11,    12,    -1,    74,    -1,    76,    77,
    78,    79,    -1,    -1,    22,    83,    24,    85,    26,    -1,
    -1,    -1,    90,    91,    92,    93,    94,    -1,    36,    -1,
    -1,    -1,    40,    -1,    -1,    -1,    44,    -1,    -1,    47,
    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    58,    -1,    -1,    -1,    -1,    63,    -1,    65,    -1,    67,
    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    76,    77,
    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    -1,    -1,    -1,    91
};
/* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
#line 3 "/usr/share/bison.simple"
/* This file comes from bison-1.28.  */

/* Skeleton output parser for bison,
   Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2, or (at your option)
   any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 59 Temple Place - Suite 330,
   Boston, MA 02111-1307, USA.  */

/* As a special exception, when this file is copied by Bison into a
   Bison output file, you may use that output file without restriction.
   This special exception was added by the Free Software Foundation
   in version 1.24 of Bison.  */

/* This is the parser code that is written into each bison parser
  when the %semantic_parser declaration is not specified in the grammar.
  It was written by Richard Stallman by simplifying the hairy parser
  used when %semantic_parser is specified.  */

#ifndef YYSTACK_USE_ALLOCA
#ifdef alloca
#define YYSTACK_USE_ALLOCA
#else /* alloca not defined */
#ifdef __GNUC__
#define YYSTACK_USE_ALLOCA
#define alloca __builtin_alloca
#else /* not GNU C.  */
#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
#define YYSTACK_USE_ALLOCA
#include <alloca.h>
#else /* not sparc */
/* We think this test detects Watcom and Microsoft C.  */
/* This used to test MSDOS, but that is a bad idea
   since that symbol is in the user namespace.  */
#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
#if 0 /* No need for malloc.h, which pollutes the namespace;
	 instead, just don't use alloca.  */
#include <malloc.h>
#endif
#else /* not MSDOS, or __TURBOC__ */
#if defined(_AIX)
/* I don't know what this was needed for, but it pollutes the namespace.
   So I turned it off.   rms, 2 May 1997.  */
/* #include <malloc.h>  */
 #pragma alloca
#define YYSTACK_USE_ALLOCA
#else /* not MSDOS, or __TURBOC__, or _AIX */
#if 0
#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
		 and on HPUX 10.  Eventually we can turn this on.  */
#define YYSTACK_USE_ALLOCA
#define alloca __builtin_alloca
#endif /* __hpux */
#endif
#endif /* not _AIX */
#endif /* not MSDOS, or __TURBOC__ */
#endif /* not sparc */
#endif /* not GNU C */
#endif /* alloca not defined */
#endif /* YYSTACK_USE_ALLOCA not defined */

#ifdef YYSTACK_USE_ALLOCA
#define YYSTACK_ALLOC alloca
#else
#define YYSTACK_ALLOC malloc
#endif

/* Note: there must be only one dollar sign in this file.
   It is replaced by the list of actions, each action
   as one case of the switch.  */

#define yyerrok		(yyerrstatus = 0)
#define yyclearin	(yychar = YYEMPTY)
#define YYEMPTY		-2
#define YYEOF		0
#define YYACCEPT	goto yyacceptlab
#define YYABORT 	goto yyabortlab
#define YYERROR		goto yyerrlab1
/* Like YYERROR except do call yyerror.
   This remains here temporarily to ease the
   transition to the new meaning of YYERROR, for GCC.
   Once GCC version 2 has supplanted version 1, this can go.  */
#define YYFAIL		goto yyerrlab
#define YYRECOVERING()  (!!yyerrstatus)
#define YYBACKUP(token, value) \
do								\
  if (yychar == YYEMPTY && yylen == 1)				\
    { yychar = (token), yylval = (value);			\
      yychar1 = YYTRANSLATE (yychar);				\
      YYPOPSTACK;						\
      goto yybackup;						\
    }								\
  else								\
    { yyerror ("syntax error: cannot back up"); YYERROR; }	\
while (0)

#define YYTERROR	1
#define YYERRCODE	256

#ifndef YYPURE
#define YYLEX		yylex()
#endif

#ifdef YYPURE
#ifdef YYLSP_NEEDED
#ifdef YYLEX_PARAM
#define YYLEX		yylex(&yylval, &yylloc, YYLEX_PARAM)
#else
#define YYLEX		yylex(&yylval, &yylloc)
#endif
#else /* not YYLSP_NEEDED */
#ifdef YYLEX_PARAM
#define YYLEX		yylex(&yylval, YYLEX_PARAM)
#else
#define YYLEX		yylex(&yylval)
#endif
#endif /* not YYLSP_NEEDED */
#endif

/* If nonreentrant, generate the variables here */

#ifndef YYPURE

int	yychar;			/*  the lookahead symbol		*/
YYSTYPE	yylval;			/*  the semantic value of the		*/
				/*  lookahead symbol			*/

#ifdef YYLSP_NEEDED
YYLTYPE yylloc;			/*  location data for the lookahead	*/
				/*  symbol				*/
#endif

int yynerrs;			/*  number of parse errors so far       */
#endif  /* not YYPURE */

#if YYDEBUG != 0
int yydebug;			/*  nonzero means print parse trace	*/
/* Since this is uninitialized, it does not stop multiple parsers
   from coexisting.  */
#endif

/*  YYINITDEPTH indicates the initial size of the parser's stacks	*/

#ifndef	YYINITDEPTH
#define YYINITDEPTH 200
#endif

/*  YYMAXDEPTH is the maximum size the stacks can grow to
    (effective only if the built-in stack extension method is used).  */

#if YYMAXDEPTH == 0
#undef YYMAXDEPTH
#endif

#ifndef YYMAXDEPTH
#define YYMAXDEPTH 10000
#endif

/* Define __yy_memcpy.  Note that the size argument
   should be passed with type unsigned int, because that is what the non-GCC
   definitions require.  With GCC, __builtin_memcpy takes an arg
   of type size_t, but it can handle unsigned int.  */

#if __GNUC__ > 1		/* GNU C and GNU C++ define this.  */
#define __yy_memcpy(TO,FROM,COUNT)	__builtin_memcpy(TO,FROM,COUNT)
#else				/* not GNU C or C++ */
#ifndef __cplusplus

/* This is the most reliable way to avoid incompatibilities
   in available built-in functions on various systems.  */
static void
__yy_memcpy (to, from, count)
     char *to;
     char *from;
     unsigned int count;
{
  register char *f = from;
  register char *t = to;
  register int i = count;

  while (i-- > 0)
    *t++ = *f++;
}

#else /* __cplusplus */

/* This is the most reliable way to avoid incompatibilities
   in available built-in functions on various systems.  */
static void
__yy_memcpy (char *to, char *from, unsigned int count)
{
  register char *t = to;
  register char *f = from;
  register int i = count;

  while (i-- > 0)
    *t++ = *f++;
}

#endif
#endif

#line 217 "/usr/share/bison.simple"

/* The user can define YYPARSE_PARAM as the name of an argument to be passed
   into yyparse.  The argument should have type void *.
   It should actually point to an object.
   Grammar actions can access the variable by casting it
   to the proper pointer type.  */

#ifdef YYPARSE_PARAM
#ifdef __cplusplus
#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
#define YYPARSE_PARAM_DECL
#else /* not __cplusplus */
#define YYPARSE_PARAM_ARG YYPARSE_PARAM
#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
#endif /* not __cplusplus */
#else /* not YYPARSE_PARAM */
#define YYPARSE_PARAM_ARG
#define YYPARSE_PARAM_DECL
#endif /* not YYPARSE_PARAM */

/* Prevent warning if -Wstrict-prototypes.  */
#ifdef __GNUC__
#ifdef YYPARSE_PARAM
int yyparse (void *);
#else
int yyparse (void);
#endif
#endif

int
yyparse(YYPARSE_PARAM_ARG)
     YYPARSE_PARAM_DECL
{
  register int yystate;
  register int yyn;
  register short *yyssp;
  register YYSTYPE *yyvsp;
  int yyerrstatus;	/*  number of tokens to shift before error messages enabled */
  int yychar1 = 0;		/*  lookahead token as an internal (translated) token number */

  short	yyssa[YYINITDEPTH];	/*  the state stack			*/
  YYSTYPE yyvsa[YYINITDEPTH];	/*  the semantic value stack		*/

  short *yyss = yyssa;		/*  refer to the stacks thru separate pointers */
  YYSTYPE *yyvs = yyvsa;	/*  to allow yyoverflow to reallocate them elsewhere */

#ifdef YYLSP_NEEDED
  YYLTYPE yylsa[YYINITDEPTH];	/*  the location stack			*/
  YYLTYPE *yyls = yylsa;
  YYLTYPE *yylsp;

#define YYPOPSTACK   (yyvsp--, yyssp--, yylsp--)
#else
#define YYPOPSTACK   (yyvsp--, yyssp--)
#endif

  int yystacksize = YYINITDEPTH;
  int yyfree_stacks = 0;

#ifdef YYPURE
  int yychar;
  YYSTYPE yylval;
  int yynerrs;
#ifdef YYLSP_NEEDED
  YYLTYPE yylloc;
#endif
#endif

  YYSTYPE yyval;		/*  the variable used to return		*/
				/*  semantic values from the action	*/
				/*  routines				*/

  int yylen;

#if YYDEBUG != 0
  if (yydebug)
    fprintf(stderr, "Starting parse\n");
#endif

  yystate = 0;
  yyerrstatus = 0;
  yynerrs = 0;
  yychar = YYEMPTY;		/* Cause a token to be read.  */

  /* Initialize stack pointers.
     Waste one element of value and location stack
     so that they stay on the same level as the state stack.
     The wasted elements are never initialized.  */

  yyssp = yyss - 1;
  yyvsp = yyvs;
#ifdef YYLSP_NEEDED
  yylsp = yyls;
#endif

/* Push a new state, which is found in  yystate  .  */
/* In all cases, when you get here, the value and location stacks
   have just been pushed. so pushing a state here evens the stacks.  */
yynewstate:

  *++yyssp = yystate;

  if (yyssp >= yyss + yystacksize - 1)
    {
      /* Give user a chance to reallocate the stack */
      /* Use copies of these so that the &'s don't force the real ones into memory. */
      YYSTYPE *yyvs1 = yyvs;
      short *yyss1 = yyss;
#ifdef YYLSP_NEEDED
      YYLTYPE *yyls1 = yyls;
#endif

      /* Get the current used size of the three stacks, in elements.  */
      int size = yyssp - yyss + 1;

#ifdef yyoverflow
      /* Each stack pointer address is followed by the size of
	 the data in use in that stack, in bytes.  */
#ifdef YYLSP_NEEDED
      /* This used to be a conditional around just the two extra args,
	 but that might be undefined if yyoverflow is a macro.  */
      yyoverflow("parser stack overflow",
		 &yyss1, size * sizeof (*yyssp),
		 &yyvs1, size * sizeof (*yyvsp),
		 &yyls1, size * sizeof (*yylsp),
		 &yystacksize);
#else
      yyoverflow("parser stack overflow",
		 &yyss1, size * sizeof (*yyssp),
		 &yyvs1, size * sizeof (*yyvsp),
		 &yystacksize);
#endif

      yyss = yyss1; yyvs = yyvs1;
#ifdef YYLSP_NEEDED
      yyls = yyls1;
#endif
#else /* no yyoverflow */
      /* Extend the stack our own way.  */
      if (yystacksize >= YYMAXDEPTH)
	{
	  yyerror("parser stack overflow");
	  if (yyfree_stacks)
	    {
	      free (yyss);
	      free (yyvs);
#ifdef YYLSP_NEEDED
	      free (yyls);
#endif
	    }
	  return 2;
	}
      yystacksize *= 2;
      if (yystacksize > YYMAXDEPTH)
	yystacksize = YYMAXDEPTH;
#ifndef YYSTACK_USE_ALLOCA
      yyfree_stacks = 1;
#endif
      yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
      __yy_memcpy ((char *)yyss, (char *)yyss1,
		   size * (unsigned int) sizeof (*yyssp));
      yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
      __yy_memcpy ((char *)yyvs, (char *)yyvs1,
		   size * (unsigned int) sizeof (*yyvsp));
#ifdef YYLSP_NEEDED
      yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
      __yy_memcpy ((char *)yyls, (char *)yyls1,
		   size * (unsigned int) sizeof (*yylsp));
#endif
#endif /* no yyoverflow */

      yyssp = yyss + size - 1;
      yyvsp = yyvs + size - 1;
#ifdef YYLSP_NEEDED
      yylsp = yyls + size - 1;
#endif

#if YYDEBUG != 0
      if (yydebug)
	fprintf(stderr, "Stack size increased to %d\n", yystacksize);
#endif

      if (yyssp >= yyss + yystacksize - 1)
	YYABORT;
    }

#if YYDEBUG != 0
  if (yydebug)
    fprintf(stderr, "Entering state %d\n", yystate);
#endif

  goto yybackup;
 yybackup:

/* Do appropriate processing given the current state.  */
/* Read a lookahead token if we need one and don't already have one.  */
/* yyresume: */

  /* First try to decide what to do without reference to lookahead token.  */

  yyn = yypact[yystate];
  if (yyn == YYFLAG)
    goto yydefault;

  /* Not known => get a lookahead token if don't already have one.  */

  /* yychar is either YYEMPTY or YYEOF
     or a valid token in external form.  */

  if (yychar == YYEMPTY)
    {
#if YYDEBUG != 0
      if (yydebug)
	fprintf(stderr, "Reading a token: ");
#endif
      yychar = YYLEX;
    }

  /* Convert token to internal form (in yychar1) for indexing tables with */

  if (yychar <= 0)		/* This means end of input. */
    {
      yychar1 = 0;
      yychar = YYEOF;		/* Don't call YYLEX any more */

#if YYDEBUG != 0
      if (yydebug)
	fprintf(stderr, "Now at end of input.\n");
#endif
    }
  else
    {
      yychar1 = YYTRANSLATE(yychar);

#if YYDEBUG != 0
      if (yydebug)
	{
	  fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
	  /* Give the individual parser a way to print the precise meaning
	     of a token, for further debugging info.  */
#ifdef YYPRINT
	  YYPRINT (stderr, yychar, yylval);
#endif
	  fprintf (stderr, ")\n");
	}
#endif
    }

  yyn += yychar1;
  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
    goto yydefault;

  yyn = yytable[yyn];

  /* yyn is what to do for this token type in this state.
     Negative => reduce, -yyn is rule number.
     Positive => shift, yyn is new state.
       New state is final state => don't bother to shift,
       just return success.
     0, or most negative number => error.  */

  if (yyn < 0)
    {
      if (yyn == YYFLAG)
	goto yyerrlab;
      yyn = -yyn;
      goto yyreduce;
    }
  else if (yyn == 0)
    goto yyerrlab;

  if (yyn == YYFINAL)
    YYACCEPT;

  /* Shift the lookahead token.  */

#if YYDEBUG != 0
  if (yydebug)
    fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
#endif

  /* Discard the token being shifted unless it is eof.  */
  if (yychar != YYEOF)
    yychar = YYEMPTY;

  *++yyvsp = yylval;
#ifdef YYLSP_NEEDED
  *++yylsp = yylloc;
#endif

  /* count tokens shifted since error; after three, turn off error status.  */
  if (yyerrstatus) yyerrstatus--;

  yystate = yyn;
  goto yynewstate;

/* Do the default action for the current state.  */
yydefault:

  yyn = yydefact[yystate];
  if (yyn == 0)
    goto yyerrlab;

/* Do a reduction.  yyn is the number of a rule to reduce with.  */
yyreduce:
  yylen = yyr2[yyn];
  if (yylen > 0)
    yyval = yyvsp[1-yylen]; /* implement default value of the action */

#if YYDEBUG != 0
  if (yydebug)
    {
      int i;

      fprintf (stderr, "Reducing via rule %d (line %d), ",
	       yyn, yyrline[yyn]);

      /* Print the symbols being reduced, and their result.  */
      for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
	fprintf (stderr, "%s ", yytname[yyrhs[i]]);
      fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
    }
#endif


  switch (yyn) {

case 1:
#line 300 "asn1p_y.y"
{
		*(void **)param = yyvsp[0].a_grammar;
	;
    break;}
case 2:
#line 306 "asn1p_y.y"
{
		yyval.a_grammar = asn1p_new();
		checkmem(yyval.a_grammar);
		TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
	;
    break;}
case 3:
#line 311 "asn1p_y.y"
{
		yyval.a_grammar = yyvsp[-1].a_grammar;
		TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
	;
    break;}
case 4:
#line 332 "asn1p_y.y"
{

		if(yyvsp[-1].a_module) {
			yyval.a_module = yyvsp[-1].a_module;
		} else {
			/* There's a chance that a module is just plain empty */
			yyval.a_module = asn1p_module_new();
		}
		checkmem(yyval.a_module);

		yyval.a_module->Identifier = yyvsp[-7].tv_str;
		yyval.a_module->module_oid = yyvsp[-6].a_oid;
		yyval.a_module->module_flags = yyvsp[-4].a_module_flags;
	;
    break;}
case 5:
#line 353 "asn1p_y.y"
{ yyval.a_oid = 0; ;
    break;}
case 6:
#line 354 "asn1p_y.y"
{ yyval.a_oid = yyvsp[0].a_oid; ;
    break;}
case 7:
#line 358 "asn1p_y.y"
{
		yyval.a_oid = yyvsp[-1].a_oid;
	;
    break;}
case 8:
#line 361 "asn1p_y.y"
{
		yyval.a_oid = 0;
	;
    break;}
case 9:
#line 367 "asn1p_y.y"
{
		yyval.a_oid = asn1p_oid_new();
		asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
		if(yyvsp[0].a_oid_arc.name)
			free(yyvsp[0].a_oid_arc.name);
	;
    break;}
case 10:
#line 373 "asn1p_y.y"
{
		yyval.a_oid = yyvsp[-1].a_oid;
		asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
		if(yyvsp[0].a_oid_arc.name)
			free(yyvsp[0].a_oid_arc.name);
	;
    break;}
case 11:
#line 382 "asn1p_y.y"
{					/* iso */
		yyval.a_oid_arc.name = yyvsp[0].tv_str;
		yyval.a_oid_arc.number = -1;
	;
    break;}
case 12:
#line 386 "asn1p_y.y"
{		/* iso(1) */
		yyval.a_oid_arc.name = yyvsp[-3].tv_str;
		yyval.a_oid_arc.number = yyvsp[-1].a_int;
	;
    break;}
case 13:
#line 390 "asn1p_y.y"
{					/* 1 */
		yyval.a_oid_arc.name = 0;
		yyval.a_oid_arc.number = yyvsp[0].a_int;
	;
    break;}
case 14:
#line 400 "asn1p_y.y"
{ yyval.a_module_flags = MSF_NOFLAGS; ;
    break;}
case 15:
#line 401 "asn1p_y.y"
{
		yyval.a_module_flags = yyvsp[0].a_module_flags;
	;
    break;}
case 16:
#line 410 "asn1p_y.y"
{
		yyval.a_module_flags = yyvsp[0].a_module_flags;
	;
    break;}
case 17:
#line 413 "asn1p_y.y"
{
		yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
	;
    break;}
case 18:
#line 422 "asn1p_y.y"
{
		yyval.a_module_flags = MSF_EXPLICIT_TAGS;
	;
    break;}
case 19:
#line 425 "asn1p_y.y"
{
		yyval.a_module_flags = MSF_IMPLICIT_TAGS;
	;
    break;}
case 20:
#line 428 "asn1p_y.y"
{
		yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
	;
    break;}
case 21:
#line 431 "asn1p_y.y"
{
		yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
	;
    break;}
case 22:
#line 435 "asn1p_y.y"
{
		/* X.680Amd1 specifies TAG and XER */
		if(strcmp(yyvsp[-1].tv_str, "TAG") == 0) {
		 	yyval.a_module_flags = MSF_TAG_INSTRUCTIONS;
		} else if(strcmp(yyvsp[-1].tv_str, "XER") == 0) {
		 	yyval.a_module_flags = MSF_XER_INSTRUCTIONS;
		} else {
			fprintf(stderr,
				"WARNING: %s INSTRUCTIONS at line %d: "
				"Unrecognized encoding reference\n",
				yyvsp[-1].tv_str, yylineno);
		 	yyval.a_module_flags = MSF_unk_INSTRUCTIONS;
		}
		free(yyvsp[-1].tv_str);
	;
    break;}
case 23:
#line 456 "asn1p_y.y"
{ yyval.a_module = 0; ;
    break;}
case 24:
#line 457 "asn1p_y.y"
{
		yyval.a_module = yyvsp[0].a_module;
	;
    break;}
case 25:
#line 466 "asn1p_y.y"
{
		yyval.a_module = yyvsp[0].a_module;
	;
    break;}
case 26:
#line 469 "asn1p_y.y"
{
		yyval.a_module = yyvsp[-1].a_module;

		/* Behave well when one of them is skipped. */
		if(!(yyvsp[-1].a_module)) {
			if(yyvsp[0].a_module) yyval.a_module = yyvsp[0].a_module;
			break;
		}

#ifdef	MY_IMPORT
#error	MY_IMPORT DEFINED ELSEWHERE!
#endif
#define	MY_IMPORT(foo,field)	do {				\
		while(TQ_FIRST(&(yyvsp[0].a_module->foo))) {			\
			TQ_ADD(&(yyval.a_module->foo),			\
				TQ_REMOVE(&(yyvsp[0].a_module->foo), field),	\
				field);				\
		}						\
		assert(TQ_FIRST(&(yyvsp[0].a_module->foo)) == 0);		\
	} while(0)

		MY_IMPORT(imports, xp_next);
		MY_IMPORT(exports, xp_next);
		MY_IMPORT(members, next);
#undef	MY_IMPORT

	;
    break;}
case 27:
#line 502 "asn1p_y.y"
{
		yyval.a_module = yyvsp[0].a_module;
	;
    break;}
case 28:
#line 505 "asn1p_y.y"
{
		yyval.a_module = asn1p_module_new();
		checkmem(yyval.a_module);
		if(yyvsp[0].a_xports) {
			TQ_ADD(&(yyval.a_module->exports), yyvsp[0].a_xports, xp_next);
		} else {
			/* "EXPORTS ALL;" ? */
		}
	;
    break;}
case 29:
#line 514 "asn1p_y.y"
{
		yyval.a_module = asn1p_module_new();
		checkmem(yyval.a_module);
		assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
		assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
		TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
	;
    break;}
case 30:
#line 521 "asn1p_y.y"
{
		yyval.a_module = asn1p_module_new();
		checkmem(yyval.a_module);
		assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
		assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
		TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
	;
    break;}
case 31:
#line 534 "asn1p_y.y"
{
		yyval.a_module = asn1p_module_new();
		checkmem(yyval.a_module);
		assert(yyvsp[0].a_expr->expr_type != A1TC_INVALID);
		assert(yyvsp[0].a_expr->meta_type != AMT_INVALID);
		TQ_ADD(&(yyval.a_module->members), yyvsp[0].a_expr, next);
	;
    break;}
case 32:
#line 542 "asn1p_y.y"
{ asn1p_lexer_hack_push_encoding_control(); ;
    break;}
case 33:
#line 543 "asn1p_y.y"
{
		fprintf(stderr,
			"WARNING: ENCODING-CONTROL %s "
			"specification at line %d ignored\n",
			yyvsp[-1].tv_str, yylineno);
		free(yyvsp[-1].tv_str);
		yyval.a_module = 0;
	;
    break;}
case 34:
#line 555 "asn1p_y.y"
{
		return yyerror(
			"Attempt to redefine a standard basic type, "
			"use -ftypesXY to switch back "
			"to older version of ASN.1 standard");
	;
    break;}
case 35:
#line 569 "asn1p_y.y"
{
		yyval.a_module = yyvsp[-1].a_module;
	;
    break;}
case 36:
#line 575 "asn1p_y.y"
{
		return yyerror("Empty IMPORTS list");
	;
    break;}
case 37:
#line 581 "asn1p_y.y"
{
		yyval.a_module = asn1p_module_new();
		checkmem(yyval.a_module);
		TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
	;
    break;}
case 38:
#line 586 "asn1p_y.y"
{
		yyval.a_module = yyvsp[-1].a_module;
		TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
	;
    break;}
case 39:
#line 593 "asn1p_y.y"
{
		yyval.a_xports = yyvsp[-3].a_xports;
		yyval.a_xports->from = yyvsp[-1].tv_str;
		yyval.a_xports->from_oid = yyvsp[0].a_oid;
		checkmem(yyval.a_xports);
	;
    break;}
case 40:
#line 602 "asn1p_y.y"
{
		yyval.a_xports = asn1p_xports_new();
		checkmem(yyval.a_xports);
		TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
	;
    break;}
case 41:
#line 607 "asn1p_y.y"
{
		yyval.a_xports = yyvsp[-2].a_xports;
		TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
	;
    break;}
case 42:
#line 614 "asn1p_y.y"
{
		yyval.a_expr = asn1p_expr_new(yylineno);
		checkmem(yyval.a_expr);
		yyval.a_expr->Identifier = yyvsp[0].tv_str;
		yyval.a_expr->expr_type = A1TC_REFERENCE;
	;
    break;}
case 43:
#line 620 "asn1p_y.y"
{
		yyval.a_expr = asn1p_expr_new(yylineno);
		checkmem(yyval.a_expr);
		yyval.a_expr->Identifier = yyvsp[0].tv_str;
		yyval.a_expr->expr_type = A1TC_REFERENCE;
	;
    break;}
case 44:
#line 629 "asn1p_y.y"
{
		yyval.a_xports = yyvsp[-1].a_xports;
	;
    break;}
case 45:
#line 632 "asn1p_y.y"
{
		yyval.a_xports = 0;
	;
    break;}
case 46:
#line 635 "asn1p_y.y"
{
		/* Empty EXPORTS clause effectively prohibits export. */
		yyval.a_xports = asn1p_xports_new();
		checkmem(yyval.a_xports);
	;
    break;}
case 47:
#line 643 "asn1p_y.y"
{
		yyval.a_xports = asn1p_xports_new();
		assert(yyval.a_xports);
		TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
	;
    break;}
case 48:
#line 648 "asn1p_y.y"
{
		yyval.a_xports = yyvsp[-2].a_xports;
		TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
	;
    break;}
case 49:
#line 655 "asn1p_y.y"
{
		yyval.a_expr = asn1p_expr_new(yylineno);
		checkmem(yyval.a_expr);
		yyval.a_expr->Identifier = yyvsp[0].tv_str;
		yyval.a_expr->expr_type = A1TC_EXPORTVAR;
	;
    break;}
case 50:
#line 661 "asn1p_y.y"
{
		yyval.a_expr = asn1p_expr_new(yylineno);
		checkmem(yyval.a_expr);
		yyval.a_expr->Identifier = yyvsp[0].tv_str;
		yyval.a_expr->expr_type = A1TC_EXPORTVAR;
	;
    break;}
case 51:
#line 671 "asn1p_y.y"
{
		yyval.a_expr = yyvsp[-4].a_expr;
		assert(yyval.a_expr->Identifier == 0);
		yyval.a_expr->Identifier = yyvsp[-5].tv_str;
		yyval.a_expr->meta_type = AMT_VALUESET;
		// take care of optValueSetBody 
	;
    break;}
case 52:
#line 681 "asn1p_y.y"
{
		yyval.a_expr = asn1p_expr_new(yylineno);
		checkmem(yyval.a_expr);
		yyval.a_expr->reference = yyvsp[0].a_ref;
		yyval.a_expr->expr_type = A1TC_REFERENCE;
		yyval.a_expr->meta_type = AMT_TYPEREF;
	;
    break;}
case 53:
#line 688 "asn1p_y.y"
{
		yyval.a_expr = asn1p_expr_new(yylineno);
		checkmem(yyval.a_expr);
		yyval.a_expr->expr_type = yyvsp[0].a_type;
		yyval.a_expr->meta_type = AMT_TYPE;
	;
    break;}
case 54:
#line 697 "asn1p_y.y"
{ ;
    break;}
case 55:
#line 698 "asn1p_y.y"
{
	;
    break;}
case 56:
#line 709 "asn1p_y.y"
{
	;
    break;}
case 57:
#line 711 "asn1p_y.y"
{
	;
    break;}
case 58:
#line 716 "asn1p_y.y"
{
	;
    break;}
case 59:
#line 718 "asn1p_y.y"
{
	;
    break;}
case 60:
#line 734 "asn1p_y.y"
{
		yyval.a_expr = asn1p_expr_new(yylineno);
		checkmem(yyval.a_expr);
		yyval.a_expr->Identifier = yyvsp[-3].tv_str;
		yyval.a_expr->tag = yyvsp[-1].a_tag;
		yyval.a_expr->expr_type = A1TC_TYPEID;
		yyval.a_expr->meta_type = AMT_TYPE;
	;
    break;}
case 61:
#line 742 "asn1p_y.y"
{
		yyval.a_expr = yyvsp[0].a_expr;
		yyval.a_expr->Identifier = yyvsp[-2].tv_str;
		assert(yyval.a_expr->expr_type);
		assert(yyval.a_expr->meta_type);
	;
    break;}
case 62:
#line 748 "asn1p_y.y"
{
		yyval.a_expr = yyvsp[0].a_expr;
		yyval.a_expr->Identifier = yyvsp[-2].tv_str;
		assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
		assert(yyval.a_expr->meta_type == AMT_OBJECT);
	;
    break;}
case 63:
#line 764 "asn1p_y.y"
{
		yyval.a_expr = yyvsp[0].a_expr;
		assert(yyval.a_expr->Identifier == 0);
		yyval.a_expr->Identifier = yyvsp[-5].tv_str;
		yyval.a_expr->params = yyvsp[-3].a_plist;
		yyval.a_expr->meta_type = AMT_PARAMTYPE;
	;
    break;}
case 64:
#line 774 "asn1p_y.y"
{
		int ret;
		yyval.a_plist = asn1p_paramlist_new(yylineno);
		checkmem(yyval.a_plist);
		ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
		checkmem(ret == 0);
		if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
		if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
	;
    break;}
case 65:
#line 783 "asn1p_y.y"
{
		int ret;
		yyval.a_plist = yyvsp[-2].a_plist;
		ret = asn1p_paramlist_add_param(yyval.a_plist, yyvsp[0].a_parg.governor, yyvsp[0].a_parg.argument);
		checkmem(ret == 0);
		if(yyvsp[0].a_parg.governor) asn1p_ref_free(yyvsp[0].a_parg.governor);
		if(yyvsp[0].a_parg.argument) free(yyvsp[0].a_parg.argument);
	;
    break;}
case 66:
#line 794 "asn1p_y.y"
{
		yyval.a_parg.governor = NULL;
		yyval.a_parg.argument = yyvsp[0].tv_str;
	;
    break;}
case 67:
#line 798 "asn1p_y.y"
{
		int ret;
		yyval.a_parg.governor = asn1p_ref_new(yylineno);
		ret = asn1p_ref_add_component(yyval.a_parg.governor, yyvsp[-2].tv_str, 0);
		checkmem(ret == 0);
		yyval.a_parg.argument = yyvsp[0].tv_str;
	;
    break;}
case 68:
#line 805 "asn1p_y.y"
{
		int ret;
		yyval.a_parg.governor = asn1p_ref_new(yylineno);
		ret = asn1p_ref_add_component(yyval.a_parg.governor,
			ASN_EXPR_TYPE2STR(yyvsp[-2].a_type), 1);
		checkmem(ret == 0);
		yyval.a_parg.argument = yyvsp[0].tv_str;
	;
    break;}
case 69:
#line 816 "asn1p_y.y"
{
		yyval.a_expr = asn1p_expr_new(yylineno);
		checkmem(yyval.a_expr);
		asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
	;
    break;}
case 70:
#line 821 "asn1p_y.y"
{
		yyval.a_expr = yyvsp[-2].a_expr;
		asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
	;
    break;}
case 71:
#line 828 "asn1p_y.y"
{
		yyval.a_expr = yyvsp[0].a_expr;
	;
    break;}
case 72:
#line 831 "asn1p_y.y"
{
		yyval.a_expr = asn1p_expr_new(yylineno);
		checkmem(yyval.a_expr);
		yyval.a_expr->Identifier = yyvsp[0].tv_str;
		yyval.a_expr->expr_type = A1TC_REFERENCE;
		yyval.a_expr->meta_type = AMT_VALUE;
	;
    break;}
case 73:
#line 844 "asn1p_y.y"
{
		yyval.a_expr = asn1p_expr_new(yylineno);
		checkmem(yyval.a_expr);
		asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
	;
    break;}
case 74:
#line 849 "asn1p_y.y"
{
		yyval.a_expr = yyvsp[-2].a_expr;
		asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
	;
    break;}
case 75:
#line 856 "asn1p_y.y"
{
		yyval.a_expr = yyvsp[-1].a_expr;
		assert(yyval.a_expr->Identifier == 0);
		yyval.a_expr->Identifier = yyvsp[-2].tv_str;
		yyval.a_expr->marker = yyvsp[0].a_marker;
	;
    break;}
case 76:
#line 862 "asn1p_y.y"
{
		yyval.a_expr = asn1p_expr_new(yylineno);
		checkmem(yyval.a_expr);
		yyval.a_expr->meta_type = yyvsp[0].a_expr->meta_type;
		yyval.a_expr->expr_type = A1TC_COMPONENTS_OF;
		asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
	;
    break;}
case 77:
#line 869 "asn1p_y.y"
{
		yyval.a_expr = yyvsp[0].a_expr;
	;
    break;}
case 78:
#line 875 "asn1p_y.y"
{
		yyval.a_expr = asn1p_expr_new(yylineno);
		checkmem(yyval.a_expr);
		asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
	;
    break;}
case 79:
#line 880 "asn1p_y.y"
{
		yyval.a_expr = yyvsp[-2].a_expr;
		asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
	;
    break;}
case 80:
#line 887 "asn1p_y.y"
{
		yyval.a_expr = yyvsp[0].a_expr;
		assert(yyval.a_expr->Identifier == 0);
		yyval.a_expr->Identifier = yyvsp[-1].tv_str;
	;
    break;}
case 81:
#line 892 "asn1p_y.y"
{
		yyval.a_expr = yyvsp[0].a_expr;
	;
    break;}
case 82:
#line 898 "asn1p_y.y"
{
		yyval.a_expr = yyvsp[-2].a_expr;
		checkmem(yyval.a_expr);
		yyval.a_expr->with_syntax = yyvsp[0].a_wsynt;
		assert(yyval.a_expr->expr_type == A1TC_CLASSDEF);
		assert(yyval.a_expr->meta_type == AMT_OBJECT);
	;
    break;}
case 83:
#line 908 "asn1p_y.y"
{ yyval.a_int = 0; ;
    break;}
case 84:
#line 909 "asn1p_y.y"
{ yyval.a_int = 1; ;
    break;}
case 85:
#line 913 "asn1p_y.y"
{
		yyval.a_expr = asn1p_expr_new(yylineno);
		checkmem(yyval.a_expr);
		yyval.a_expr->expr_type = A1TC_CLASSDEF;
		yyval.a_expr->meta_type = AMT_OBJECT;
		asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
	;
    break;}
case 86:
#line 920 "asn1p_y.y"
{
		yyval.a_expr = yyvsp[-2].a_expr;
		asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
	;
    break;}
case 87:
#line 927 "asn1p_y.y"
{
		yyval.a_expr = asn1p_expr_new(yylineno);
		checkmem(yyval.a_expr);
		yyval.a_expr->Identifier = yyvsp[-1].a_refcomp.name;
		yyval.a_expr->expr_type = A1TC_CLASSFIELD;
		yyval.a_expr->meta_type = AMT_OBJECTFIELD;
		yyval.a_expr->marker = yyvsp[0].a_marker;
	;
    break;}
case 88:
#line 935 "asn1p_y.y"
{
		yyval.a_expr = yyvsp[-2].a_expr;
		yyval.a_expr->Identifier = yyvsp[-3].a_refcomp.name;
		yyval.a_expr->marker = yyvsp[-1].a_marker;
		yyval.a_expr->unique = yyvsp[0].a_int;
	;
    break;}
case 89:
#line 941 "asn1p_y.y"
{
		int ret;
		yyval.a_expr = asn1p_expr_new(yylineno);
		checkmem(yyval.a_expr);
		yyval.a_expr->Identifier = yyvsp[-3].a_refcomp.name;
		yyval.a_expr->reference = asn1p_ref_new(yylineno);
		checkmem(yyval.a_expr->reference);
		ret = asn1p_ref_add_component(yyval.a_expr->reference,
				yyvsp[-2].a_refcomp.name, yyvsp[-2].a_refcomp.lex_type);
		checkmem(ret == 0);
		yyval.a_expr->expr_type = A1TC_CLASSFIELD;
		yyval.a_expr->meta_type = AMT_OBJECTFIELD;
		yyval.a_expr->marker = yyvsp[-1].a_marker;
		yyval.a_expr->unique = yyvsp[0].a_int;
	;
    break;}
case 90:
#line 959 "asn1p_y.y"
{ yyval.a_wsynt = 0; ;
    break;}
case 91:
#line 960 "asn1p_y.y"
{
		yyval.a_wsynt = yyvsp[0].a_wsynt;
	;
    break;}
case 92:
#line 967 "asn1p_y.y"
{ asn1p_lexer_hack_enable_with_syntax(); ;
    break;}
case 93:
#line 969 "asn1p_y.y"
{
		yyval.a_wsynt = yyvsp[-1].a_wsynt;
	;
    break;}
case 94:
#line 975 "asn1p_y.y"
{
		yyval.a_wsynt = asn1p_wsyntx_new();
		TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
	;
    break;}
case 95:
#line 979 "asn1p_y.y"
{
		yyval.a_wsynt = yyvsp[-1].a_wsynt;
		TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
	;
    break;}
case 96:
#line 986 "asn1p_y.y"
{
		yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
	;
    break;}
case 97:
#line 989 "asn1p_y.y"
{
		asn1p_ref_t *ref;
		int ret;
		ref = asn1p_ref_new(yylineno);
		checkmem(ref);
		ret = asn1p_ref_add_component(ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
		checkmem(ret == 0);
		yyval.a_wchunk = asn1p_wsyntx_chunk_fromref(ref, 0);
	;
    break;}
case 98:
#line 1001 "asn1p_y.y"
{
		yyval.a_expr = asn1p_expr_new(yylineno);
		checkmem(yyval.a_expr);
		yyval.a_expr->Identifier = strdup("...");
		checkmem(yyval.a_expr->Identifier);
		yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
		yyval.a_expr->meta_type = AMT_TYPE;
	;
    break;}
case 99:
#line 1009 "asn1p_y.y"
{
		yyval.a_expr = asn1p_expr_new(yylineno);
		checkmem(yyval.a_expr);
		yyval.a_expr->Identifier = strdup("...");
		checkmem(yyval.a_expr->Identifier);
		yyval.a_expr->value = yyvsp[0].a_value;
		yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
		yyval.a_expr->meta_type = AMT_TYPE;
	;
    break;}
case 100:
#line 1018 "asn1p_y.y"
{
		yyval.a_expr = asn1p_expr_new(yylineno);
		checkmem(yyval.a_expr);
		yyval.a_expr->Identifier = strdup("...");
		yyval.a_expr->value = yyvsp[0].a_value;
		checkmem(yyval.a_expr->Identifier);
		yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
		yyval.a_expr->meta_type = AMT_TYPE;
	;
    break;}
case 101:
#line 1030 "asn1p_y.y"
{
		yyval.a_expr = yyvsp[-1].a_expr;
		yyval.a_expr->tag = yyvsp[-2].a_tag;
		/*
		 * Outer constraint for SEQUENCE OF and SET OF applies
		 * to the inner type.
		 */
		if(yyval.a_expr->expr_type == ASN_CONSTR_SEQUENCE_OF
		|| yyval.a_expr->expr_type == ASN_CONSTR_SET_OF) {
			assert(!TQ_FIRST(&(yyval.a_expr->members))->constraints);
			TQ_FIRST(&(yyval.a_expr->members))->constraints = yyvsp[0].a_constr;
		} else {
			if(yyval.a_expr->constraints) {
				assert(!yyvsp[-1].a_expr);
			} else {
				yyval.a_expr->constraints = yyvsp[0].a_constr;
			}
		}
	;
    break;}
case 102:
#line 1052 "asn1p_y.y"
{
		yyval.a_expr = yyvsp[0].a_expr;
	;
    break;}
case 103:
#line 1055 "asn1p_y.y"
{
		yyval.a_expr = asn1p_expr_new(yylineno);
		checkmem(yyval.a_expr);
		yyval.a_expr->expr_type = yyvsp[0].a_type;
		yyval.a_expr->meta_type = AMT_TYPE;
	;
    break;}
case 104:
#line 1061 "asn1p_y.y"
{
		yyval.a_expr = yyvsp[-1].a_expr;
		assert(yyval.a_expr->expr_type == A1TC_INVALID);
		yyval.a_expr->expr_type = ASN_CONSTR_CHOICE;
		yyval.a_expr->meta_type = AMT_TYPE;
	;
    break;}
case 105:
#line 1067 "asn1p_y.y"
{
		yyval.a_expr = yyvsp[-1].a_expr;
		assert(yyval.a_expr->expr_type == A1TC_INVALID);
		yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE;
		yyval.a_expr->meta_type = AMT_TYPE;
	;
    break;}
case 106:
#line 1073 "asn1p_y.y"
{
		yyval.a_expr = yyvsp[-1].a_expr;
		assert(yyval.a_expr->expr_type == A1TC_INVALID);
		yyval.a_expr->expr_type = ASN_CONSTR_SET;
		yyval.a_expr->meta_type = AMT_TYPE;
	;
    break;}
case 107:
#line 1079 "asn1p_y.y"
{
		yyval.a_expr = asn1p_expr_new(yylineno);
		checkmem(yyval.a_expr);
		yyval.a_expr->constraints = yyvsp[-2].a_constr;
		yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE_OF;
		yyval.a_expr->meta_type = AMT_TYPE;
		asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
	;
    break;}
case 108:
#line 1087 "asn1p_y.y"
{
		yyval.a_expr = asn1p_expr_new(yylineno);
		checkmem(yyval.a_expr);
		yyval.a_expr->constraints = yyvsp[-2].a_constr;
		yyval.a_expr->expr_type = ASN_CONSTR_SET_OF;
		yyval.a_expr->meta_type = AMT_TYPE;
		asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
	;
    break;}
case 109:
#line 1095 "asn1p_y.y"
{
		yyval.a_expr = asn1p_expr_new(yylineno);
		checkmem(yyval.a_expr);
		yyval.a_expr->expr_type = ASN_TYPE_ANY;
		yyval.a_expr->meta_type = AMT_TYPE;
	;
    break;}
case 110:
#line 1101 "asn1p_y.y"
{
		int ret;
		yyval.a_expr = asn1p_expr_new(yylineno);
		checkmem(yyval.a_expr);
		yyval.a_expr->reference = asn1p_ref_new(yylineno);
		ret = asn1p_ref_add_component(yyval.a_expr->reference,
			yyvsp[0].tv_str, RLT_lowercase);
		checkmem(ret == 0);
		yyval.a_expr->expr_type = ASN_TYPE_ANY;
		yyval.a_expr->meta_type = AMT_TYPE;
	;
    break;}
case 111:
#line 1115 "asn1p_y.y"
{
		int ret;
		yyval.a_expr = yyvsp[-1].a_expr;
		assert(yyval.a_expr->expr_type == 0);
		assert(yyval.a_expr->meta_type == 0);
		assert(yyval.a_expr->reference == 0);
		yyval.a_expr->reference = asn1p_ref_new(yylineno);
		checkmem(yyval.a_expr->reference);
		ret = asn1p_ref_add_component(yyval.a_expr->reference, yyvsp[-3].tv_str, RLT_UNKNOWN);
		checkmem(ret == 0);
		free(yyvsp[-3].tv_str);
		yyval.a_expr->expr_type = A1TC_PARAMETRIZED;
		yyval.a_expr->meta_type = AMT_TYPE;
	;
    break;}
case 112:
#line 1139 "asn1p_y.y"
{
		yyval.a_expr = asn1p_expr_new(yylineno);
		checkmem(yyval.a_expr);
		yyval.a_expr->reference = yyvsp[0].a_ref;
		yyval.a_expr->expr_type = A1TC_REFERENCE;
		yyval.a_expr->meta_type = AMT_TYPEREF;
	;
    break;}
case 113:
#line 1146 "asn1p_y.y"
{
		yyval.a_expr = asn1p_expr_new(yylineno);
		checkmem(yyval.a_expr);
		yyval.a_expr->reference = yyvsp[0].a_ref;
		yyval.a_expr->expr_type = A1TC_INSTANCE;
		yyval.a_expr->meta_type = AMT_TYPE;
	;
    break;}
case 114:
#line 1161 "asn1p_y.y"
{
		int ret;
		yyval.a_ref = asn1p_ref_new(yylineno);
		checkmem(yyval.a_ref);
		ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
		checkmem(ret == 0);
		free(yyvsp[0].tv_str);
	;
    break;}
case 115:
#line 1169 "asn1p_y.y"
{
		int ret;
		yyval.a_ref = asn1p_ref_new(yylineno);
		checkmem(yyval.a_ref);
		ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
		checkmem(ret == 0);
		ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
		checkmem(ret == 0);
		free(yyvsp[-2].tv_str);
	;
    break;}
case 116:
#line 1179 "asn1p_y.y"
{
		int ret;
		yyval.a_ref = asn1p_ref_new(yylineno);
		checkmem(yyval.a_ref);
		ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
		checkmem(ret == 0);
		ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_lowercase);
		checkmem(ret == 0);
		free(yyvsp[-2].tv_str);
	;
    break;}
case 117:
#line 1189 "asn1p_y.y"
{
		int ret;
		yyval.a_ref = asn1p_ref_new(yylineno);
		checkmem(yyval.a_ref);
		ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
		free(yyvsp[0].tv_str);
		checkmem(ret == 0);
	;
    break;}
case 118:
#line 1197 "asn1p_y.y"
{
		int ret;
		yyval.a_ref = yyvsp[0].a_ref;
		ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_CAPITALS);
		free(yyvsp[-2].tv_str);
		checkmem(ret == 0);
		/*
		 * Move the last element infront.
		 */
		{
			struct asn1p_ref_component_s tmp_comp;
			tmp_comp = yyval.a_ref->components[yyval.a_ref->comp_count-1];
			memmove(&yyval.a_ref->components[1],
				&yyval.a_ref->components[0],
				sizeof(yyval.a_ref->components[0])
				* (yyval.a_ref->comp_count - 1));
			yyval.a_ref->components[0] = tmp_comp;
		}
	;
    break;}
case 119:
#line 1219 "asn1p_y.y"
{
		int ret;
		yyval.a_ref = asn1p_ref_new(yylineno);
		checkmem(yyval.a_ref);
		ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
		free(yyvsp[0].a_refcomp.name);
		checkmem(ret == 0);
	;
    break;}
case 120:
#line 1227 "asn1p_y.y"
{
		int ret;
		yyval.a_ref = yyvsp[-2].a_ref;
		ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
		free(yyvsp[0].a_refcomp.name);
		checkmem(ret == 0);
	;
    break;}
case 123:
#line 1241 "asn1p_y.y"
{
		yyval.a_refcomp.lex_type = RLT_AmpUppercase;
		yyval.a_refcomp.name = yyvsp[0].tv_str;
	;
    break;}
case 124:
#line 1246 "asn1p_y.y"
{
		yyval.a_refcomp.lex_type = RLT_Amplowercase;
		yyval.a_refcomp.name = yyvsp[0].tv_str;
	;
    break;}
case 125:
#line 1259 "asn1p_y.y"
{
		yyval.a_expr = yyvsp[-2].a_expr;
		assert(yyval.a_expr->Identifier == NULL);
		yyval.a_expr->Identifier = yyvsp[-3].tv_str;
		yyval.a_expr->meta_type = AMT_VALUE;
		yyval.a_expr->value = yyvsp[0].a_value;
	;
    break;}
case 126:
#line 1269 "asn1p_y.y"
{ asn1p_lexer_hack_push_opaque_state(); ;
    break;}
case 127:
#line 1270 "asn1p_y.y"
{
		yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
		checkmem(yyval.a_value);
		yyval.a_value->type = ATV_UNPARSED;
	;
    break;}
case 128:
#line 1275 "asn1p_y.y"
{
		yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
		checkmem(yyval.a_value);
	;
    break;}
case 129:
#line 1279 "asn1p_y.y"
{
		yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
		checkmem(yyval.a_value);
	;
    break;}
case 130:
#line 1283 "asn1p_y.y"
{
		yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
		checkmem(yyval.a_value);
	;
    break;}
case 131:
#line 1287 "asn1p_y.y"
{
		yyval.a_value = yyvsp[0].a_value;
	;
    break;}
case 132:
#line 1290 "asn1p_y.y"
{
		yyval.a_value = yyvsp[0].a_value;
	;
    break;}
case 133:
#line 1296 "asn1p_y.y"
{
		asn1p_ref_t *ref;
		int ret;
		ref = asn1p_ref_new(yylineno);
		checkmem(ref);
		ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
		checkmem(ret == 0);
		yyval.a_value = asn1p_value_fromref(ref, 0);
		checkmem(yyval.a_value);
		free(yyvsp[0].tv_str);
	;
    break;}
case 134:
#line 1307 "asn1p_y.y"
{
		asn1p_ref_t *ref;
		int ret;
		ref = asn1p_ref_new(yylineno);
		checkmem(ref);
		ret = asn1p_ref_add_component(ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
		checkmem(ret == 0);
		ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
		checkmem(ret == 0);
		yyval.a_value = asn1p_value_fromref(ref, 0);
		checkmem(yyval.a_value);
		free(yyvsp[-2].tv_str);
		free(yyvsp[0].tv_str);
	;
    break;}
case 135:
#line 1324 "asn1p_y.y"
{
		yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 2;
		yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
		checkmem(yyval.tv_opaque.buf);
		yyval.tv_opaque.buf[0] = '{';
		yyval.tv_opaque.buf[1] = ' ';
		memcpy(yyval.tv_opaque.buf + 2, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
		yyval.tv_opaque.buf[yyval.tv_opaque.len] = '\0';
		free(yyvsp[0].tv_opaque.buf);
	;
    break;}
case 136:
#line 1334 "asn1p_y.y"
{
		int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
		char *p = malloc(newsize + 1);
		checkmem(p);
		memcpy(p         , yyvsp[-1].tv_opaque.buf, yyvsp[-1].tv_opaque.len);
		memcpy(p + yyvsp[-1].tv_opaque.len, yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len);
		p[newsize] = '\0';
		free(yyvsp[-1].tv_opaque.buf);
		free(yyvsp[0].tv_opaque.buf);
		yyval.tv_opaque.buf = p;
		yyval.tv_opaque.len = newsize;
	;
    break;}
case 137:
#line 1349 "asn1p_y.y"
{ yyval.a_type = ASN_BASIC_BOOLEAN; ;
    break;}
case 138:
#line 1350 "asn1p_y.y"
{ yyval.a_type = ASN_BASIC_NULL; ;
    break;}
case 139:
#line 1351 "asn1p_y.y"
{ yyval.a_type = ASN_BASIC_REAL; ;
    break;}
case 140:
#line 1352 "asn1p_y.y"
{ yyval.a_type = yyvsp[0].a_type; ;
    break;}
case 141:
#line 1353 "asn1p_y.y"
{ yyval.a_type = ASN_BASIC_OCTET_STRING; ;
    break;}
case 142:
#line 1354 "asn1p_y.y"
{ yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; ;
    break;}
case 143:
#line 1355 "asn1p_y.y"
{ yyval.a_type = ASN_BASIC_RELATIVE_OID; ;
    break;}
case 144:
#line 1356 "asn1p_y.y"
{ yyval.a_type = ASN_BASIC_EXTERNAL; ;
    break;}
case 145:
#line 1357 "asn1p_y.y"
{ yyval.a_type = ASN_BASIC_EMBEDDED_PDV; ;
    break;}
case 146:
#line 1358 "asn1p_y.y"
{ yyval.a_type = ASN_BASIC_CHARACTER_STRING; ;
    break;}
case 147:
#line 1359 "asn1p_y.y"
{ yyval.a_type = ASN_BASIC_UTCTime; ;
    break;}
case 148:
#line 1360 "asn1p_y.y"
{ yyval.a_type = ASN_BASIC_GeneralizedTime; ;
    break;}
case 149:
#line 1367 "asn1p_y.y"
{ yyval.a_type = ASN_BASIC_INTEGER; ;
    break;}
case 150:
#line 1368 "asn1p_y.y"
{ yyval.a_type = ASN_BASIC_ENUMERATED; ;
    break;}
case 151:
#line 1369 "asn1p_y.y"
{ yyval.a_type = ASN_BASIC_BIT_STRING; ;
    break;}
case 152:
#line 1373 "asn1p_y.y"
{
		yyval.a_expr = asn1p_expr_new(yylineno);
		checkmem(yyval.a_expr);
		yyval.a_expr->expr_type = yyvsp[0].a_type;
		yyval.a_expr->meta_type = AMT_TYPE;
	;
    break;}
case 153:
#line 1379 "asn1p_y.y"
{
		if(yyvsp[0].a_expr) {
			yyval.a_expr = yyvsp[0].a_expr;
		} else {
			yyval.a_expr = asn1p_expr_new(yylineno);
			checkmem(yyval.a_expr);
		}
		yyval.a_expr->expr_type = yyvsp[-1].a_type;
		yyval.a_expr->meta_type = AMT_TYPE;
	;
    break;}
case 154:
#line 1392 "asn1p_y.y"
{ yyval.a_type = ASN_STRING_BMPString; ;
    break;}
case 155:
#line 1393 "asn1p_y.y"
{
		yyval.a_type = ASN_STRING_GeneralString;
		fprintf(stderr, "WARNING: GeneralString is not fully supported");
	;
    break;}
case 156:
#line 1397 "asn1p_y.y"
{
		yyval.a_type = ASN_STRING_GraphicString;
		fprintf(stderr, "WARNING: GraphicString is not fully supported");
	;
    break;}
case 157:
#line 1401 "asn1p_y.y"
{ yyval.a_type = ASN_STRING_IA5String; ;
    break;}
case 158:
#line 1402 "asn1p_y.y"
{ yyval.a_type = ASN_STRING_ISO646String; ;
    break;}
case 159:
#line 1403 "asn1p_y.y"
{ yyval.a_type = ASN_STRING_NumericString; ;
    break;}
case 160:
#line 1404 "asn1p_y.y"
{ yyval.a_type = ASN_STRING_PrintableString; ;
    break;}
case 161:
#line 1405 "asn1p_y.y"
{
		yyval.a_type = ASN_STRING_T61String;
		fprintf(stderr, "WARNING: T61String is not fully supported");
	;
    break;}
case 162:
#line 1409 "asn1p_y.y"
{ yyval.a_type = ASN_STRING_TeletexString; ;
    break;}
case 163:
#line 1410 "asn1p_y.y"
{ yyval.a_type = ASN_STRING_UniversalString; ;
    break;}
case 164:
#line 1411 "asn1p_y.y"
{ yyval.a_type = ASN_STRING_UTF8String; ;
    break;}
case 165:
#line 1412 "asn1p_y.y"
{
		yyval.a_type = ASN_STRING_VideotexString;
		fprintf(stderr, "WARNING: VideotexString is not fully supported");
	;
    break;}
case 166:
#line 1416 "asn1p_y.y"
{ yyval.a_type = ASN_STRING_VisibleString; ;
    break;}
case 167:
#line 1417 "asn1p_y.y"
{ yyval.a_type = ASN_STRING_ObjectDescriptor; ;
    break;}
case 173:
#line 1429 "asn1p_y.y"
{ yyval.a_constr = 0; ;
    break;}
case 174:
#line 1430 "asn1p_y.y"
{
		yyval.a_constr = yyvsp[0].a_constr;
	;
    break;}
case 175:
#line 1436 "asn1p_y.y"
{
		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
	;
    break;}
case 176:
#line 1439 "asn1p_y.y"
{
		/*
		 * This is a special case, for compatibility purposes.
		 * It goes without parentheses.
		 */
		CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_SIZE, yyvsp[-1].a_constr, 0);
	;
    break;}
case 177:
#line 1449 "asn1p_y.y"
{
		yyval.a_constr = yyvsp[-1].a_constr;
	;
    break;}
case 178:
#line 1452 "asn1p_y.y"
{
		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
	;
    break;}
case 179:
#line 1458 "asn1p_y.y"
{
		yyval.a_constr = yyvsp[0].a_constr;
	;
    break;}
case 180:
#line 1461 "asn1p_y.y"
{
		asn1p_constraint_t *ct;
		ct = asn1p_constraint_new(yylineno);
		ct->type = ACT_EL_EXT;
		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
	;
    break;}
case 181:
#line 1467 "asn1p_y.y"
{
		asn1p_constraint_t *ct;
		ct = asn1p_constraint_new(yylineno);
		ct->type = ACT_EL_EXT;
		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-4].a_constr, ct);
		ct = yyval.a_constr;
		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
	;
    break;}
case 182:
#line 1478 "asn1p_y.y"
{
		yyval.a_constr = yyvsp[0].a_constr;
	;
    break;}
case 183:
#line 1481 "asn1p_y.y"
{
		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
	;
    break;}
case 184:
#line 1484 "asn1p_y.y"
{
		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
	;
    break;}
case 185:
#line 1487 "asn1p_y.y"
{
		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
	;
    break;}
case 186:
#line 1493 "asn1p_y.y"
{
		int ret;
		yyval.a_constr = asn1p_constraint_new(yylineno);
		checkmem(yyval.a_constr);
		yyval.a_constr->type = yyvsp[-3].a_ctype;
		ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
		checkmem(ret == 0);
	;
    break;}
case 187:
#line 1501 "asn1p_y.y"
{
		int ret;
		yyval.a_constr = asn1p_constraint_new(yylineno);
		checkmem(yyval.a_constr);
		yyval.a_constr->type = ACT_CA_SET;
		ret = asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
		checkmem(ret == 0);
	;
    break;}
case 188:
#line 1509 "asn1p_y.y"
{
		yyval.a_constr = asn1p_constraint_new(yylineno);
		checkmem(yyval.a_constr);
		yyval.a_constr->type = ACT_EL_VALUE;
		yyval.a_constr->value = yyvsp[0].a_value;
	;
    break;}
case 189:
#line 1515 "asn1p_y.y"
{
		yyval.a_constr = asn1p_constraint_new(yylineno);
		checkmem(yyval.a_constr);
		yyval.a_constr->type = yyvsp[-1].a_ctype;
		yyval.a_constr->range_start = yyvsp[-2].a_value;
		yyval.a_constr->range_stop = yyvsp[0].a_value;
	;
    break;}
case 190:
#line 1522 "asn1p_y.y"
{
		yyval.a_constr = asn1p_constraint_new(yylineno);
		checkmem(yyval.a_constr);
		yyval.a_constr->type = yyvsp[-1].a_ctype;
		yyval.a_constr->range_start = asn1p_value_fromint(-123);
		yyval.a_constr->range_stop = yyvsp[0].a_value;
		yyval.a_constr->range_start->type = ATV_MIN;
	;
    break;}
case 191:
#line 1530 "asn1p_y.y"
{
		yyval.a_constr = asn1p_constraint_new(yylineno);
		checkmem(yyval.a_constr);
		yyval.a_constr->type = yyvsp[-1].a_ctype;
		yyval.a_constr->range_start = yyvsp[-2].a_value;
		yyval.a_constr->range_stop = asn1p_value_fromint(321);
		yyval.a_constr->range_stop->type = ATV_MAX;
	;
    break;}
case 192:
#line 1538 "asn1p_y.y"
{
		yyval.a_constr = asn1p_constraint_new(yylineno);
		checkmem(yyval.a_constr);
		yyval.a_constr->type = yyvsp[-1].a_ctype;
		yyval.a_constr->range_start = asn1p_value_fromint(-123);
		yyval.a_constr->range_stop = asn1p_value_fromint(321);
		yyval.a_constr->range_start->type = ATV_MIN;
		yyval.a_constr->range_stop->type = ATV_MAX;
	;
    break;}
case 193:
#line 1547 "asn1p_y.y"
{
		yyval.a_constr = yyvsp[0].a_constr;
	;
    break;}
case 194:
#line 1550 "asn1p_y.y"
{
		yyval.a_constr = yyvsp[0].a_constr;
	;
    break;}
case 195:
#line 1556 "asn1p_y.y"
{ yyval.a_ctype = ACT_EL_RANGE; ;
    break;}
case 196:
#line 1557 "asn1p_y.y"
{ yyval.a_ctype = ACT_EL_RLRANGE; ;
    break;}
case 197:
#line 1558 "asn1p_y.y"
{ yyval.a_ctype = ACT_EL_LLRANGE; ;
    break;}
case 198:
#line 1559 "asn1p_y.y"
{ yyval.a_ctype = ACT_EL_ULRANGE; ;
    break;}
case 199:
#line 1563 "asn1p_y.y"
{
		yyval.a_ctype = ACT_CT_SIZE;
	;
    break;}
case 200:
#line 1566 "asn1p_y.y"
{
		yyval.a_ctype = ACT_CT_FROM;
	;
    break;}
case 201:
#line 1572 "asn1p_y.y"
{
		yyval.a_value = yyvsp[0].a_value;
	;
    break;}
case 202:
#line 1575 "asn1p_y.y"
{
		asn1p_ref_t *ref;
		int ret;
		ref = asn1p_ref_new(yylineno);
		checkmem(ref);
		ret = asn1p_ref_add_component(ref, yyvsp[0].tv_str, RLT_lowercase);
		checkmem(ret == 0);
		yyval.a_value = asn1p_value_fromref(ref, 0);
		checkmem(yyval.a_value);
		free(yyvsp[0].tv_str);
	;
    break;}
case 203:
#line 1586 "asn1p_y.y"
{
		yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
		checkmem(yyval.a_value);
	;
    break;}
case 204:
#line 1591 "asn1p_y.y"
{
		yyval.a_value = asn1p_value_fromint(0);
		checkmem(yyval.a_value);
		yyval.a_value->type = ATV_FALSE;
	;
    break;}
case 205:
#line 1596 "asn1p_y.y"
{
		yyval.a_value = asn1p_value_fromint(1);
		checkmem(yyval.a_value);
		yyval.a_value->type = ATV_TRUE;
	;
    break;}
case 206:
#line 1604 "asn1p_y.y"
{
		CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
	;
    break;}
case 207:
#line 1610 "asn1p_y.y"
{
		yyval.a_constr = yyvsp[0].a_constr;
	;
    break;}
case 208:
#line 1613 "asn1p_y.y"
{
		CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
	;
    break;}
case 209:
#line 1619 "asn1p_y.y"
{
		yyval.a_constr = asn1p_constraint_new(yylineno);
		checkmem(yyval.a_constr);
		yyval.a_constr->type = ACT_EL_EXT;
	;
    break;}
case 210:
#line 1624 "asn1p_y.y"
{
		yyval.a_constr = asn1p_constraint_new(yylineno);
		checkmem(yyval.a_constr);
		yyval.a_constr->type = ACT_EL_VALUE;
		yyval.a_constr->value = asn1p_value_frombuf(yyvsp[-2].tv_str, strlen(yyvsp[-2].tv_str), 0);
		yyval.a_constr->presence = yyvsp[0].a_pres;
	;
    break;}
case 211:
#line 1637 "asn1p_y.y"
{ yyval.a_pres = ACPRES_DEFAULT; ;
    break;}
case 212:
#line 1638 "asn1p_y.y"
{ yyval.a_pres = yyvsp[0].a_pres; ;
    break;}
case 213:
#line 1642 "asn1p_y.y"
{
		yyval.a_pres = ACPRES_PRESENT;
	;
    break;}
case 214:
#line 1645 "asn1p_y.y"
{
		yyval.a_pres = ACPRES_ABSENT;
	;
    break;}
case 215:
#line 1648 "asn1p_y.y"
{
		yyval.a_pres = ACPRES_OPTIONAL;
	;
    break;}
case 216:
#line 1654 "asn1p_y.y"
{
		yyval.a_constr = yyvsp[0].a_constr;
	;
    break;}
case 217:
#line 1657 "asn1p_y.y"
{
		yyval.a_constr = yyvsp[0].a_constr;
	;
    break;}
case 218:
#line 1666 "asn1p_y.y"
{
		asn1p_ref_t *ref = asn1p_ref_new(yylineno);
		asn1p_constraint_t *ct;
		int ret;
		ret = asn1p_ref_add_component(ref, yyvsp[-1].tv_str, 0);
		checkmem(ret == 0);
		ct = asn1p_constraint_new(yylineno);
		checkmem(yyval.a_constr);
		ct->type = ACT_EL_VALUE;
		ct->value = asn1p_value_fromref(ref, 0);
		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
	;
    break;}
case 219:
#line 1681 "asn1p_y.y"
{
		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
	;
    break;}
case 220:
#line 1687 "asn1p_y.y"
{
		yyval.a_constr = asn1p_constraint_new(yylineno);
		checkmem(yyval.a_constr);
		yyval.a_constr->type = ACT_EL_VALUE;
		yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
	;
    break;}
case 221:
#line 1693 "asn1p_y.y"
{
		asn1p_constraint_t *ct;
		ct = asn1p_constraint_new(yylineno);
		checkmem(ct);
		ct->type = ACT_EL_VALUE;
		ct->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
	;
    break;}
case 222:
#line 1707 "asn1p_y.y"
{
		char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
		int ret;
		*p = '@';
		strcpy(p + 1, yyvsp[0].tv_str);
		yyval.a_ref = asn1p_ref_new(yylineno);
		ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
		checkmem(ret == 0);
		free(p);
		free(yyvsp[0].tv_str);
	;
    break;}
case 223:
#line 1718 "asn1p_y.y"
{
		char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
		int ret;
		p[0] = '@';
		p[1] = '.';
		strcpy(p + 2, yyvsp[0].tv_str);
		yyval.a_ref = asn1p_ref_new(yylineno);
		ret = asn1p_ref_add_component(yyval.a_ref, p, 0);
		checkmem(ret == 0);
		free(p);
		free(yyvsp[0].tv_str);
	;
    break;}
case 224:
#line 1734 "asn1p_y.y"
{
		yyval.tv_str = yyvsp[0].tv_str;
	;
    break;}
case 225:
#line 1737 "asn1p_y.y"
{
		int l1 = strlen(yyvsp[-2].tv_str);
		int l3 = strlen(yyvsp[0].tv_str);
		yyval.tv_str = malloc(l1 + 1 + l3 + 1);
		memcpy(yyval.tv_str, yyvsp[-2].tv_str, l1);
		yyval.tv_str[l1] = '.';
		memcpy(yyval.tv_str + l1 + 1, yyvsp[0].tv_str, l3);
		yyval.tv_str[l1 + 1 + l3] = '\0';
	;
    break;}
case 226:
#line 1755 "asn1p_y.y"
{ yyval.a_marker = EM_NOMARK; ;
    break;}
case 227:
#line 1756 "asn1p_y.y"
{ yyval.a_marker = yyvsp[0].a_marker; ;
    break;}
case 228:
#line 1760 "asn1p_y.y"
{
		yyval.a_marker = EM_OPTIONAL;
	;
    break;}
case 229:
#line 1763 "asn1p_y.y"
{
		yyval.a_marker = EM_DEFAULT;
		/* FIXME: store DefaultValue somewhere */
	;
    break;}
case 230:
#line 1770 "asn1p_y.y"
{
	;
    break;}
case 231:
#line 1772 "asn1p_y.y"
{
	;
    break;}
case 232:
#line 1774 "asn1p_y.y"
{ asn1p_lexer_hack_push_opaque_state(); ;
    break;}
case 233:
#line 1774 "asn1p_y.y"
{
	;
    break;}
case 234:
#line 1795 "asn1p_y.y"
{
		yyval.a_expr = asn1p_expr_new(yylineno);
		checkmem(yyval.a_expr);
	;
    break;}
case 235:
#line 1799 "asn1p_y.y"
{
		yyval.a_expr = yyvsp[-1].a_expr;
	;
    break;}
case 236:
#line 1805 "asn1p_y.y"
{
		yyval.a_expr = asn1p_expr_new(yylineno);
		checkmem(yyval.a_expr);
		asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
	;
    break;}
case 237:
#line 1810 "asn1p_y.y"
{
		yyval.a_expr = yyvsp[-2].a_expr;
		asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
	;
    break;}
case 238:
#line 1817 "asn1p_y.y"
{
		yyval.a_expr = asn1p_expr_new(yylineno);
		checkmem(yyval.a_expr);
		yyval.a_expr->expr_type = A1TC_UNIVERVAL;
		yyval.a_expr->meta_type = AMT_VALUE;
		yyval.a_expr->Identifier = yyvsp[0].tv_str;
	;
    break;}
case 239:
#line 1824 "asn1p_y.y"
{
		yyval.a_expr = asn1p_expr_new(yylineno);
		checkmem(yyval.a_expr);
		yyval.a_expr->expr_type = A1TC_UNIVERVAL;
		yyval.a_expr->meta_type = AMT_VALUE;
		yyval.a_expr->Identifier = yyvsp[-3].tv_str;
		yyval.a_expr->value = yyvsp[-1].a_value;
	;
    break;}
case 240:
#line 1832 "asn1p_y.y"
{
		yyval.a_expr = asn1p_expr_new(yylineno);
		checkmem(yyval.a_expr);
		yyval.a_expr->expr_type = A1TC_UNIVERVAL;
		yyval.a_expr->meta_type = AMT_VALUE;
		yyval.a_expr->Identifier = yyvsp[-3].tv_str;
		yyval.a_expr->value = yyvsp[-1].a_value;
	;
    break;}
case 241:
#line 1840 "asn1p_y.y"
{
		yyval.a_expr = asn1p_expr_new(yylineno);
		checkmem(yyval.a_expr);
		yyval.a_expr->expr_type = A1TC_UNIVERVAL;
		yyval.a_expr->meta_type = AMT_VALUE;
		yyval.a_expr->value = yyvsp[0].a_value;
	;
    break;}
case 242:
#line 1847 "asn1p_y.y"
{
		yyval.a_expr = asn1p_expr_new(yylineno);
		checkmem(yyval.a_expr);
		yyval.a_expr->Identifier = strdup("...");
		checkmem(yyval.a_expr->Identifier);
		yyval.a_expr->expr_type = A1TC_EXTENSIBLE;
		yyval.a_expr->meta_type = AMT_VALUE;
	;
    break;}
case 243:
#line 1858 "asn1p_y.y"
{
		yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
		checkmem(yyval.a_value);
	;
    break;}
case 244:
#line 1862 "asn1p_y.y"
{
		yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
		checkmem(yyval.a_value);
	;
    break;}
case 245:
#line 1893 "asn1p_y.y"
{ memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); ;
    break;}
case 246:
#line 1894 "asn1p_y.y"
{ yyval.a_tag = yyvsp[0].a_tag; ;
    break;}
case 247:
#line 1898 "asn1p_y.y"
{
		yyval.a_tag = yyvsp[0].a_tag;
		yyval.a_tag.tag_mode = TM_DEFAULT;
	;
    break;}
case 248:
#line 1902 "asn1p_y.y"
{
		yyval.a_tag = yyvsp[-1].a_tag;
		yyval.a_tag.tag_mode = TM_IMPLICIT;
	;
    break;}
case 249:
#line 1906 "asn1p_y.y"
{
		yyval.a_tag = yyvsp[-1].a_tag;
		yyval.a_tag.tag_mode = TM_EXPLICIT;
	;
    break;}
case 250:
#line 1913 "asn1p_y.y"
{
		checkmem(yyvsp[0].tv_str);
		yyval.tv_str = yyvsp[0].tv_str;
	;
    break;}
case 251:
#line 1917 "asn1p_y.y"
{
		checkmem(yyvsp[0].tv_str);
		yyval.tv_str = yyvsp[0].tv_str;
	;
    break;}
case 252:
#line 1925 "asn1p_y.y"
{
		checkmem(yyvsp[0].tv_str);
		yyval.tv_str = yyvsp[0].tv_str;
	;
    break;}
case 253:
#line 1932 "asn1p_y.y"
{
		checkmem(yyvsp[0].tv_str);
		yyval.tv_str = yyvsp[0].tv_str;
	;
    break;}
}
   /* the action file gets copied in in place of this dollarsign */
#line 543 "/usr/share/bison.simple"

  yyvsp -= yylen;
  yyssp -= yylen;
#ifdef YYLSP_NEEDED
  yylsp -= yylen;
#endif

#if YYDEBUG != 0
  if (yydebug)
    {
      short *ssp1 = yyss - 1;
      fprintf (stderr, "state stack now");
      while (ssp1 != yyssp)
	fprintf (stderr, " %d", *++ssp1);
      fprintf (stderr, "\n");
    }
#endif

  *++yyvsp = yyval;

#ifdef YYLSP_NEEDED
  yylsp++;
  if (yylen == 0)
    {
      yylsp->first_line = yylloc.first_line;
      yylsp->first_column = yylloc.first_column;
      yylsp->last_line = (yylsp-1)->last_line;
      yylsp->last_column = (yylsp-1)->last_column;
      yylsp->text = 0;
    }
  else
    {
      yylsp->last_line = (yylsp+yylen-1)->last_line;
      yylsp->last_column = (yylsp+yylen-1)->last_column;
    }
#endif

  /* Now "shift" the result of the reduction.
     Determine what state that goes to,
     based on the state we popped back to
     and the rule number reduced by.  */

  yyn = yyr1[yyn];

  yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
  if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
    yystate = yytable[yystate];
  else
    yystate = yydefgoto[yyn - YYNTBASE];

  goto yynewstate;

yyerrlab:   /* here on detecting error */

  if (! yyerrstatus)
    /* If not already recovering from an error, report this error.  */
    {
      ++yynerrs;

#ifdef YYERROR_VERBOSE
      yyn = yypact[yystate];

      if (yyn > YYFLAG && yyn < YYLAST)
	{
	  int size = 0;
	  char *msg;
	  int x, count;

	  count = 0;
	  /* Start X at -yyn if nec to avoid negative indexes in yycheck.  */
	  for (x = (yyn < 0 ? -yyn : 0);
	       x < (ssize_t)(sizeof(yytname) / sizeof(char *)); x++)
	    if (yycheck[x + yyn] == x)
	      size += strlen(yytname[x]) + 15, count++;
	  msg = (char *) malloc(size + 15);
	  if (msg != 0)
	    {
	      strcpy(msg, "parse error");

	      if (count < 5)
		{
		  count = 0;
		  for (x = (yyn < 0 ? -yyn : 0);
		       x < (ssize_t)(sizeof(yytname) / sizeof(char *)); x++)
		    if (yycheck[x + yyn] == x)
		      {
			strcat(msg, count == 0 ? ", expecting `" : " or `");
			strcat(msg, yytname[x]);
			strcat(msg, "'");
			count++;
		      }
		}
	      yyerror(msg);
	      free(msg);
	    }
	  else
	    yyerror ("parse error; also virtual memory exceeded");
	}
      else
#endif /* YYERROR_VERBOSE */
	yyerror("parse error");
    }

  goto yyerrlab1;
yyerrlab1:   /* here on error raised explicitly by an action */

  if (yyerrstatus == 3)
    {
      /* if just tried and failed to reuse lookahead token after an error, discard it.  */

      /* return failure if at end of input */
      if (yychar == YYEOF)
	YYABORT;

#if YYDEBUG != 0
      if (yydebug)
	fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
#endif

      yychar = YYEMPTY;
    }

  /* Else will try to reuse lookahead token
     after shifting the error token.  */

  yyerrstatus = 3;		/* Each real token shifted decrements this */

  goto yyerrhandle;

yyerrdefault:  /* current state does not do anything special for the error token. */

#if 0
  /* This is wrong; only states that explicitly want error tokens
     should shift them.  */
  yyn = yydefact[yystate];  /* If its default is to accept any token, ok.  Otherwise pop it.*/
  if (yyn) goto yydefault;
#endif

yyerrpop:   /* pop the current state because it cannot handle the error token */

  if (yyssp == yyss) YYABORT;
  yyvsp--;
  yystate = *--yyssp;
#ifdef YYLSP_NEEDED
  yylsp--;
#endif

#if YYDEBUG != 0
  if (yydebug)
    {
      short *ssp1 = yyss - 1;
      fprintf (stderr, "Error: state stack now");
      while (ssp1 != yyssp)
	fprintf (stderr, " %d", *++ssp1);
      fprintf (stderr, "\n");
    }
#endif

yyerrhandle:

  yyn = yypact[yystate];
  if (yyn == YYFLAG)
    goto yyerrdefault;

  yyn += YYTERROR;
  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
    goto yyerrdefault;

  yyn = yytable[yyn];
  if (yyn < 0)
    {
      if (yyn == YYFLAG)
	goto yyerrpop;
      yyn = -yyn;
      goto yyreduce;
    }
  else if (yyn == 0)
    goto yyerrpop;

  if (yyn == YYFINAL)
    YYACCEPT;

#if YYDEBUG != 0
  if (yydebug)
    fprintf(stderr, "Shifting error token, ");
#endif

  *++yyvsp = yylval;
#ifdef YYLSP_NEEDED
  *++yylsp = yylloc;
#endif

  yystate = yyn;
  goto yynewstate;

 yyacceptlab:
  /* YYACCEPT comes here.  */
  if (yyfree_stacks)
    {
      free (yyss);
      free (yyvs);
#ifdef YYLSP_NEEDED
      free (yyls);
#endif
    }
  return 0;

 yyabortlab:
  /* YYABORT comes here.  */
  if (yyfree_stacks)
    {
      free (yyss);
      free (yyvs);
#ifdef YYLSP_NEEDED
      free (yyls);
#endif
    }
  return 1;
}
#line 1938 "asn1p_y.y"



/*
 * Convert Xstring ('0101'B or '5'H) to the binary vector.
 */
static asn1p_value_t *
_convert_bitstring2binary(char *str, int base) {
	asn1p_value_t *val;
	int slen;
	int memlen;
	int baselen;
	int bits;
	uint8_t *binary_vector;
	uint8_t *bv_ptr;
	uint8_t cur_val;

	assert(str);
	assert(str[0] == '\'');

	switch(base) {
	case 'B':
		baselen = 1;
		break;
	case 'H':
		baselen = 4;
		break;
	default:
		assert(base == 'B' || base == 'H');
		errno = EINVAL;
		return NULL;
	}

	slen = strlen(str);
	assert(str[slen - 1] == base);
	assert(str[slen - 2] == '\'');

	memlen = slen / (8 / baselen);	/* Conservative estimate */

	bv_ptr = binary_vector = malloc(memlen + 1);
	if(bv_ptr == NULL)
		/* ENOMEM */
		return NULL;

	cur_val = 0;
	bits = 0;
	while(*(++str) != '\'') {
		switch(baselen) {
		case 1:
			switch(*str) {
			case '1':
				cur_val |= 1 << (7 - (bits % 8));
			case '0':
				break;
			default:
				assert(!"_y UNREACH1");
			case ' ': case '\r': case '\n':
				continue;
			}
			break;
		case 4:
			switch(*str) {
			case '0': case '1': case '2': case '3': case '4':
			case '5': case '6': case '7': case '8': case '9':
				cur_val |= (*str - '0') << (4 - (bits % 8));
				break;
			case 'A': case 'B': case 'C':
			case 'D': case 'E': case 'F':
				cur_val |= ((*str - 'A') + 10)
					<< (4 - (bits % 8));
				break;
			default:
				assert(!"_y UNREACH2");
			case ' ': case '\r': case '\n':
				continue;
			}
			break;
		}

		bits += baselen;
		if((bits % 8) == 0) {
			*bv_ptr++ = cur_val;
			cur_val = 0;
		}
	}

	*bv_ptr = cur_val;
	assert((bv_ptr - binary_vector) <= memlen);

	val = asn1p_value_frombits(binary_vector, bits, 0);
	if(val == NULL) {
		free(binary_vector);
	}

	return val;
}

extern char *asn1p_text;

int
yyerror(const char *msg) {
	fprintf(stderr,
		"ASN.1 grammar parse error "
		"near line %d (token \"%s\"): %s\n",
		yylineno, asn1p_text, msg);
	return -1;
}


