⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 asn1p_y.y

📁 ASN.1解析解码工具,可以解析各种ASN.1格式的文件,并对相应的BER文件解码
💻 Y
📖 第 1 页 / 共 4 页
字号:
			return yyerror("Unterminated IMPORTS FROM, "					"expected semicolon ';'");		saved_aid = 0;		$$ = $2;	}	/*	 * Some error cases.	 */	| TOK_IMPORTS TOK_FROM /* ... */ {		return yyerror("Empty IMPORTS list");	}	;ImportsBundleSet:	ImportsBundle {		$$ = asn1p_module_new();		checkmem($$);		TQ_ADD_TYPE(asn1p_xports_t,&($$->imports), $1, xp_next);	}	| ImportsBundleSet ImportsBundle {		$$ = $1;		TQ_ADD_TYPE(asn1p_xports_t,&($$->imports), $2, xp_next);	}	;AssignedIdentifier:	{ memset(&$$, 0, sizeof($$)); }	| ObjectIdentifier { $$.oid = $1; };	/* | DefinedValue { $$.value = $1; }; // Handled through saved_aid */ImportsBundle:	ImportsList TOK_FROM TypeRefName AssignedIdentifier {		$$ = $1;		$$->fromModuleName = $3;		$$->identifier = $4;		/* This stupid thing is used for look-back hack. */		saved_aid = $$->identifier.oid ? 0 : &($$->identifier);		checkmem($$);	}	;ImportsList:	ImportsElement {		$$ = asn1p_xports_new();		checkmem($$);		TQ_ADD_TYPE(asn1p_expr_t,&($$->members), $1, next);	}	| ImportsList ',' ImportsElement {		$$ = $1;		TQ_ADD_TYPE(asn1p_expr_t,&($$->members), $3, next);	}	;ImportsElement:	TypeRefName {		$$ = NEW_EXPR();		checkmem($$);		$$->Identifier = $1;		$$->expr_type = A1TC_REFERENCE;	}	| TypeRefName '{' '}' {		/* Completely equivalent to above */		$$ = NEW_EXPR();		checkmem($$);		$$->Identifier = $1;		$$->expr_type = A1TC_REFERENCE;	}	| Identifier {		$$ = NEW_EXPR();		checkmem($$);		$$->Identifier = $1;		$$->expr_type = A1TC_REFERENCE;	}	;optExports:	{ $$ = 0; }	| ExportsDefinition {		$$ = asn1p_module_new();		checkmem($$);		if($1) {			TQ_ADD_TYPE(asn1p_xports_t,&($$->exports), $1, xp_next);		} else {			/* "EXPORTS ALL;" */		}	}	;ExportsDefinition:	TOK_EXPORTS ExportsBody ';' {		$$ = $2;	}	| TOK_EXPORTS TOK_ALL ';' {		$$ = 0;	}	| TOK_EXPORTS ';' {		/* Empty EXPORTS clause effectively prohibits export. */		$$ = asn1p_xports_new();		checkmem($$);	}	;ExportsBody:	ExportsElement {		$$ = asn1p_xports_new();		assert($$);		TQ_ADD_TYPE(asn1p_expr_t,&($$->members), $1, next);	}	| ExportsBody ',' ExportsElement {		$$ = $1;		TQ_ADD_TYPE(asn1p_expr_t,&($$->members), $3, next);	}	;ExportsElement:	TypeRefName {		$$ = NEW_EXPR();		checkmem($$);		$$->Identifier = $1;		$$->expr_type = A1TC_EXPORTVAR;	}	| TypeRefName '{' '}' {		$$ = NEW_EXPR();		checkmem($$);		$$->Identifier = $1;		$$->expr_type = A1TC_EXPORTVAR;	}	| Identifier {		$$ = NEW_EXPR();		checkmem($$);		$$->Identifier = $1;		$$->expr_type = A1TC_EXPORTVAR;	}	;ValueSet: '{' ElementSetSpecs '}' { $$ = $2; };ValueSetTypeAssignment:	TypeRefName DefinedType TOK_PPEQ ValueSet {		$$ = $2;		assert($$->Identifier == 0);		$$->Identifier = $1;		$$->meta_type = AMT_VALUESET;		$$->constraints = $4;	}	;DefinedType:	BasicType {		$$ = $1;	}	/*	 * A DefinedType reference.	 * "CLASS1.&id.&id2"	 * or	 * "Module.Type"	 * or	 * "Module.identifier"	 * or	 * "Type"	 */	| ComplexTypeReference {		$$ = NEW_EXPR();		checkmem($$);		$$->reference = $1;		$$->expr_type = A1TC_REFERENCE;		$$->meta_type = AMT_TYPEREF;	}	/*	 * A parameterized assignment.	 */	| ComplexTypeReference '{' ActualParameterList '}' {		$$ = NEW_EXPR();		checkmem($$);		$$->reference = $1;		$$->rhs_pspecs = $3;		$$->expr_type = A1TC_REFERENCE;		$$->meta_type = AMT_TYPEREF;	}	;/* * Data Type Reference. * === EXAMPLE === * Type3 ::= CHOICE { a Type1,  b Type 2 } * === EOF === */DataTypeReference:	/*	 * Optionally tagged type definition.	 */	TypeRefName TOK_PPEQ Type {		$$ = $3;		$$->Identifier = $1;		assert($$->expr_type);		assert($$->meta_type);	}	| TypeRefName TOK_PPEQ ObjectClass {		$$ = $3;		$$->Identifier = $1;		assert($$->expr_type == A1TC_CLASSDEF);		assert($$->meta_type == AMT_OBJECTCLASS);	}	/*	 * Parameterized <Type> declaration:	 * === EXAMPLE ===	 *   SIGNED { ToBeSigned } ::= SEQUENCE {	 *      toBeSigned  ToBeSigned,	 *      algorithm   AlgorithmIdentifier,	 *      signature   BIT STRING	 *   }	 * === EOF ===	 */	| TypeRefName '{' ParameterArgumentList '}' TOK_PPEQ Type {		$$ = $6;		$$->Identifier = $1;		$$->lhs_params = $3;	}	/* Parameterized CLASS declaration */	| TypeRefName '{' ParameterArgumentList '}' TOK_PPEQ ObjectClass {		$$ = $6;		$$->Identifier = $1;		$$->lhs_params = $3;	}	;ParameterArgumentList:	ParameterArgumentName {		int ret;		$$ = asn1p_paramlist_new(yylineno);		checkmem($$);		ret = asn1p_paramlist_add_param($$, $1.governor, $1.argument);		checkmem(ret == 0);		if($1.governor) asn1p_ref_free($1.governor);		if($1.argument) free($1.argument);	}	| ParameterArgumentList ',' ParameterArgumentName {		int ret;		$$ = $1;		ret = asn1p_paramlist_add_param($$, $3.governor, $3.argument);		checkmem(ret == 0);		if($3.governor) asn1p_ref_free($3.governor);		if($3.argument) free($3.argument);	}	;	ParameterArgumentName:	TypeRefName {		$$.governor = NULL;		$$.argument = $1;	}	| TypeRefName ':' Identifier {		int ret;		$$.governor = asn1p_ref_new(yylineno);		ret = asn1p_ref_add_component($$.governor, $1, 0);		checkmem(ret == 0);		$$.argument = $3;	}	| TypeRefName ':' TypeRefName {		int ret;		$$.governor = asn1p_ref_new(yylineno);		ret = asn1p_ref_add_component($$.governor, $1, 0);		checkmem(ret == 0);		$$.argument = $3;	}	| BasicTypeId ':' Identifier {		int ret;		$$.governor = asn1p_ref_new(yylineno);		ret = asn1p_ref_add_component($$.governor,			ASN_EXPR_TYPE2STR($1), 1);		checkmem(ret == 0);		$$.argument = $3;	}	| BasicTypeId ':' TypeRefName {		int ret;		$$.governor = asn1p_ref_new(yylineno);		ret = asn1p_ref_add_component($$.governor,			ASN_EXPR_TYPE2STR($1), 1);		checkmem(ret == 0);		$$.argument = $3;	}	;ActualParameterList:	ActualParameter {		$$ = NEW_EXPR();		checkmem($$);		asn1p_expr_add($$, $1);	}	| ActualParameterList ',' ActualParameter {		$$ = $1;		asn1p_expr_add($$, $3);	}	;ActualParameter:	Type {		$$ = $1;	}	| SimpleValue {		$$ = NEW_EXPR();		checkmem($$);		$$->Identifier = "?";		$$->expr_type = A1TC_REFERENCE;		$$->meta_type = AMT_VALUE;		$$->value = $1;	}	| Identifier {		asn1p_ref_t *ref;		$$ = NEW_EXPR();		checkmem($$);		$$->Identifier = $1;		$$->expr_type = A1TC_REFERENCE;		$$->meta_type = AMT_VALUE;		ref = asn1p_ref_new(yylineno);		asn1p_ref_add_component(ref, $1, RLT_lowercase);		$$->value = asn1p_value_fromref(ref, 0);	}	| ValueSet {		$$ = NEW_EXPR();		$$->expr_type = A1TC_VALUESET;		$$->meta_type = AMT_VALUESET;		$$->constraints = $1;	}	;/*	| '{' ActualParameter '}' {		$$ = NEW_EXPR();		checkmem($$);		asn1p_expr_add($$, $2);		$$->expr_type = A1TC_PARAMETRIZED;		$$->meta_type = AMT_TYPE;	}	;*//* * A collection of constructed data type members. */optComponentTypeLists:	{ $$ = NEW_EXPR(); }	| ComponentTypeLists { $$ = $1; };ComponentTypeLists:	ComponentType {		$$ = NEW_EXPR();		checkmem($$);		asn1p_expr_add($$, $1);	}	| ComponentTypeLists ',' ComponentType {		$$ = $1;		asn1p_expr_add($$, $3);	}	;ComponentType:	Identifier Type optMarker {		$$ = $2;		assert($$->Identifier == 0);		$$->Identifier = $1;		$3.flags |= $$->marker.flags;		$$->marker = $3;	}	| Type optMarker {		$$ = $1;		$2.flags |= $$->marker.flags;		$$->marker = $2;		_fixup_anonymous_identifier($$);	}	| TOK_COMPONENTS TOK_OF Type {		$$ = NEW_EXPR();		checkmem($$);		$$->meta_type = $3->meta_type;		$$->expr_type = A1TC_COMPONENTS_OF;		asn1p_expr_add($$, $3);	}	| ExtensionAndException {		$$ = $1;	}	;AlternativeTypeLists:	AlternativeType {		$$ = NEW_EXPR();		checkmem($$);		asn1p_expr_add($$, $1);	}	| AlternativeTypeLists ',' AlternativeType {		$$ = $1;		asn1p_expr_add($$, $3);	}	;AlternativeType:	Identifier Type {		$$ = $2;		assert($$->Identifier == 0);		$$->Identifier = $1;	}	| ExtensionAndException {		$$ = $1;	}	| Type {		$$ = $1;		_fixup_anonymous_identifier($$);	}	;ObjectClass:	TOK_CLASS '{' FieldSpec '}' optWithSyntax {		$$ = $3;		checkmem($$);		$$->with_syntax = $5;		assert($$->expr_type == A1TC_CLASSDEF);		assert($$->meta_type == AMT_OBJECTCLASS);	}	;optUnique:	{ $$ = 0; }	| TOK_UNIQUE { $$ = 1; }	;FieldSpec:	ClassField {		$$ = NEW_EXPR();		checkmem($$);		$$->expr_type = A1TC_CLASSDEF;		$$->meta_type = AMT_OBJECTCLASS;		asn1p_expr_add($$, $1);	}	| FieldSpec ',' ClassField {		$$ = $1;		asn1p_expr_add($$, $3);	}	;	/* X.681 */ClassField:	/* TypeFieldSpec ::= typefieldreference TypeOptionalitySpec? */	TOK_typefieldreference optMarker {		$$ = NEW_EXPR();		checkmem($$);		$$->Identifier = $1;		$$->meta_type = AMT_OBJECTFIELD;		$$->expr_type = A1TC_CLASSFIELD_TFS;	/* TypeFieldSpec */		$$->marker = $2;	}	/* FixedTypeValueFieldSpec ::= valuefieldreference Type UNIQUE ? ValueOptionalitySpec ? */	| TOK_valuefieldreference Type optUnique optMarker {		$$ = NEW_EXPR();		$$->Identifier = $1;		$$->meta_type = AMT_OBJECTFIELD;		$$->expr_type = A1TC_CLASSFIELD_FTVFS;	/* FixedTypeValueFieldSpec */		$$->unique = $3;		$$->marker = $4;		asn1p_expr_add($$, $2);	}	/* VariableTypeValueFieldSpec ::= valuefieldreference FieldName ValueOptionalitySpec ? */	| TOK_valuefieldreference FieldName optMarker {		$$ = NEW_EXPR();		$$->Identifier = $1;		$$->meta_type = AMT_OBJECTFIELD;		$$->expr_type = A1TC_CLASSFIELD_VTVFS;		$$->reference = $2;		$$->marker = $3;	}	/*  ObjectFieldSpec ::= objectfieldreference DefinedObjectClass ObjectOptionalitySpec ? */	| TOK_valuefieldreference DefinedObjectClass optMarker {		$$ = NEW_EXPR();		checkmem($$);		$$->Identifier = $1;		$$->reference = $2;		$$->meta_type = AMT_OBJECTFIELD;		$$->expr_type = A1TC_CLASSFIELD_OFS;		$$->marker = $3;	}	/* VariableTypeValueSetFieldSpec ::= valuesetfieldreference FieldName ValueOptionalitySpec ? */	| TOK_typefieldreference FieldName optMarker {		$$ = NEW_EXPR();		$$->Identifier = $1;		$$->meta_type = AMT_OBJECTFIELD;		$$->expr_type = A1TC_CLASSFIELD_VTVSFS;		$$->reference = $2;		$$->marker = $3;	}	/* FixedTypeValueSetFieldSpec ::= valuesetfieldreference Type ValueSetOptionalitySpec ? */	| TOK_typefieldreference Type optMarker {		$$ = NEW_EXPR();		checkmem($$);		$$->Identifier = $1;		$$->meta_type = AMT_OBJECTFIELD;		$$->expr_type = A1TC_CLASSFIELD_FTVSFS;		asn1p_expr_add($$, $2);		$$->marker = $3;	}	/*  ObjectSetFieldSpec ::= objectsetfieldreference DefinedObjectClass ObjectOptionalitySpec ? */	| TOK_typefieldreference DefinedObjectClass optMarker {		$$ = NEW_EXPR();		checkmem($$);		$$->Identifier = $1;		$$->reference = $2;		$$->meta_type = AMT_OBJECTFIELD;		$$->expr_type = A1TC_CLASSFIELD_OSFS;		$$->marker = $3;	}	;optWithSyntax:	{ $$ = 0; }	| WithSyntax {		$$ = $1;	}	;WithSyntax:	TOK_WITH TOK_SYNTAX '{'		{ asn1p_lexer_hack_enable_with_syntax(); }		WithSyntaxList		'}' {		$$ = $5;	}	;WithSyntaxList:	WithSyntaxToken {		$$ = asn1p_wsyntx_new();		TQ_ADD_TYPE(asn1p_wsyntx_chunk_t,&($$->chunks), $1, next);	}	| WithSyntaxList WithSyntaxToken {		$$ = $1;		TQ_ADD_TYPE(asn1p_wsyntx_chunk_t,&($$->chunks), $2, next);	}	;WithSyntaxToken:	TOK_whitespace {		$$ = asn1p_wsyntx_chunk_fromstring($1.buf, 0);		$$->type = WC_WHITESPACE;	}	| TOK_Literal {		$$ = asn1p_wsyntx_chunk_fromstring($1, 0);	}	| PrimitiveFieldReference {		$$ = asn1p_wsyntx_chunk_fromstring($1.name, 0);		$$->type = WC_FIELD;	}	| '[' WithSyntaxList ']' {		$$ = asn1p_wsyntx_chunk_fromsyntax($2);	}	;ExtensionAndException:	TOK_ThreeDots {		$$ = NEW_EXPR();		checkmem($$);		$$->Identifier = strdup("...");		checkmem($$->Identifier);		$$->expr_type = A1TC_EXTENSIBLE;		$$->meta_type = AMT_TYPE;	}	| TOK_ThreeDots '!' DefinedValue {		$$ = NEW_EXPR();		checkmem($$);		$$->Identifier = strdup("...");		checkmem($$->Identifier);		$$->value = $3;		$$->expr_type = A1TC_EXTENSIBLE;		$$->meta_type = AMT_TYPE;	}	| TOK_ThreeDots '!' SignedNumber {		$$ = NEW_EXPR();		checkmem($$);		$$->Identifier = strdup("...");		$$->value = $3;		checkmem($$->Identifier);		$$->expr_type = A1TC_EXTENSIBLE;		$$->meta_type = AMT_TYPE;	}	;Type:	optTag TypeDeclaration optConstraints {		$$ = $2;		$$->tag = $1;		/*		 * Outer constraint for SEQUENCE OF and SET OF applies		 * to the inner type.		 */		if($$->expr_type == ASN_CONSTR_SEQUENCE_OF		|| $$->expr_type == ASN_CONSTR_SET_OF) {			assert(!TQ_FIRST(&($$->members))->constraints);			TQ_FIRST(&($$->members))->constraints = $3;		} else {			if($$->constraints) {				assert(!$2);			} else {				$$->constraints = $3;			}		}	}	;NSTD_IndirectMarker:	{		$$ = asn1p_as_pointer ? EM_INDIRECT : 0;		asn1p_as_pointer = 0;	}	;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -