In article <20051014030528.909.qmail / web36103.mail.mud.yahoo.com>,
Eric Mahurin  <eric_mahurin / yahoo.com> wrote:
>Well, I'm finally doing a release of my grammar package:
>
>http://rubyforge.org/projects/grammar/
>
>I also released cursor-0.9 to go along with it:
>
>http://rubyforge.org/projects/cursor/
>
>Here are some of the features of it:
>
>* BNF-like grammar written directly in Ruby (by overriding +,
>|, *, &, ~, etc operators)
>
>* lexer and parser grammars are specified in exactly the same
>way - one parses characters and the other tokens
>
>* can write a lexer-free parser
>
>* may define tokens however is appropriate
>
>* variety of Cursor options for connecting lexer to parser
>
>* can put lexer and parser in different threads
>
>* defaults to one character/token lookahead, but can extend to
>arbitrary lookahead where needed
>
>* autogenerates flattened code by using a macro-like facility
>
>* ruby actions easily specified in blocks
>
>* lots of convienent Grammar methods to combine and manipulate
>grammars
>
>
>TODO:
>
>* error reporting needs work.  File/line/column numbers is
>needed
>
>* Cursor::Producer (multithreaded lexer cursor) needs some
>love.  It doesn't have a very robut interface.
>
>* various small API changes.  need more examples to see what
>would be good to have.
>
>* better testing.  only have partial random testing.
>
>
>I also have to samples that you can look at:
>
>- tcl interpreter: a complete tcl parser (no lexer needed) and
>interpreter written in under 150 lines of ruby code.  The
>example fact.tcl shows a recursive proc being defined and used
>in tcl.
>
>- infix 2 postfix expression converter: shows a lexer and
>parser and how they can be multi-threaded.  converts an infix
>expression into a postfix expression (looks like Joy) returned
>in a simple array.
>

Just in time for writing our new Ruby parser in Ruby to solve the default 
block argument conundrum ;-)

BTW: didn't you use this to write a Verilog parser?

Phil