Class: Treetop::Runtime::SyntaxNode

Inherits:
Object
  • Object
show all
Defined in:
lib/treetop/runtime/syntax_node.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(input, interval, elements = nil) ⇒ SyntaxNode

Returns a new instance of SyntaxNode.



7
8
9
10
11
12
13
14
15
# File 'lib/treetop/runtime/syntax_node.rb', line 7

def initialize(input, interval, elements = nil)
  @input = input
  @interval = interval
  if @elements = elements
    elements.each do |element|
      element.parent = self
    end
  end
end

Instance Attribute Details

#elementsObject (readonly)

Returns the value of attribute elements.



4
5
6
# File 'lib/treetop/runtime/syntax_node.rb', line 4

def elements
  @elements
end

#inputObject (readonly)

Returns the value of attribute input.



4
5
6
# File 'lib/treetop/runtime/syntax_node.rb', line 4

def input
  @input
end

#intervalObject (readonly)

Returns the value of attribute interval.



4
5
6
# File 'lib/treetop/runtime/syntax_node.rb', line 4

def interval
  @interval
end

#parentObject

Returns the value of attribute parent.



5
6
7
# File 'lib/treetop/runtime/syntax_node.rb', line 5

def parent
  @parent
end

Instance Method Details

#empty?Boolean

Returns:

  • (Boolean)


29
30
31
# File 'lib/treetop/runtime/syntax_node.rb', line 29

def empty?
 interval.first == interval.last && interval.exclude_end?
end

#extension_modulesObject



33
34
35
36
37
38
39
40
41
42
43
# File 'lib/treetop/runtime/syntax_node.rb', line 33

def extension_modules
  local_extensions =
    class <<self
      included_modules-Object.included_modules
    end
  if local_extensions.size > 0
    local_extensions
  else
    []    # There weren't any; must be a literal node
  end
end

#inspect(indent = "") ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/treetop/runtime/syntax_node.rb', line 45

def inspect(indent="")
  em = extension_modules
  interesting_methods = methods-[em.last ? em.last.methods : nil]-self.class.instance_methods
  im = interesting_methods.size > 0 ? " (#{interesting_methods.join(",")})" : ""
  tv = text_value
  tv = "...#{tv[-20..-1]}" if tv.size > 20

  indent +
  self.class.to_s.sub(/.*:/,'') +
    em.map{|m| "+"+m.to_s.sub(/.*:/,'')}*"" +
    " offset=#{interval.first}" +
    ", #{tv.inspect}" +
    im +
    (elements && elements.size > 0 ?
      ":" +
        (@elements||[]).map{|e|
    begin
      "\n"+e.inspect(indent+"  ")
    rescue  # Defend against inspect not taking a parameter
      "\n"+indent+" "+e.inspect
    end
        }.join("") :
      ""
    )
end

#nonterminal?Boolean

Returns:

  • (Boolean)


21
22
23
# File 'lib/treetop/runtime/syntax_node.rb', line 21

def nonterminal?
  !terminal?
end

#terminal?Boolean

Returns:

  • (Boolean)


17
18
19
# File 'lib/treetop/runtime/syntax_node.rb', line 17

def terminal?
  @elements.nil?
end

#text_valueObject



25
26
27
# File 'lib/treetop/runtime/syntax_node.rb', line 25

def text_value
  input[interval]
end