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'.
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
# File lib/parslet/parser.rb, line 53 def root(name) define_method(:root) do self.send(name) end end
Call back visitors visit_parser method.
# File lib/parslet/atoms/visitor.rb, line 86 def accept(visitor) visitor.visit_parser(root) end
Exports the current parser instance as a string in the Citrus dialect.
Example:
require 'parslet/export'
class MyParser < Parslet::Parser
root(:expression)
rule(:expression) { str('foo') }
end
MyParser.new.to_citrus # => a citrus grammar as a string
# File lib/parslet/export.rb, line 140 def to_citrus PrettyPrinter.new(Visitors::Citrus). pretty_print(self.class.name, root) end
# File lib/parslet/parser.rb, line 64 def to_s_inner(prec) root.to_s(prec) end
Exports the current parser instance as a string in the Treetop dialect.
Example:
require 'parslet/export'
class MyParser < Parslet::Parser
root(:expression)
rule(:expression) { str('foo') }
end
MyParser.new.to_treetop # => a treetop grammar as a string
# File lib/parslet/export.rb, line 157 def to_treetop PrettyPrinter.new(Visitors::Treetop). pretty_print(self.class.name, root) end
Generated with the Darkfish Rdoc Generator 2.