[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