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> -- http://mail.python.org/mailman/listinfo/python-list