help with "grammar"

A

Alex Fenton

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) )
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,995
Messages
2,570,226
Members
46,815
Latest member
treekmostly22

Latest Threads

Top