SMI parser

SNMP MIBs are written in two kinds of special language - SMIv1 and SMIv2. The first SMI version is obsolete, most MIBs by now are written in SMIv2 grammar. There are also efforts aimed at improving SMIv2, but those MIBs are in great minority at the time of this writing.

PySMI is designed to handle both SMIv1 and SMIv2. The way it is done is that SMIv2 is considered the most basic and complete, whereas SMIv1 is a specialization of SMIv2 syntax.

For a user to acquire SMIv2 parser the parserFactory function should be called with the SMI dialect object.

The parser object should be passed to the MibCompiler object.


Factory function producing custom specializations of base SmiV2Parser class.

Keyword Arguments:
 grammarOptions – a list of (bool) typed optional keyword parameters enabling particular set of SMIv2 grammar relaxations.
Returns:Specialized copy of SmiV2Parser class.


The following SMIv2 grammar relaxation parameters are defined:

  • supportSmiV1Keywords - parses SMIv1 grammar
  • supportIndex - tolerates ASN.1 types in INDEX clause
  • commaAtTheEndOfImport - tolerates stray comma at the end of IMPORT section
  • commaAtTheEndOfSequence - tolerates stray comma at the end of sequence of elements in MIB
  • mixOfCommasAndSpaces - tolerate a mix of comma and spaces in MIB enumerations
  • uppercaseIdentifier - tolerate uppercased MIB identifiers
  • lowcaseIdentifier - tolerate lowercase MIB identifiers
  • curlyBracesAroundEnterpriseInTrap - tolerate curly braces around enterprise ID in TRAP MACRO
  • noCells - tolerate missing cells (XXX)


>>> from pysmi.parser import smi
>>> SmiV1Parser = smi.parserFactory(supportSmiV1Keywords=True, supportIndex=True)


Please, note that parserFactory function returns a class, not class instance. Make sure to instantiate it when passing to MibCompiler class constructor.