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