Jean-Michel Pichavant, 10.10.2012 11:59: > Well, the C++ code will end up running on a MIPS on a SOC, > unfortunately, python is not an option here. The xml to C++ makes a lot > of sense, because only a small part of the code is generated that way > (everything related to log & fatal events). Everything else is written > directly in C++. > > To answer Andrea's question, the files are regenerated for every > compilation (well, unless the xml didn't change, but the xml is highly > subject to changes, that's actually its purpose) > > Currently we already have a python script that translate this xml file > to C++, but it's done in a way that is difficult to maintain. Basically, > when parsing the xml file, it writes the generated C++ code. Something > like: > > if 'blabla' in xml: > h_file.write("#define blabla 55", append="top") > c_file.write("someglobal = blabla", append="bottom") > > This is working, but the python code is quite difficult to maintain, > there's a lot of escaping going on, it's almost impossible to see the > structure of the c files unless generating one and hopping it's > successful. It's also quite difficult to insert code exactly where you > want, because you do not know the order in which the xml trees are > defined then parsed. > > I was just wondering if a template engine would help. Maybe not.
Depends. Template engines are great for injecting small data snippets into large static code blocks. They are less good for finely structured code with conditional insertions and varying code order all over the place. In Cython, we use a combination of both: a template engine for large code blocks with small adaptations and line-by-line generated C code for highly varying code. Works nicely. As for a template engine, we use Tempita for the more complex stuff (because the implementation is small and can be embedded) and string.Template for the simple stuff. If you need something more advanced straight away, I'd say go for Cheetah. In case you decide not to use a template engine at all, given that your input format is XML, consider using lxml to build up your code tree for you by using custom element classes. Then, generate the code recursively top-down. http://lxml.de/element_classes.html Might or might not be a suitable approach, depending on the complexity of your mapping from XML to code. Stefan -- http://mail.python.org/mailman/listinfo/python-list