Sha256: 0c940377cc197e1bce4a5a38edd35ea1cfa55927ba3239f02632bc70c6cefc8b
Contents?: true
Size: 1.77 KB
Versions: 3
Compression:
Stored size: 1.77 KB
Contents
# The base class for all your parsers. Use as follows: # # require 'parslet' # # class MyParser < Parslet::Parser # rule(:a) { str('a').repeat } # root(:a) # end # # pp MyParser.new.parse('aaaa') # => 'aaaa' # pp MyParser.new.parse('bbbb') # => Parslet::Atoms::ParseFailed: # # Don't know what to do with bbbb at line 1 char 1. # # Parslet::Parser is also a grammar atom. This means that you can mix full # fledged parsers freely with small parts of a different parser. # # Example: # class ParserA < Parslet::Parser # root :aaa # rule(:aaa) { str('a').repeat(3,3) } # end # class ParserB < Parslet::Parser # root :expression # rule(:expression) { str('b') >> ParserA.new >> str('b') } # end # # In the above example, ParserB would parse something like 'baaab'. # class Parslet::Parser < Parslet::Atoms::Base include Parslet class <<self # class methods # Define the parsers #root function. This is the place where you start # parsing; if you have a rule for 'file' that describes what should be # in a file, this would be your root declaration: # # class Parser # root :file # rule(:file) { ... } # end # # #root declares a 'parse' function that works just like the parse # function that you can call on a simple parslet, taking a string as input # and producing parse output. # # In a way, #root is a shorthand for: # # def parse(str) # your_parser_root.parse(str) # end # def root(name) define_method(:root) do self.send(name) end end end def try(source, context) root.try(source, context) end def to_s_inner(prec) root.to_s(prec) end end
Version data entries
3 entries across 3 versions & 2 rubygems
Version | Path |
---|---|
ghazel-parslet-1.4.0.2 | lib/parslet/parser.rb |
ghazel-parslet-1.4.0.1 | lib/parslet/parser.rb |
parslet-1.4.0 | lib/parslet/parser.rb |