📄 asn_grammar.y
字号:
*/ | ObjectIdentifierValue | OctetStringValue | RealValue | SequenceValue /*!!!! | SequenceOfValue*//*| SetValue synonym to SequenceValue *//*| SetOfValue synonym to SequenceOfValue *//*| TaggedValue synonym to Value */ ;DefinedValue : ExternalValueReference { $$ = new DefinedValue($1); } | IDENTIFIER { $$ = new DefinedValue($1); } | ParameterizedValue ;ExternalValueReference : MODULEREFERENCE '.' IDENTIFIER { *$1 += *$3; delete $3; } ;ObjectIdentifierValue : OID_BRACE { IdentifierTokenContext = OID_IDENTIFIER; } ObjIdComponentList '}' { $$ = new ObjectIdentifierValue($3); IdentifierTokenContext = IDENTIFIER; }/*!!! | '{' DefinedValue_OID ObjIdComponentList '}' { $$ = new ObjectIdentifierValue($2); }*/ ;ObjIdComponentList : ObjIdComponent { $$ = new PStringList; $$->Append($1); } | ObjIdComponent ObjIdComponentList { $2->InsertAt(0, $1); $$ = $2; } ;ObjIdComponent : OID_IDENTIFIER | INTEGER { $$ = new PString(PString::Unsigned, (int)$1); } | OID_IDENTIFIER '(' NumberForm ')' { delete $1; $$ = $3; } ;NumberForm : INTEGER { $$ = new PString(PString::Unsigned, (int)$1); } | ExternalValueReference | OID_IDENTIFIER ;OctetStringValue : OS_BSTRING { $$ = new OctetStringValue($1); } | OS_HSTRING { $$ = new OctetStringValue($1); } ;BitStringValue : BS_BSTRING { $$ = new BitStringValue($1); } | BS_HSTRING { $$ = new BitStringValue($1); } | BITSTRING_BRACE BitIdentifierList '}' { $$ = new BitStringValue($2); } | BITSTRING_BRACE '}' { $$ = new BitStringValue; } ;BitIdentifierList : BIT_IDENTIFIER { $$ = new PStringList; } | BitIdentifierList ',' BIT_IDENTIFIER { // Look up $3 $1->SetAt($1->GetSize(), 0); } ;BooleanValue : TRUE_t { $$ = new BooleanValue(TRUE); } | FALSE_t { $$ = new BooleanValue(FALSE); } ;CharacterStringValue : RestrictedCharacterStringValue/*!!! | UnrestrictedCharacterStringValue*/ ;RestrictedCharacterStringValue : CSTRING { $$ = new CharacterStringValue($1); } | CharacterStringList | Quadruple | Tuple ;CharacterStringList : STRING_BRACE CharSyms '}' { $$ = new CharacterStringValue($2); } ;CharSyms : CharsDefn { $$ = new PStringList; $$->Append($1); } | CharSyms ',' CharsDefn { $1->Append($3); } ;CharsDefn : CSTRING | DefinedValue { PError << StdError(Warning) << "DefinedValue in string unsupported" << endl; } ;Quadruple : STRING_BRACE INTEGER ',' INTEGER ',' INTEGER ',' INTEGER '}' { if ($2 != 0 || $4 != 0 || $6 > 255 || $8 > 255) PError << StdError(Warning) << "Illegal value in Character Quadruple" << endl; $$ = new CharacterValue((BYTE)$2, (BYTE)$4, (BYTE)$6, (BYTE)$8); } ;Tuple : STRING_BRACE INTEGER ',' INTEGER '}' { if ($2 > 255 || $4 > 255) PError << StdError(Warning) << "Illegal value in Character Tuple" << endl; $$ = new CharacterValue((BYTE)$2, (BYTE)$4); } ;ChoiceValue : IDENTIFIER ':' Value { $3->SetValueName($1); $$ = $3; } ;NullValue : NULL_VALUE { $$ = new NullValue; } ;RealValue : NumericRealValue | SpecialRealValue ;NumericRealValue : '0' { $$ = new RealValue(0); }/*!!! | SequenceValue*/ ;SpecialRealValue : PLUS_INFINITY { $$ = new RealValue(0); } | MINUS_INFINITY { $$ = new RealValue(0); } ;SequenceValue : '{' ComponentValueList '}' { $$ = new SequenceValue($2); } | '{' '}' { $$ = new SequenceValue; } ;ComponentValueList : NamedValue { $$ = new ValuesList; $$->Append($1); } | ComponentValueList ',' NamedValue { $1->Append($3); } ;NamedValue : IDENTIFIER Value { $2->SetValueName($1); $$ = $2; } ;/*!!!! SequenceOfValue : '{' ValueList '}' { $$ = NULL; } | '{' '}' { $$ = NULL; } ;ValueList : Value { } | ValueList ',' Value { } ;*/ /*!!!ObjectClassFieldValue : OpenTypeFieldVal | Value ;OpenTypeFieldVal : Type ':' Value ;*/ReferencedValue : DefinedValue/*!!!! | ValueFromObject*/ ;/*!!!!ValueFromObject : ReferencedObjects '.' FieldName { } ;*/ParameterizedValue : SimpleDefinedValue ActualParameterList { } ;SimpleDefinedValue : ExternalValueReference | IDENTIFIER ;/********/ValueSet : '{' ElementSetSpecs '}' ;/********/MacroDefinition : TYPEREFERENCE MACRO ASSIGNMENT MacroSubstance { PError << StdError(Warning) << "MACRO unsupported" << endl; } ;MacroSubstance : BEGIN_t { InMacroContext = TRUE; } MacroBody END { InMacroContext = FALSE; } | TYPEREFERENCE {} | TYPEREFERENCE '.' TYPEREFERENCE {} ;MacroBody : TypeProduction ValueProduction /*SupportingProductions*/ ;TypeProduction : TYPE_t NOTATION ASSIGNMENT MacroAlternativeList ;ValueProduction : VALUE NOTATION ASSIGNMENT MacroAlternativeList ;/*SupportingProductions : ProductionList | /* empty *//* ;ProductionList : Production | ProductionList Production ;Production : TYPEREFERENCE ASSIGNMENT MacroAlternativeList ;*/MacroAlternativeList : MacroAlternative | MacroAlternative '|' MacroAlternativeList ;MacroAlternative : SymbolElement | SymbolElement MacroAlternative ;SymbolElement : SymbolDefn | EmbeddedDefinitions ;SymbolDefn : CSTRING {} | TYPEREFERENCE {} | TYPEREFERENCE ASSIGNMENT {} | string_t | identifier_t | number_t | empty_t | type_t | type_t '(' TYPE_t TYPEREFERENCE ')' | value_t '(' Type ')' | value_t '(' IDENTIFIER Type ')' | value_t '(' VALUE Type ')' ;EmbeddedDefinitions : '<' EmbeddedDefinitionList '>' ;EmbeddedDefinitionList : EmbeddedDefinition | EmbeddedDefinitionList EmbeddedDefinition ;EmbeddedDefinition : LocalTypeAssignment | LocalValueAssignment ;LocalTypeAssignment : TYPEREFERENCE ASSIGNMENT Type {} ;LocalValueAssignment : IDENTIFIER Type ASSIGNMENT Value {} ;/********/ObjectTypeDefinition : IDENTIFIER OBJECT_TYPE { InMIBContext = TRUE; } SYNTAX Type ACCESS ObjectTypeAccess STATUS ObjectTypeStatus MibDescrPart MibReferPart MibIndexPart MibDefValPart { IdentifierTokenContext = OID_IDENTIFIER; } ASSIGNMENT Value { Module->AddMIB(new MibObject($1, $5, (MibObject::Access)$7, (MibObject::Status)$9, $10, $11, $12, $13, $16)); InMIBContext = FALSE; IdentifierTokenContext = IDENTIFIER; } ;ObjectTypeAccess : read_only_t { $$ = MibObject::read_only; } | read_write_t { $$ = MibObject::read_write; } | write_only_t { $$ = MibObject::write_only; } | not_accessible_t { $$ = MibObject::not_accessible; } ;ObjectTypeStatus : mandatory_t { $$ = MibObject::mandatory; } | optional_t { $$ = MibObject::optional; } | obsolete_t { $$ = MibObject::obsolete; } | deprecated_t { $$ = MibObject::deprecated; } ;MibDescrPart : DESCRIPTION_t CSTRING { $$ = $2; } | /* empty */ { $$ = NULL; } ;MibReferPart : REFERENCE_t CSTRING { $$ = $2; } | /* empty */ { $$ = NULL; } ;MibIndexPart : INDEX_t '{' MibIndexTypes '}' { $$ = $3; } | /* empty */ { $$ = NULL; } ;MibIndexTypes : MibIndexType { $$ = new PStringList; $$->Append($1); } | MibIndexTypes ',' MibIndexType { $1->Append($3); } ;MibIndexType : IDENTIFIER | TYPEREFERENCE ;MibDefValPart : DEFVAL_t '{' Value '}' { $$ = $3; } | /* empty */ { $$ = NULL; } ;TrapTypeDefinition : IDENTIFIER TRAP_TYPE { InMIBContext = TRUE; IdentifierTokenContext = OID_IDENTIFIER; } ENTERPRISE Value MibVarPart MibDescrPart MibReferPart ASSIGNMENT Value { Module->AddMIB(new MibTrap($1, $5, $6, $7, $8, $10)); IdentifierTokenContext = IDENTIFIER; InMIBContext = FALSE; } ;MibVarPart : VARIABLES '{' MibVarTypes '}' { $$ = $3; } | /* empty */ { $$ = NULL; } ;MibVarTypes : Value { $$ = new ValuesList; $$->Append($1); } | MibVarTypes ',' Value { $1->Append($3); } ;/********//*!!! Not actually referenced by any other part of grammarAbsoluteReference : '@' GlobalModuleReference '.' ItemSpec ;ItemSpec : TYPEREFERENCE | ItemId '.' ComponentId ;ItemId : ItemSpec ;ComponentId : IDENTIFIER | INTEGER | '*' ;*/Reference : TYPEREFERENCE | IDENTIFIER | OBJECTCLASSREFERENCE | OBJECTREFERENCE | OBJECTSETREFERENCE ;ParameterizedReference : Reference '{' '}' { $$ = new ImportedType($1, TRUE); } ;NamedNumberList : NamedNumber { $$ = new NamedNumberList; $$->Append($1); } | NamedNumberList ',' NamedNumber { $1->Append($3); } ;NamedNumber : IDENTIFIER '(' SignedNumber ')' { $$ = new NamedNumber($1, (int)$3); } | IDENTIFIER '(' DefinedValue ')' { $$ = new NamedNumber($1, ((DefinedValue*)$3)->GetReference()); delete $3; } ;SignedNumber : INTEGER | '-' INTEGER { $$ = -$2; } ;/** End of File ****/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -