Parsing text file with #include and #define directives
python at bdurham.com
python at bdurham.com
Fri Apr 25 07:56:10 EDT 2008
Arnaud,
Wow!!! That's beautiful. Thank you very much!
Malcolm
<snip>
I think it's straightforward enough to be dealt with simply. Here is
a solution that doesn't handle errors but should work with well-formed
input and handles recursive expansions.
expand(filename) returns an iterator over expanded lines in the file,
inserting lines of included files.
import re
def expand(filename):
defines = {}
def define_repl(matchobj):
return defines[matchobj.group(1)]
define_regexp = re.compile('#(.+?)#')
for line in open(filename):
if line.startswith('#include '):
recfilename = line.strip().split(None, 1)[1]
for recline in expand(recfilename):
yield recline
elif line.startswith('#define '):
_, name, value = line.strip().split(None, 2)
defines[name] = value
else:
yield define_regexp.sub(define_repl, line)
It would be easy to modify it to keep track of line numbers and file
names.
</snip>
More information about the Python-list
mailing list