Class: Chronar::Parser::AbstractParslet

Inherits:
Parslet::Parser
  • Object
show all
Defined in:
lib/chronar/parser/abstract_parslet.rb

Class Method Summary collapse

Instance Method Summary collapse

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(name) ⇒ Object (private)



40
41
42
43
44
45
46
47
48
49
# File 'lib/chronar/parser/abstract_parslet.rb', line 40

def method_missing(name, ...)
  const = Chronar::Parser.const_get(name.to_s.split("_").map(&:capitalize).join)
  # print self.class.name, ".", name, " <- ", const, "\n"
  if const.respond_to?(:new)
    self.class.rule(name) { const.new(...) }
    public_send(name)
  else
    super
  end
end

Class Method Details

.root(name, &definition) ⇒ Object

Define root rule. Matched content is automatically named the same.

Parameters:

  • name (Symbol)

Yield Returns:

  • (Parslet::Atom::Base)


13
14
15
16
# File 'lib/chronar/parser/abstract_parslet.rb', line 13

def self.root(name, &definition)
  super(name)
  rule(name) { instance_eval(&definition).as(name) }
end

Instance Method Details

#blanksParslet::Atom::Base

Create a new parslet that matches zero or more whitespace characters, comments, and newlines.

Returns:

  • (Parslet::Atom::Base)


30
31
32
# File 'lib/chronar/parser/abstract_parslet.rb', line 30

def blanks
  (space_separator | comment | newline).repeat
end

#bracketed(parslet) ⇒ Parslet::Atom::Base

Create a new parslet by surrounding parslet with round brackets.

Parameters:

  • parslet (Parslet::Atom::Base)

Returns:

  • (Parslet::Atom::Base)


22
23
24
# File 'lib/chronar/parser/abstract_parslet.rb', line 22

def bracketed(parslet)
  str("(") >> parslet >> str(")")
end