class Parslet::Atoms::Entity
This wraps pieces of parslet definition and gives them a name. The wrapped piece is lazily evaluated and cached. This has two purposes:
-
Avoid infinite recursion during evaluation of the definition
-
Be able to print things by their name, not by their sometimes complicated content.
You don't normally use this directly, instead you should generate it by using the structuring method Parslet.rule.
Attributes
block[R]
name[R]
Public Class Methods
new(name, label=nil, &block)
click to toggle source
Calls superclass method
# File lib/parslet/atoms/entity.rb, line 13 def initialize(name, label=nil, &block) super() @name = name @label = label @block = block end
Public Instance Methods
accept(visitor)
click to toggle source
Call back visitors visit_entity method. See parslet/export for an example.
# File lib/parslet/atoms/visitor.rb, line 24 def accept(visitor) visitor.visit_entity(name, block) end
parslet()
click to toggle source
# File lib/parslet/atoms/entity.rb, line 25 def parslet return @parslet unless @parslet.nil? @parslet = @block.call raise_not_implemented if @parslet.nil? @parslet.label = @label @parslet end
to_s_inner(prec)
click to toggle source
# File lib/parslet/atoms/entity.rb, line 33 def to_s_inner(prec) name.to_s.upcase end
try(source, context, consume_all)
click to toggle source
# File lib/parslet/atoms/entity.rb, line 21 def try(source, context, consume_all) parslet.apply(source, context, consume_all) end
Private Instance Methods
raise_not_implemented()
click to toggle source
# File lib/parslet/atoms/entity.rb, line 37 def raise_not_implemented trace = caller.reject {|l| l =~ %r{#{Regexp.escape(__FILE__)}}} # blatantly stolen from dependencies.rb in activesupport exception = NotImplementedError.new("rule(#{name.inspect}) { ... } returns nil. Still not implemented, but already used?") exception.set_backtrace(trace) raise exception end