Prev: meet mothen 300,000 hot people, free live video chat, live
Next: Regexp & named capture groups (was: Parsing, BNF, TreeTop,GhostWheel, ...)
From: Philipp Kempgen on 12 Aug 2010 14:04 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 |