From 51467d8c1bbb9930a1d6fb95120500c3b25c9318 Mon Sep 17 00:00:00 2001 From: Jellyfrog Date: Thu, 22 Jan 2026 16:41:35 +0100 Subject: [PATCH] fix: add lowcaseTypeName to tolerate lowercase type names in type declarations Co-Authored-By: Claude Opus 4.5 --- pysmi/lexer/smi.py | 1 + pysmi/parser/dialect.py | 1 + pysmi/parser/smi.py | 13 +++++++++++++ 3 files changed, 15 insertions(+) diff --git a/pysmi/lexer/smi.py b/pysmi/lexer/smi.py index 43455db..957c5c1 100644 --- a/pysmi/lexer/smi.py +++ b/pysmi/lexer/smi.py @@ -534,6 +534,7 @@ def tokens(): "lowcaseIdentifier": [], "curlyBracesAroundEnterpriseInTrap": [], "noCells": [], + "lowcaseTypeName": [], } diff --git a/pysmi/parser/dialect.py b/pysmi/parser/dialect.py index cd7b7e6..7170c92 100644 --- a/pysmi/parser/dialect.py +++ b/pysmi/parser/dialect.py @@ -26,6 +26,7 @@ lowcaseIdentifier=True, curlyBracesAroundEnterpriseInTrap=True, noCells=True, + lowcaseTypeName=True, ) # Compatibility API diff --git a/pysmi/parser/smi.py b/pysmi/parser/smi.py index 5ae4273..b183f55 100644 --- a/pysmi/parser/smi.py +++ b/pysmi/parser/smi.py @@ -1420,6 +1420,17 @@ def p_CreationPart(self, p): p[0] = (p[1], p[3]) +# noinspection PyIncorrectDocstring +class LowcaseTypeName: + # tolerate lowercase type names in type declarations + @staticmethod + def p_typeName(self, p): + """typeName : UPPERCASE_IDENTIFIER + | LOWERCASE_IDENTIFIER + | typeSMI""" + p[0] = p[1] + + relaxedGrammar = { "supportSmiV1Keywords": [ SupportSmiV1Keywords.p_importedKeyword, @@ -1438,6 +1449,7 @@ def p_CreationPart(self, p): CurlyBracesInEnterprises.p_EnterprisePart, ], "noCells": [NoCells.p_CreationPart], + "lowcaseTypeName": [LowcaseTypeName.p_typeName], } @@ -1464,6 +1476,7 @@ def parserFactory(**grammarOptions): * lowcaseIdentifier - tolerate lowercase MIB identifiers * curlyBracesAroundEnterpriseInTrap - tolerate curly braces around enterprise ID in TRAP MACRO * noCells - tolerate missing cells (XXX) + * lowcaseTypeName - tolerate lowercase type names in type declarations Examples: