Generating C++ code

Jean-Michel Pichavant jeanmichel at sequans.com
Wed Oct 10 05:59:50 EDT 2012


----- Original Message -----
> On Tue, 09 Oct 2012 20:55:48 +0100
> Andrea Crotti <andrea.crotti.0 at gmail.com> wrote:
> 
> > On 10/09/2012 05:00 PM, Jean-Michel Pichavant wrote:
> > > Greetings,
> > >
> > > I'm trying to generate C++ code from an XML file. I'd like to use
> > > a template engine, which imo produce something readable and
> > > maintainable.
> > > My google search about this subject has been quite unsuccessful,
> > > I've been redirected to template engine specific to html mostly.
> > >
> > > Does anybody knows a python template engine for generating C++
> > > code ?
> > >
> > > Here's my flow:
> > >
> > > XML file -> nice python app -> C++ code
> > >
> > >  From what I know I could use Cheetah, a generic template engine.
> > >  I never used it though, I'm not sure this is what I need.
> > > I'm familiar with jinja2 but I'm not sure I could use it to
> > > generate C++ code, did anybody try ? (maybe that's a silly
> > > question)
> > >
> > > Any advice would be appreciated.
> > >
> > > JM
> > 
> > I think you can use anything to generate C++ code, but is it a good
> > idea?
> > Are you going to produce this code only one time and then maintain
> > it
> > manually?
> > 
> > And are you sure that the design that you would get from the XML
> > file
> > actually makes sense when
> > translated in C++?
> > --
> > http://mail.python.org/mailman/listinfo/python-list
> 
> You can build nice python app with Cython/Pyrex too if you got
> sufficient knowledge in C/C++ programming
> to extend the app in C. :-)
> 
> Otherwise that seem like a little counter-productive to produce a
> python template only for generating C stubs when python
> is good for many things without requiring advanced C++ skills like
> memory management, etc.
>  
> HTH,
> E
> --
> Etienne Robillard
> Green Tea Hackers Club
> Fine Software Carpentry For The Rest Of Us!
> http://gthc.org/
> erob at gthcfoundation.org

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.

JM



More information about the Python-list mailing list