40 lines
1.3 KiB
Python
Executable File
40 lines
1.3 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
from optparse import OptionParser
|
|
from pyparsing import *
|
|
from value_string import *
|
|
|
|
# define the structure of a macro definition (the empty term is used
|
|
# to advance to the next non-whitespace character)
|
|
macroDef = "#define" + Word(alphas+"_",alphanums+"_").setResultsName("macro") + \
|
|
empty + restOfLine.setResultsName("value")
|
|
|
|
NL = Suppress( LineEnd() )
|
|
restOfLineNL = restOfLine + NL
|
|
|
|
LineComment = Literal('//') + restOfLineNL
|
|
Comment = cStyleComment | LineComment
|
|
|
|
# doesn't work :/
|
|
macroDef.ignore(Comment)
|
|
|
|
parser = OptionParser()
|
|
parser.add_option("-n", "--name", dest="name",
|
|
help="Name of the value_string symbol to create")
|
|
parser.add_option("-f", "--flavor", dest="flavor", default='osmocom',
|
|
help="Flavor of generated C (osmocom, wireshark)")
|
|
parser.add_option("-w", "--weak-symbol", dest="weak", default=True,
|
|
help="Generate weak symbols")
|
|
(options, args) = parser.parse_args()
|
|
filename = args[0]
|
|
|
|
wr = ValueStringWriter(flavor=options.flavor, weak=options.weak, includes=[filename])
|
|
|
|
with open(filename, 'r') as f:
|
|
res = macroDef.scanString(f.read())
|
|
vdict = {}
|
|
wr.export_header()
|
|
for tokens, startPos, EndPos in res:
|
|
vdict[tokens.value] = tokens.macro
|
|
wr.export_value_str(options.name, vdict, sort_key=None)
|