diff --git a/pysmi/lexer/smi.py b/pysmi/lexer/smi.py index 43455db..3dc414b 100644 --- a/pysmi/lexer/smi.py +++ b/pysmi/lexer/smi.py @@ -534,6 +534,7 @@ def tokens(): "lowcaseIdentifier": [], "curlyBracesAroundEnterpriseInTrap": [], "noCells": [], + "namedConstraintValue": [], } diff --git a/pysmi/parser/dialect.py b/pysmi/parser/dialect.py index cd7b7e6..85a9def 100644 --- a/pysmi/parser/dialect.py +++ b/pysmi/parser/dialect.py @@ -26,6 +26,7 @@ lowcaseIdentifier=True, curlyBracesAroundEnterpriseInTrap=True, noCells=True, + namedConstraintValue=True, ) # Compatibility API diff --git a/pysmi/parser/smi.py b/pysmi/parser/smi.py index 5ae4273..1a70801 100644 --- a/pysmi/parser/smi.py +++ b/pysmi/parser/smi.py @@ -1420,6 +1420,23 @@ def p_CreationPart(self, p): p[0] = (p[1], p[3]) +# noinspection PyIncorrectDocstring +class NamedConstraintValue: + # tolerate identifiers as named constraint values in integer subtypes + # e.g. SYNTAX Unsigned32 (WAN7 | WAN8) where WAN7/WAN8 are defined TCs + @staticmethod + def p_value(self, p): + """value : NEGATIVENUMBER + | NUMBER + | NEGATIVENUMBER64 + | NUMBER64 + | HEX_STRING + | BIN_STRING + | UPPERCASE_IDENTIFIER + | LOWERCASE_IDENTIFIER""" + p[0] = p[1] + + relaxedGrammar = { "supportSmiV1Keywords": [ SupportSmiV1Keywords.p_importedKeyword, @@ -1438,6 +1455,7 @@ def p_CreationPart(self, p): CurlyBracesInEnterprises.p_EnterprisePart, ], "noCells": [NoCells.p_CreationPart], + "namedConstraintValue": [NamedConstraintValue.p_value], } @@ -1464,6 +1482,7 @@ def parserFactory(**grammarOptions): * lowcaseIdentifier - tolerate lowercase MIB identifiers * curlyBracesAroundEnterpriseInTrap - tolerate curly braces around enterprise ID in TRAP MACRO * noCells - tolerate missing cells (XXX) + * namedConstraintValue - tolerate identifiers as named constraint values in integer subtypes Examples: