# # cpp_enum_parser.py # # Posted by Mark Tolonen on comp.lang.python in August, 2009, # Used with permission. # # Parser that scans through C or C++ code for enum definitions, and # generates corresponding Python constant definitions. # # from pyparsing import * # sample string with enums and other stuff sample = """ stuff before enum hello { Zero, One, Two, Three, Five=5, Six, Ten=10 }; in the middle enum blah { alpha, beta, gamma = 10 , zeta = 50 }; at the end """ # syntax we don't want to see in the final parse tree LBRACE, RBRACE, EQ, COMMA = map(Suppress, "{}=,") _enum = Suppress("enum") identifier = Word(alphas, alphanums + "_") integer = Word(nums) enumValue = Group(identifier("name") + Optional(EQ + integer("value"))) enumList = Group(enumValue + ZeroOrMore(COMMA + enumValue)) enum = _enum + identifier("enum") + LBRACE + enumList("names") + RBRACE # find instances of enums ignoring other syntax for item, start, stop in enum.scanString(sample): id = 0 for entry in item.names: if entry.value != "": id = int(entry.value) print("%s_%s = %d" % (item.enum.upper(), entry.name.upper(), id)) id += 1