Про генерацию текстов из деревьев можно прочитать в Antlr
вот простенький генератор текстов
class EvalDict:
"""usage: "___%(ech(a,'asd'))s _____" % evaldict.EvalDict() - interpolate strings"""
def __init__(self, globals=None, locals=None):
if globals is None:
globals = sys._getframe(1).f_globals
self.globals = globals
if locals is None:
locals = sys._getframe(1).f_locals
self.locals = locals
def __getitem__(self, key):
key = key % self
return eval(key, self.globals, self.locals)
def seprp(arg,sep=","):
"make string from arg separated by sep and pepend sep"
return reduce(lambda x, y: str(x)+sep+str(y), arg,"")
def sepr(arg,sep=","):
"make string from arg separated by sep"
if len(arg)==0:
return ""
else:
return reduce(lambda x, y: str(x)+sep+str(y), arg)
def seprnl(arg):
return sepr(arg,"\n")
def ToText(ex):
if type(ex) is type(""):
return "<li>"+ ex+"</li>"
else:
return """
<ul>
%(seprnl(map(ToText,ex)))s
</ul>
""" %EvalDict()
data=['dir1',['subdir1','subdir2'],'dir2','dir3',['subdir3',['subsubdir1','asd']]]
print ToText(data)
собственно генератор это ToText остальное у меня библиотечка.