Forum: Ruby help with "grammar"

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Alex F. (Guest)
on 2009-05-13 23:55
(Received via mailing list)
Hi

I'm looking into creating a parser that understands a very limited
subset of RTF (Rich Text Format).

I started with Treetop parser generator [1], and was able to get a
parser that analysed RTF syntax working in less than an hour. Brill.
Unfortunately the parser was way too slow for use in a real-time app.

Grammar [2] claims it generates much faster parsers. However, having
looked at the tests and tried to emulate them, I can't get a basic
parser up and running that works sensibly. The super-simple parser (code
below) is just meant to parse a group of digits and end.

- The version below does nothing
- If I set it to compile gram[0], it crashes out because (I think) it
only uses the digit rule, so dies when it meets EOF


I'd be grateful if anyone could say what I'm missing, or even better,
point me to a straightforward example of using grammar, as the
documentation is pretty sparse.

thanks
alex


[1] http://treetop.rubyforge.org/
[2] http://rubyforge.org/projects/grammar/


---

require 'grammar'
require 'stringio'
include Grammar::Molecules

gram = Grammar.new do
   digit = E(?0..?9)

   (digit.repeat0).group("") + EOF
end

require 'grammar/ruby0'
rgram = Grammar::Ruby0.compile(gram[0])

class Output
   def <<(token)
     p token
   end
end

rgram.call(Output.new, StringIO.new('1234').method(:getc) )
This topic is locked and can not be replied to.