%%
/*
* Yacc rules.
*
*/
/*
* One mibFile may contain multiple MIB modules.
* It's also possible that there's no module in a file.
*/
smingFile: optsep moduleStatement_optsep_0n
;
moduleStatement_optsep_0n: /* empty */
| moduleStatement_optsep_1n
;
moduleStatement_optsep_1n: moduleStatement_optsep
| moduleStatement_optsep_1n moduleStatement_optsep
;
moduleStatement_optsep: moduleStatement optsep
;
moduleStatement: moduleKeyword sep ucIdentifier
sep lcIdentifier
optsep '{' stmtsep
importStatement_stmtsep_0n
oidStatement stmtsep
organizationStatement stmtsep
contactStatement stmtsep
descriptionStatement stmtsep
referenceStatement_stmtsep_01
revisionStatement_stmtsep_0n
typedefStatement_stmtsep_0n
anyObjectStatement_stmtsep_0n
notificationStatement_stmtsep_0n
groupStatement_stmtsep_0n
complianceStatement_stmtsep_0n
'}' optsep ';'
;
typedefStatement_stmtsep_0n: /* empty */
| typedefStatement_stmtsep_1n
;
typedefStatement_stmtsep_1n: typedefStatement_stmtsep
| typedefStatement_stmtsep_1n
typedefStatement_stmtsep
;
typedefStatement_stmtsep: typedefStatement stmtsep
;
typedefStatement: typedefKeyword sep ucIdentifier
optsep '{' stmtsep
typedefTypeStatement stmtsep
defaultStatement_stmtsep_01
formatStatement_stmtsep_01
unitsStatement_stmtsep_01
statusStatement_stmtsep_01
descriptionStatement_stmtsep_01
referenceStatement_stmtsep_01
'}' optsep ';'
anyObjectStatement_stmtsep_0n: /* empty */
| anyObjectStatement_stmtsep_1n
;
anyObjectStatement_stmtsep_1n: anyObjectStatement_stmtsep
| anyObjectStatement_stmtsep_1n
anyObjectStatement_stmtsep
;
anyObjectStatement_stmtsep: anyObjectStatement stmtsep
;
anyObjectStatement: nodeStatement
| scalarStatement
| tableStatement
;
nodeStatement: nodeKeyword sep lcIdentifier
optsep '{' stmtsep
oidStatement stmtsep
statusStatement_stmtsep_01
descriptionStatement_stmtsep_01
referenceStatement_stmtsep_01
'}' optsep ';'
;
scalarStatement: scalarKeyword sep lcIdentifier
optsep '{' stmtsep
oidStatement stmtsep
typeStatement stmtsep
accessStatement stmtsep
defaultStatement_stmtsep_01
formatStatement_stmtsep_01
unitsStatement_stmtsep_01
statusStatement_stmtsep_01
descriptionStatement stmtsep
referenceStatement_stmtsep_01
'}' optsep ';'
;
tableStatement: tableKeyword sep lcIdentifier
optsep '{' stmtsep
oidStatement stmtsep
statusStatement_stmtsep_01
descriptionStatement stmtsep
referenceStatement_stmtsep_01
rowStatement stmtsep
'}' optsep ';'
;
rowStatement: rowKeyword sep lcIdentifier
optsep '{' stmtsep
oidStatement stmtsep
anyIndexStatement stmtsep
createStatement_stmtsep_01
statusStatement_stmtsep_01
descriptionStatement stmtsep
referenceStatement_stmtsep_01
columnStatement_stmtsep_1n
'}' optsep ';'
;
columnStatement_stmtsep_1n: columnStatement_stmtsep
| columnStatement_stmtsep_1n columnStatement_stmtsep
;
columnStatement_stmtsep: columnStatement stmtsep
;
columnStatement: columnKeyword sep lcIdentifier
optsep '{' stmtsep
oidStatement stmtsep
typeStatement stmtsep
accessStatement stmtsep
defaultStatement_stmtsep_01
formatStatement_stmtsep_01
unitsStatement_stmtsep_01
statusStatement_stmtsep_01
descriptionStatement stmtsep
referenceStatement_stmtsep_01
'}' optsep ';'
;
notificationStatement_stmtsep_0n: /* empty */
| notificationStatement_stmtsep_1n
;
notificationStatement_stmtsep_1n: notificationStatement_stmtsep
| notificationStatement_stmtsep_1n
notificationStatement_stmtsep
;
notificationStatement_stmtsep: notificationStatement stmtsep
;
notificationStatement: notificationKeyword sep lcIdentifier
optsep '{' stmtsep
oidStatement stmtsep
objectsStatement_stmtsep_01
statusStatement_stmtsep_01
descriptionStatement stmtsep
referenceStatement_stmtsep_01
'}' optsep ';'
;
groupStatement_stmtsep_0n: /* empty */
| groupStatement_stmtsep_1n
;
groupStatement_stmtsep_1n: groupStatement_stmtsep
| groupStatement_stmtsep_1n groupStatement_stmtsep
;
groupStatement_stmtsep: groupStatement stmtsep
;
groupStatement: groupKeyword sep lcIdentifier
optsep '{' stmtsep
oidStatement stmtsep
objectsStatement stmtsep
statusStatement_stmtsep_01
descriptionStatement stmtsep
referenceStatement_stmtsep_01
'}' optsep ';'
;
complianceStatement_stmtsep_0n: /* empty */
| complianceStatement_stmtsep_1n
;
complianceStatement_stmtsep_1n: complianceStatement_stmtsep
| complianceStatement_stmtsep_1n
complianceStatement_stmtsep
;
complianceStatement_stmtsep: complianceStatement stmtsep
;
complianceStatement: complianceKeyword sep lcIdentifier
optsep '{' stmtsep
oidStatement stmtsep
statusStatement_stmtsep_01
descriptionStatement stmtsep
referenceStatement_stmtsep_01
mandatoryStatement_stmtsep_01
optionalStatement_stmtsep_0n
refineStatement_stmtsep_0n
'}' optsep ';'
;
importStatement_stmtsep_0n: /* empty */
| importStatement_stmtsep_1n
;
importStatement_stmtsep_1n: importStatement_stmtsep
| importStatement_stmtsep_1n importStatement_stmtsep
;
importStatement_stmtsep: importStatement stmtsep
;
importStatement: importKeyword sep ucIdentifier
optsep '(' optsep
identifierList
optsep ')' optsep ';'
;
revisionStatement_stmtsep_0n: /* empty */
| revisionStatement_stmtsep_1n
;
revisionStatement_stmtsep_1n: revisionStatement_stmtsep
| revisionStatement_stmtsep_1n revisionStatement_stmtsep
;
revisionStatement_stmtsep: revisionStatement stmtsep
;
revisionStatement: revisionKeyword optsep '{' stmtsep
dateStatement stmtsep
descriptionStatement stmtsep
'}' optsep ';'
;
typedefTypeStatement: typeKeyword sep refinedBaseType_refinedType optsep ';'
/* TODO: originally, this was based on
* refinedBaseType. */
;
typeStatement_stmtsep_01: /* empty */
| typeStatement stmtsep
;
typeStatement: typeKeyword sep refinedBaseType_refinedType
optsep ';'
;
writetypeStatement_stmtsep_01: /* empty */
| writetypeStatement stmtsep
;
writetypeStatement: writetypeKeyword sep refinedBaseType_refinedType
optsep ';'
;
anyIndexStatement: indexStatement
| augmentsStatement
| reordersStatement
| sparseStatement
| expandsStatement
;
indexStatement: indexKeyword sep_impliedKeyword_01 optsep
'(' optsep qlcIdentifierList optsep ')' optsep ';'
;
augmentsStatement: augmentsKeyword sep qlcIdentifier optsep ';'
;
reordersStatement: reordersKeyword sep qlcIdentifier
sep_impliedKeyword_01 optsep '(' optsep
qlcIdentifierList optsep ')' optsep ';'
;
sparseStatement: sparseKeyword sep qlcIdentifier optsep ';'
;
expandsStatement: expandsKeyword sep qlcIdentifier
sep_impliedKeyword_01 optsep '(' optsep
qlcIdentifierList optsep ')' optsep ';'
;
sep_impliedKeyword_01: /* empty */
| sep impliedKeyword
;
createStatement_stmtsep_01: /* empty */
| createStatement stmtsep
;
createStatement: createKeyword optsep_createColumns_01 optsep ';'
;
optsep_createColumns_01: /* empty */
| optsep createColumns
;
createColumns: '(' optsep qlcIdentifierList optsep ')'
;
oidStatement: oidKeyword sep objectIdentifier optsep ';'
;
dateStatement: dateKeyword sep date optsep ';'
;
organizationStatement: organizationKeyword sep text optsep ';'
;
contactStatement: contactKeyword sep text optsep ';'
;
formatStatement_stmtsep_01: /* empty */
| formatStatement stmtsep
;
formatStatement: formatKeyword sep text optsep ';'
;
unitsStatement_stmtsep_01: /* empty */
| unitsStatement stmtsep
;
unitsStatement: unitsKeyword sep text optsep ';'
;
statusStatement_stmtsep_01: /* empty */
| statusStatement stmtsep
;
statusStatement: statusKeyword sep status optsep ';'
;
accessStatement_stmtsep_01: /* empty */
| accessStatement stmtsep
;
accessStatement: accessKeyword sep access optsep ';'
;
defaultStatement_stmtsep_01: /* empty */
| defaultStatement stmtsep
;
defaultStatement: defaultKeyword sep anyValue optsep ';'
;
descriptionStatement_stmtsep_01: /* empty */
| descriptionStatement stmtsep
;
descriptionStatement: descriptionKeyword sep text optsep ';'
;
referenceStatement_stmtsep_01: /* empty */
| referenceStatement stmtsep
;
referenceStatement: referenceKeyword sep text optsep ';'
;
objectsStatement_stmtsep_01: /* empty */
| objectsStatement stmtsep
;
objectsStatement: objectsKeyword optsep '(' optsep
qlcIdentifierList optsep ')' optsep ';'
;
mandatoryStatement_stmtsep_01: /* empty */
| mandatoryStatement stmtsep
;
mandatoryStatement: mandatoryKeyword optsep '(' optsep
qlcIdentifierList optsep ')' optsep ';'
;
optionalStatement_stmtsep_0n: /* empty */
| optionalStatement_stmtsep_1n
;
optionalStatement_stmtsep_1n: optionalStatement_stmtsep
| optionalStatement_stmtsep_1n
optionalStatement_stmtsep
;
optionalStatement_stmtsep: optionalStatement stmtsep
;
optionalStatement: optionalKeyword sep qlcIdentifier
optsep '{'
descriptionStatement
stmtsep '}' optsep ';'
;
refineStatement_stmtsep_0n: /* empty */
| refineStatement_stmtsep_1n
;
refineStatement_stmtsep_1n: refineStatement_stmtsep
| refineStatement_stmtsep_1n refineStatement_stmtsep
;
refineStatement_stmtsep: refineStatement stmtsep
;
refineStatement: refineKeyword sep qlcIdentifier
optsep '{'
typeStatement_stmtsep_01
writetypeStatement_stmtsep_01
accessStatement_stmtsep_01
descriptionStatement stmtsep '}' optsep ';'
;
refinedBaseType_refinedType: refinedBaseType
| refinedType
;
refinedBaseType: OctetStringKeyword optsep_numberSpec_01
| ObjectIdentifierKeyword
| Integer32Keyword optsep_numberSpec_01
| Unsigned32Keyword optsep_numberSpec_01
| Integer64Keyword optsep_numberSpec_01
| Unsigned64Keyword optsep_numberSpec_01
| Float32Keyword optsep_floatSpec_01
| Float64Keyword optsep_floatSpec_01
| Float128Keyword optsep_floatSpec_01
| EnumerationKeyword bitsOrEnumerationSpec
| BitsKeyword bitsOrEnumerationSpec
;
refinedType: qucIdentifier optsep_anySpec_01
;
optsep_anySpec_01: /* empty */
| optsep anySpec
;
anySpec: numberSpec
| floatSpec
;
optsep_numberSpec_01: /* empty */
| optsep numberSpec
;
numberSpec: '(' optsep numberElement furtherNumberElement_0n
optsep ')'
;
furtherNumberElement_0n: /* empty */
| furtherNumberElement_1n
;
furtherNumberElement_1n: furtherNumberElement
| furtherNumberElement_1n furtherNumberElement
;
furtherNumberElement: optsep '|' optsep numberElement
;
numberElement: signedNumber numberUpperLimit_01
;
numberUpperLimit_01: /* empty */
| numberUpperLimit
;
numberUpperLimit: optsep DOT_DOT optsep signedNumber
;
optsep_floatSpec_01: /* empty */
| optsep floatSpec
;
floatSpec: '(' optsep floatElement furtherFloatElement_0n
optsep ')'
;
furtherFloatElement_0n: /* empty */
| furtherFloatElement_1n
;
furtherFloatElement_1n: furtherFloatElement
| furtherFloatElement_1n furtherFloatElement
;
furtherFloatElement: optsep '|' optsep floatElement
;
floatElement: floatValue floatUpperLimit_01
;
floatUpperLimit_01: /* empty */
| floatUpperLimit
;
floatUpperLimit: optsep DOT_DOT optsep floatValue
;
bitsOrEnumerationSpec: '(' optsep bitsOrEnumerationList optsep ')'
;
bitsOrEnumerationList: bitsOrEnumerationItem furtherBitsOrEnumerationItem_0n
optsep_comma_01
;
furtherBitsOrEnumerationItem_0n: /* empty */
| furtherBitsOrEnumerationItem_1n
;
furtherBitsOrEnumerationItem_1n: furtherBitsOrEnumerationItem
| furtherBitsOrEnumerationItem_1n
furtherBitsOrEnumerationItem
;
furtherBitsOrEnumerationItem: optsep ',' optsep bitsOrEnumerationItem
;
bitsOrEnumerationItem: lcIdentifier optsep '(' optsep number optsep ')'
;
identifierList: identifier furtherIdentifier_0n optsep_comma_01
;
furtherIdentifier_0n: /* empty */
| furtherIdentifier_1n
;
furtherIdentifier_1n: furtherIdentifier
| furtherIdentifier_1n furtherIdentifier
;
furtherIdentifier: optsep ',' optsep identifier
;
qIdentifierList: qIdentifier furtherQIdentifier_0n optsep_comma_01
;
furtherQIdentifier_0n: /* empty */
| furtherQIdentifier_1n
;
furtherQIdentifier_1n: furtherQIdentifier
| furtherQIdentifier_1n furtherQIdentifier
;
furtherQIdentifier: optsep ',' optsep qIdentifier
;
qlcIdentifierList: qlcIdentifier furtherQlcIdentifier_0n optsep_comma_01
;
furtherQlcIdentifier_0n: /* empty */
| furtherQlcIdentifier_1n
;
furtherQlcIdentifier_1n: furtherQlcIdentifier
| furtherQlcIdentifier_1n furtherQlcIdentifier
;
furtherQlcIdentifier: optsep ',' optsep qlcIdentifier
;
bitsValue: '(' optsep bitsList optsep ')'
;
bitsList: optsep_comma_01
| lcIdentifier furtherLcIdentifier_0n optsep_comma_01
;
furtherLcIdentifier_0n: /* empty */
| furtherLcIdentifier_1n
;
furtherLcIdentifier_1n: furtherLcIdentifier
| furtherLcIdentifier_1n furtherLcIdentifier
;
furtherLcIdentifier: optsep ',' optsep lcIdentifier
;
identifier: ucIdentifier
| lcIdentifier
;
qIdentifier: qucIdentifier
| qlcIdentifier
;
qucIdentifier: ucIdentifier COLON_COLON ucIdentifier
| ucIdentifier
;
qlcIdentifier: ucIdentifier COLON_COLON lcIdentifier
| lcIdentifier
;
text: textSegment optsep_textSegment_0n
;
optsep_textSegment_0n: /* empty */
| optsep_textSegment_1n
;
optsep_textSegment_1n: optsep_textSegment
| optsep_textSegment_1n optsep_textSegment
;
optsep_textSegment: optsep textSegment
;
date: textSegment
/* TODO: check "YYYY-MM-DD HH:MM" or "YYYY-MM-DD" */
;
format: textSegment
;
units: textSegment
;
/*
* The type of `anyValue' must be determined from the
* context. `anyValue' appears only in default value clauses. Hence,
* we set a global variable defaultBasetype in the object type
* declaring clause to remember the expected type. Here, we use this
* variable to build an SmiValue with the appropriate base type.
*/
anyValue: bitsValue
| decimalNumber
| '-' decimalNumber
| hexadecimalNumber
| floatValue
| text
| qlcIdentifier
| qlcIdentifier dot_subid_1n
| subid '.' subid dot_subid_1n
;
status: currentKeyword
| deprecatedKeyword
| obsoleteKeyword
;
access: noaccessKeyword
| notifyonlyKeyword
| readonlyKeyword
| readwriteKeyword
;
objectIdentifier: qlcIdentifier_subid dot_subid_0127
;
qlcIdentifier_subid: qlcIdentifier
| subid
;
dot_subid_0127: /* empty */
| dot_subid_1n
;
dot_subid_1n: dot_subid
| dot_subid_1n dot_subid
;
dot_subid: '.' subid
;
subid: decimalNumber
;
number: hexadecimalNumber
| decimalNumber
;
negativeNumber: '-' decimalNumber
;
signedNumber: number
| negativeNumber
;
/* decimalNumber, hexadecimalNumber, floatValue */
/* unknown... */
optsep_comma_01: /* empty */
/* | optsep ',' */
;
sep: /* empty, skipped by lexer */
;
optsep: /* empty, skipped by lexer */
;
stmtsep: /* empty, skipped by lexer */
;
%%