From: Michael Jackson Date: 2010-05-14T07:02:31+09:00 Subject: Re: [ANN] Citrus ~ Parsing Expressions for Ruby Yes. I'm real. ;) http://mjijackson.com/about -- Michael Jackson http://mjijackson.com @mjijackson On Thu, May 13, 2010 at 3:58 PM, Louis-Philippe wrote: > are you the real Michael Jackson? > > 2010/5/13 Michael Jackson > >> Hi all, >> >> Just released this gem today, and thought others might get some good >> use out of it. It's like Treetop, but takes a completely different >> approach. >> >> http://rubygems.org/gems/citrus >> http://github.com/mjijackson/citrus >> >> The README is below. Enjoy. >> >> +++++++++++++++++++++++++++++++++++++++++++++++++++++++ >> >> ~* Citrus *~ >> >> Parsing Expressions for Ruby >> >> >> Citrus is a compact and powerful parsing library for Ruby that combines the >> elegance and expressiveness of the language with the simplicity and power >> of >> parsing expression grammars. >> >> Citrus grammars look very much like Treetop grammars but take a completely >> different approach. Instead of generating parsers from your grammars, >> Citrus >> evaluates grammars and rules in memory as Ruby modules. In fact, you can >> even >> define your grammars as Ruby modules in the first place, entirely skipping >> the >> parsing/evaluation step. >> >> Terminals are represented as either strings or regular expressions. Support >> for >> sequences, choices, labels, repetition, and lookahead (both positive and >> negative) are all included, as well as character classes and the >> dot-matches- >> anything symbol. >> >> To try it out, fire up an IRB session from the root of the project and run >> one >> of the examples. >> >>    $ irb -Ilib >>    > require 'citrus' >>     => true >>    > Citrus.load 'examples/calc' >>     => [Calc] >>    > match = Calc.parse '1 + 5' >>     => #>    > match.value >>     => 6 >> >> Be sure to try requiring `citrus/debug' (instead of just `citrus') if you'd >> like >> some better visualization of the match results. >> >> The code base is very small and it's well-documented and tested, so it >> should be >> fairly easy to understand for anyone who is familiar with parsing >> expressions. >> >> >>  ** Links ** >> >> >> http://pdos.csail.mit.edu/~baford/packrat/ >> http://en.wikipedia.org/wiki/Parsing_expression_grammar >> http://treetop.rubyforge.org/index.html >> >> >>  ** Installation ** >> >> >> Via RubyGems: >> >>    $ sudo gem install citrus >> >> From a local copy: >> >>    $ git clone git://github.com/mjijackson/citrus.git >>    $ cd citrus >>    $ rake package && sudo rake install >> >> >>  ** License ** >> >> >> Copyright 2010 Michael Jackson >> >> Permission is hereby granted, free of charge, to any person obtaining a >> copy >> of this software and associated documentation files (the "Software"), to >> deal >> in the Software without restriction, including without limitation the >> rights >> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell >> copies of the Software, and to permit persons to whom the Software is >> furnished to do so, subject to the following conditions: >> >> The above copyright notice and this permission notice shall be included in >> all copies or substantial portions of the Software. >> >> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR >> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, >> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE >> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER >> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING >> FROM, >> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN >> THE SOFTWARE. >> >> +++++++++++++++++++++++++++++++++++++++++++++++++++++++ >> >> -- >> Michael Jackson >> http://mjijackson.com >> @mjijackson >> >> >