Sha256: 66960b859b134fb5da3dc76f391b047481d19d0d1a31deb3ebfaf35bf125994d
Contents?: true
Size: 1.17 KB
Versions: 1
Compression:
Stored size: 1.17 KB
Contents
class Parslet::Expression::Treetop class Parser < Parslet::Parser root(:expression) rule(:expression) { alternatives } # alternative 'a' / 'b' rule(:alternatives) { (simple >> (spaced('/') >> simple).repeat).as(:alt) } # sequence by simple concatenation 'a' 'b' rule(:simple) { perhaps.repeat(1).as(:seq) } rule(:perhaps) { atom.as(:maybe) >> spaced('?') | atom } rule(:atom) { spaced('(') >> expression.as(:unwrap) >> spaced(')') | string } rule(:string) { str('\'') >> ( (str('\\') >> any) | (str("'").absnt? >> any) ).repeat.as(:string) >> str('\'') >> space? } rule(:space) { match("\s").repeat(1) } rule(:space?) { space.maybe } def spaced(str) str(str) >> space? end end class Transform < Parser::Transform rule(:alt => subtree(:alt)) { Parslet::Atoms::Alternative.new(*alt) } rule(:seq => sequence(:s)) { Parslet::Atoms::Sequence.new(*s) } rule(:unwrap => simple(:u)) { u } rule(:maybe => simple(:m)) { |d| d[:m].maybe } rule(:string => simple(:s)) { |d| str(d[:s]) } end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
parslet-0.11.0 | lib/parslet/expression/treetop.rb |