Hello,
I have written a PEG generator in python that is currently capable
of outputing C++ and python. Mostly I use the C++ version so that has
been heavily worked on, the python output works but probably has some
bugs in it. This is part of a game I am working on, you can get the
generator here:
svn co
https://paintown.svn.sourceforge.net/svnroot/paintown/trunk/src/mugen/parser
peg.py is the generator, the .peg files are input written in mostly EBNF.
I plan to generate more languages in the future (see the TODO at the
top). If anyone is interested in this code don't hesitate to ask me
about it.
Miscellaneous:
1. Generating an AST with a C++ PEG necessitates using a garbage
collector (details upon request) so I had to litter the code with
annoying pointer saving operations. Screwing up these little details
causes massive bugs later on!
2. I implemented a few optimizations from the Rats! paper such as chunks.
3. Rules are parameterized over values instead of other rules, so you
can say something like
foo = "a" "b" bar($1)
bar(x) = ... {{ x }}
And 'x' will be "a". This lets me implement tail recursion nicely so I
don't run out of stack space. In particular I can implement infix math
expressions that uses up stack space proportional to the depth of
nesting (as opposed to the length of the expression).
4. The infix calculator example I referenced gets about 800kb/s on my
laptop while an equivalent version using Rats! gets 1.7mb/s. I did as
much optimizing as I could but I guess Java is just better than C++!
Actually the reason the C++ version is so slow is because I do a lot of
stack copying (again the GC in Java is a win here).
_______________________________________________
PEG mailing list
[email protected]
https://lists.csail.mit.edu/mailman/listinfo/peg