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

Ken Seehart ken at seehart.com
Thu May 11 01:29:57 CEST 2006


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.

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

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

- Ken Seehart

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.python.org/pipermail/baypiggies/attachments/20060510/b37fd298/attachment.html 


More information about the Baypiggies mailing list