From 27e183a78c8062ed7c2bbb91655a5e56cd697bba Mon Sep 17 00:00:00 2001 From: Cengiz Kaygusuz Date: Mon, 20 Nov 2017 20:46:39 -0500 Subject: Move src to root --- examples/cpp_enum_parser.py | 52 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 examples/cpp_enum_parser.py (limited to 'examples/cpp_enum_parser.py') diff --git a/examples/cpp_enum_parser.py b/examples/cpp_enum_parser.py new file mode 100644 index 0000000..cd8f525 --- /dev/null +++ b/examples/cpp_enum_parser.py @@ -0,0 +1,52 @@ +# +# 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 -- cgit v1.2.1