📄 asn_grammar.y
字号:
UpperEndpoint : UpperEndValue | '<' UpperEndValue { $$ = $2; } ;LowerEndValue : Value | MIN_t { $$ = new MinValue; } ;UpperEndValue : Value | MAX_t { $$ = new MaxValue; } ;PermittedAlphabet : FROM Constraint { $$ = new FromConstraintElement($2); } ;ContainedSubtype : INCLUDES Type { $$ = $2; }/*| Type Actual grammar has INCLUDES keyword optional but this is horribly ambiguous, so only support a few specific Type definitions */ | ConstrainedType | BuiltinType | DefinedType | UsefulType ;SizeConstraint : SIZE_t Constraint { $$ = new SizeConstraintElement($2); } ;InnerTypeConstraints : WITH COMPONENT Constraint { $$ = new WithComponentConstraintElement(NULL, $3, WithComponentConstraintElement::Default); } | WITH COMPONENTS MultipleTypeConstraints { $$ = $3; } ;MultipleTypeConstraints : '{' TypeConstraints '}' /* FullSpecification */ { $$ = new InnerTypeConstraintElement($2, FALSE); } | '{' '.' '.' '.' ',' TypeConstraints '}' /* PartialSpecification */ { $$ = new InnerTypeConstraintElement($6, TRUE); } ;TypeConstraints : NamedConstraint { $$ = new ConstraintElementList; $$->Append($1); } | NamedConstraint ',' TypeConstraints { $3->Append($1); $$ = $3; } ;NamedConstraint : IDENTIFIER PresenceConstraint { $$ = new WithComponentConstraintElement($1, NULL, (int)$2); } | IDENTIFIER Constraint PresenceConstraint { $$ = new WithComponentConstraintElement($1, $2, (int)$3); } ;PresenceConstraint : PRESENT { $$ = WithComponentConstraintElement::Present; } | ABSENT { $$ = WithComponentConstraintElement::Absent; } | OPTIONAL_t { $$ = WithComponentConstraintElement::Optional; } | /* empty */ { $$ = WithComponentConstraintElement::Default; } ;GeneralConstraint : UserDefinedConstraint | TableConstraint ;UserDefinedConstraint : CONSTRAINED BY '{' UserDefinedConstraintParameterList '}' { $$ = new Constraint($4); } ;UserDefinedConstraintParameterList : /* empty */ { $$ = new UserDefinedConstraintElement(NULL); } | UserDefinedConstraintParameters { $$ = new UserDefinedConstraintElement($1); } ; UserDefinedConstraintParameters : UserDefinedConstraintParameter ',' UserDefinedConstraintParameters { $3->Append($1); $$ = $3; } | UserDefinedConstraintParameter { $$ = new TypesList; $$->Append($1); } ;UserDefinedConstraintParameter : Governor ':' ActualParameter { $$ = $3; } | ActualParameter ;TableConstraint : ObjectSet /* SimpleTableConstraint */ | ComponentRelationConstraint ;ComponentRelationConstraint : '{' DefinedObjectSet '}' '{' AtNotations '}' { $$ = NULL; } ;AtNotations : AtNotations ',' AtNotation | AtNotation ;AtNotation : '@' ComponentIdList | '@' '.' ComponentIdList ;ComponentIdList : ComponentIdList '.' IDENTIFIER | IDENTIFIER ;/********/ObjectClassAssignment : OBJECTCLASSREFERENCE ASSIGNMENT ObjectClass { } ;ObjectAssignment : OBJECTREFERENCE DefinedObjectClass ASSIGNMENT Object { } ;ObjectSetAssignment : OBJECTSETREFERENCE DefinedObjectClass ASSIGNMENT ObjectSet { } ;ObjectClass : DefinedObjectClass { } | ObjectClassDefn | ParameterizedObjectClass ;DefinedObjectClass : ExternalObjectClassReference | OBJECTCLASSREFERENCE | UsefulObjectClassReference ;ExternalObjectClassReference : MODULEREFERENCE '.' OBJECTCLASSREFERENCE { $$ = ConcatNames($1, '.', $3); } ;UsefulObjectClassReference : TYPE_IDENTIFIER { $$ = new PString("TYPE-IDENTIFIER"); } | ABSTRACT_SYNTAX { $$ = new PString("ABSTRACT-SYNTAX"); } ;ObjectClassDefn : CLASS '{' FieldSpecs '}' WithSyntaxSpec ;FieldSpecs : FieldSpecs ',' FieldSpec | FieldSpec ;FieldSpec : TypeFieldSpec | FixedTypeValueFieldSpec | VariableTypeValueFieldSpec | FixedTypeValueSetFieldSpec | VariableTypeValueSetFieldSpec | ObjectFieldSpec | ObjectSetFieldSpec ;TypeFieldSpec : TYPEFIELDREFERENCE TypeOptionalitySpec { } ;TypeOptionalitySpec : OPTIONAL_t | DEFAULT Type | /* empty */ ;FixedTypeValueFieldSpec : VALUEFIELDREFERENCE Type Unique ValueOptionalitySpec { } ;Unique : UNIQUE | /* empty */ ;ValueOptionalitySpec : OPTIONAL_t | DEFAULT Value | /* empty */ ;VariableTypeValueFieldSpec : VALUEFIELDREFERENCE FieldName ValueOptionalitySpec { } ;FixedTypeValueSetFieldSpec : VALUESETFIELDREFERENCE Type ValueSetOptionalitySpec { } ;ValueSetOptionalitySpec : OPTIONAL_t | DEFAULT ValueSet | /* empty */ ;VariableTypeValueSetFieldSpec : VALUESETFIELDREFERENCE FieldName ValueSetOptionalitySpec { } ;ObjectFieldSpec : OBJECTFIELDREFERENCE DefinedObjectClass ObjectOptionalitySpec { } ;ObjectOptionalitySpec : OPTIONAL_t | DEFAULT Object | /* empty */ ;ObjectSetFieldSpec : OBJECTSETFIELDREFERENCE DefinedObjectClass ObjectSetOptionalitySpec { } ;ObjectSetOptionalitySpec : OPTIONAL_t | DEFAULT ObjectSet | /* empty */ ;WithSyntaxSpec : WITH SYNTAX SyntaxList | /* empty */ ;SyntaxList : '{' TokenOrGroupSpecs '}' | '{' '}' ;TokenOrGroupSpecs : TokenOrGroupSpecs TokenOrGroupSpec | TokenOrGroupSpec ;TokenOrGroupSpec : RequiredToken | OptionalGroup ;OptionalGroup : '[' TokenOrGroupSpecs ']' ;RequiredToken : Literal | PrimitiveFieldName { } ;Literal : BIT | BOOLEAN_t | CHARACTER | CHOICE | EMBEDDED | END | ENUMERATED | EXTERNAL | FALSE_t | INSTANCE | INTEGER { } | INTERSECTION | MINUS_INFINITY | NULL_TYPE | OBJECT | OCTET | PLUS_INFINITY | REAL | SEQUENCE | SET | TRUE_t | UNION | ',' ;DefinedObject : ExternalObjectReference | OBJECTREFERENCE { } ;ExternalObjectReference : MODULEREFERENCE '.' OBJECTREFERENCE { } ;ParameterizedObjectClass : DefinedObjectClass ActualParameterList { } ;DefinedObjectSet : ExternalObjectSetReference { } | OBJECTSETREFERENCE { } ;ExternalObjectSetReference : MODULEREFERENCE '.' OBJECTSETREFERENCE { } ;ParameterizedObjectSet : DefinedObjectSet ActualParameterList ;FieldName : FieldName '.' PrimitiveFieldName { $$ = ConcatNames($1, '.', $3); } | PrimitiveFieldName ;PrimitiveFieldName : TYPEFIELDREFERENCE | VALUEFIELDREFERENCE | VALUESETFIELDREFERENCE | OBJECTFIELDREFERENCE | OBJECTSETFIELDREFERENCE ;Object : DefinedObject { }/*!!! | ObjectDefn { }*/ | ObjectFromObject { } | ParameterizedObject { } ;/*!!!!ObjectDefn : DefaultSyntax | DefinedSyntax ;DefaultSyntax : '{' FieldSettings '} : '{' '} ;FieldSettings : FieldSettings ',' FieldSetting | FieldSetting ;FieldSetting : PrimitiveFieldName Setting ;DefinedSyntax : '{' DefinedSyntaxTokens '}' 'DefinedSyntaxTokens : DefinedSyntaxTokens DefinedSyntaxToken | /* empty *//* ;DefinedSyntaxToken : Literal | Setting ;Setting : Type | Value | ValueSet | Object | ObjectSet ;*/ObjectSet : '{' ElementSetSpec '}' { } ;ObjectFromObject : ReferencedObjects '.' FieldName ;ObjectSetElements : Object { } | DefinedObjectSet { }/*!!! | ObjectSetFromObjects*/ | ParameterizedObjectSet { } ;/*!!!ObjectSetFromObjects : ReferencedObjects '.' FieldName ;*//********/ParameterizedAssignment : ParameterizedTypeAssignment | ParameterizedValueAssignment | ParameterizedValueSetTypeAssignment | ParameterizedObjectClassAssignment | ParameterizedObjectAssignment | ParameterizedObjectSetAssignment ;ParameterizedTypeAssignment : TYPEREFERENCE ParameterList { DummyParameters = $2; } ASSIGNMENT Type { DummyParameters = NULL; $5->SetName($1); $5->SetParameters($2); Module->AddType($5); } ;ParameterizedValueAssignment : IDENTIFIER ParameterList Type ASSIGNMENT Value { } ;ParameterizedValueSetTypeAssignment : TYPEREFERENCE ParameterList Type ASSIGNMENT ValueSet { } ;ParameterizedObjectClassAssignment : OBJECTCLASSREFERENCE ParameterList ASSIGNMENT ObjectClass { } ;ParameterizedObjectAssignment : OBJECTREFERENCE ParameterList DefinedObjectClass ASSIGNMENT Object { } ;ParameterizedObjectSetAssignment : OBJECTSETREFERENCE ParameterList DefinedObjectClass ASSIGNMENT ObjectSet { } ;ParameterList : '{' Parameters '}' { $$ = $2; } ;Parameters : Parameters ',' Parameter { $$ = $1; $$->Append($3); } | Parameter { $$ = new PStringList; $$->Append($1); } ;Parameter : Governor ':' Reference { $$ = $3; } | Reference ;Governor : Type { } | DefinedObjectClass { } ;ParameterizedType : SimpleDefinedType ActualParameterList { $$ = new ParameterizedType($1, $2); } ;SimpleDefinedType : ExternalTypeReference | TYPEREFERENCE ;ActualParameterList : '{' ActualParameters '}' { $$ = $2; } ;ActualParameters : ActualParameters ',' ActualParameter { $1->Append($3); $$ = $1; } | ActualParameter { $$ = new TypesList; $$->Append($1); } ;ActualParameter : Type | Value { } | ValueSet { } | DefinedObjectClass { }/*!!! | Object { } | ObjectSet*/ ;/********/ValueAssignment : IDENTIFIER Type { IdentifierTokenContext = $2->GetIdentifierTokenContext(); BraceTokenContext = $2->GetBraceTokenContext(); NullTokenContext = NULL_VALUE; } ASSIGNMENT Value { $5->SetValueName($1); Module->AddValue($5); IdentifierTokenContext = IDENTIFIER; BraceTokenContext = '{'; NullTokenContext = NULL_TYPE; } ;Value : BuiltinValue | ReferencedValue ;BuiltinValue : BitStringValue | BooleanValue | CharacterStringValue | ChoiceValue /*| EmbeddedPDVValue synonym to SequenceValue *//*| EnumeratedValue synonym to IDENTIFIER *//*| ExternalValue synonym to SequenceValue *//*| InstanceOfValue synonym to Value */ | SignedNumber /* IntegerValue */ { $$ = new IntegerValue($1); } | NullValue /*!!! | ObjectClassFieldValue
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -