I've fairly recently been using lemon for building several parsers in 
C++ and found what I believe to be a *minimalist* means of avoiding 
symbol clashes without adding bloat, or affecting C code generation.

- New '-e' command line option to define the code extension. By default 
this is 'c', but with this option can define somethinglike -ecxx etc for 
using a C++ compiler.

- New (optional) '%namespace' directive. This can be used to embed the 
'Parse*' routines into a C++ namespace. If the '%namespace' is not 
defined, there is no change in behaviour.
The namespace can be anonymous or contain multiple nested namespaces. 
For example,
     %namespace {}
     %namespace {ns1::ns2::ns3}

This makes it easy to generate lemon parsers for C++ without any 
potential symbol clashes, and it imposes no C++ interface on the user.
It does not fundamentally change how lemon works.

I hope that the changes are useful enough for broader interest and/or 
sufficiently encapsulated that they could be incorporated into the sources.

Here are references to the patches:

https://develop.openfoam.com/Development/openfoam/blob/develop/wmake/src/lemon.c.patch

https://develop.openfoam.com/Development/openfoam/blob/develop/wmake/etc/lempar.c.patch


Cheers,
/mark
_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to