[Baypiggies] Mini languages - possible short talk in the future?

Shannon -jj Behrens jjinux at gmail.com
Thu May 11 01:48:12 CEST 2006


On 5/10/06, Ken Seehart <ken at seehart.com> wrote:
>  Shannon -jj Behrens wrote:
> On 5/7/06, Ken Seehart <ken at seehart.com> wrote:
>
>  Never mind, this is really trivial.  Any C++ code that is outside my
>  "cellclass" block is passed on unmodified. The only recursion I have to
> deal
>  with in my grammar is a C++ function body.  And since I don't actually need
>  to process the function body, I just need to recursively scan for a pair of
>  matching braces (not rocket science).  Everything else is regular
>  expressions.  I definitely don't need an LALR parser for this :-)
>
>   So I don't have any further questions.
>
>   Thanks Dennis and Dennis for your comments.
>
>   - Ken
>
>   Ken Seehart wrote:
>
>   I want to implement a simple language translator (a superset of C++), but
> I
>  haven't done anything of this kind since college (a couple decades ago).  I
>  would like to use python tools as much as possible.
>
>   NICL code -> [C++ preprocessor (gcc)] -> [NICL translator] -> [C++
> compiler
>  (gcc)] -> object code
>
>   The translator needs to be able to parse special non-c++ syntax to
> generate
>  c++, and leave other code intact.
>
>   More documentation on my project here:
>
> http://www.seehart.com/neuralintegrator.com/documentation/ni_book/defining_cell_types.st
>
>   I could almost get by with just a python script using regular expressions
>  (my grammar is simple enough), but I need to know a certain amount of
>  contextual information. E.g., if I am parsing "cellclass mycell { ... }",
>  the contents between the braces must be processed accordingly.  This means
> I
>  have to know when I reach the closing brace (which I can't do with regular
>  expressions).  However, I'm sure I could do a prototype this way, using the
>  assumption that the a closing brace on a class matches "^};", but that
> would
>  be just plain sloppy :-)
>
>   So I think one way or another I'm stuck with implementing an LALR parser.
>
>   I'm wondering if there is anyone in this community with experience doing
>  this kind of thing.
>
>   - Ken Seehart
>
>  I once interviewed at a company that had implemented a mini-language
>  on top of C++ using templates and operator overloading.  Apparently,
>  they had even overloaded the comma operator.
>
>  /me shudders
>
>  -jj
>
>  Yikes.  Template abuse is pretty scary stuff.  Here's a scary book on the
> subject,
>  for those who are interested. :
> http://boost-consulting.com/mplbook/
>
>  Kind of reminds me of people who get way into John Conways "Life", and
> build
>  computers and things out of glider guns.

Heh, I did my senior thesis on Conway's game of "Life", but now we're
*way* off topic ;)

>  Perhaps a more elegant way to do metaprogramming would be to kind of squish
>  python into the preprocessor phase.

Agreed.  Both the QT folks and the GTK folks have special
preprocessors.  The QT one is mandatory, the GTK one is not.

>  I recommend making sure you actually have a good reason to do this kind of
> thing.
>  Usually more straightforward techniques suffice (e.g. write your program in
> python
>  and use extending and embedding).  But good reasons do exist.
>
>  Anyway, I have successfully completed my NICL compiler.  It really works!
>
>  NICL code -> [preprocessor (cpp)] -> [NICL translator] -> [compiler (gcc)]
> -> object code
>
>  If there is interest, I'd be willing to give a short talk on the topic some
> time:
>    "How to extend the C++ grammar using Python"
>
>  The documentation on my language is here:
>
>
> http://www.neuralintegrator.com/documentation/ni_book/nicl.st

Happy Hacking,
-jj


More information about the Baypiggies mailing list