Class: Parslet::Atoms::Entity

Inherits:
Base
  • Object
show all
Defined in:
lib/parslet/atoms/entity.rb,
lib/parslet/atoms/visitor.rb

Overview

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.

Constant Summary

Constants included from Precedence

Precedence::ALTERNATE, Precedence::BASE, Precedence::LOOKAHEAD, Precedence::OUTER, Precedence::REPETITION, Precedence::SEQUENCE

Instance Attribute Summary collapse

Attributes inherited from Base

#label

Instance Method Summary collapse

Methods inherited from Base

#apply, #cached?, #inspect, #parse, #parse_with_debug, precedence, #setup_and_apply, #to_s

Methods included from CanFlatten

#flatten, #flatten_repetition, #flatten_sequence, #foldl, #merge_fold, #warn_about_duplicate_keys

Methods included from DSL

#>>, #absent?, #as, #capture, #ignore, #maybe, #present?, #repeat, #|

Constructor Details

#initialize(name, label = nil, &block) ⇒ Entity

Returns a new instance of Entity.


13
14
15
16
17
18
19
20
# File 'lib/parslet/atoms/entity.rb', line 13

def initialize(name, label=nil, &block)
  super()
  
  @name = name
  @label = label
  @block = block
  @parslet = nil
end

Instance Attribute Details

#blockObject (readonly)

Returns the value of attribute block


12
13
14
# File 'lib/parslet/atoms/entity.rb', line 12

def block
  @block
end

#nameObject (readonly)

Returns the value of attribute name


12
13
14
# File 'lib/parslet/atoms/entity.rb', line 12

def name
  @name
end

Instance Method Details

#accept(visitor) ⇒ Object

Call back visitors #visit_entity method. See parslet/export for an example.


24
25
26
# File 'lib/parslet/atoms/visitor.rb', line 24

def accept(visitor)
  visitor.visit_entity(name, block)
end

#parsletObject


26
27
28
29
30
31
32
# File 'lib/parslet/atoms/entity.rb', line 26

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) ⇒ Object


34
35
36
# File 'lib/parslet/atoms/entity.rb', line 34

def to_s_inner(prec)
  name.to_s.upcase
end

#try(source, context, consume_all) ⇒ Object


22
23
24
# File 'lib/parslet/atoms/entity.rb', line 22

def try(source, context, consume_all)
  parslet.apply(source, context, consume_all)
end