class Parslet::Parser

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'.

Public Class Methods

root(name) click to toggle source

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)
  undef_method :root if method_defined? :root
  define_method(:root) do
    self.send(name)
  end
end

Public Instance Methods

accept(visitor) click to toggle source

Call back visitors visit_parser method.

# File lib/parslet/atoms/visitor.rb, line 86
def accept(visitor)
  visitor.visit_parser(root)
end
to_citrus() click to toggle source

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
to_s_inner(prec) click to toggle source
# File lib/parslet/parser.rb, line 65
def to_s_inner(prec)
  root.to_s(prec)
end
to_treetop() click to toggle source

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
try(source, context, consume_all) click to toggle source
# File lib/parslet/parser.rb, line 61
def try(source, context, consume_all)
  root.try(source, context, consume_all)
end