Hi,

I'm looking for a parser which can be fed with some (A)BNF-style rules.

Gave TreeTop a try
---cut---------------------------------------------------------
grammar MathGrammar
  rule additive
    multitive '+' additive / multitive
  end
  rule multitive
    primary '*' multitive / primary
  end
  rule primary
    '(' additive ')' / number
  end
  rule number
    [1-9] [0-9]*
  end
end
---cut---------------------------------------------------------

as well as GhostWheel
---cut---------------------------------------------------------
MathParser = GhostWheel.build_parser {

  rule( :additive  , alt( :multitive,
                          seq( :multitive, '+', :additive )
  ))
  rule( :multitive , alt( seq( :primary, '*', :multitive ),
                          :primary
  ))
  rule( :primary   , alt( seq( '(', :additive, ')' ),
                          :number
  ))
  rule( :number    , seq( /[1-9]/ , zplus( /0-9/ ) ))

  parser( :main, seq(:additive, eof()) )
}
---cut---------------------------------------------------------

'1+1' parses fine.
However when I change the definition of "additive" from
    multitive '+' additive / multitive
to
    multitive / multitive '+' additive
it fails to parse.

Is this a problem with packrat/PEG parsers in general?
If so, which parser is more appropriate?
It should hand back a parse tree.

Memory consumption is not an issue.

Regards,
  Philipp