Class: Treetop::Runtime::SyntaxNode
- Inherits:
-
Object
- Object
- Treetop::Runtime::SyntaxNode
show all
- Defined in:
- lib/vendor/treetop/lib/treetop/runtime/syntax_node.rb
Direct Known Subclasses
AnythingSymbolSpec::Foo, CharacterClassSpec::Foo, OneOrMoreSpec::Foo, SequenceSpec::Foo, TerminalSymbolSpec::Foo, Compiler::DeclarationSequence, Compiler::Grammar, Compiler::InlineModule, Compiler::ParsingExpression, Compiler::ParsingRule, Compiler::TreetopFile, TerminalSyntaxNode, ZeroOrMoreSpec::Foo
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
16
|
# File 'lib/vendor/treetop/lib/treetop/runtime/syntax_node.rb', line 7
def initialize(input, interval, elements = nil)
@input = input
@interval = interval
if @elements = elements
@comprehensive_elements = @elements unless @elements.delete(true)
@elements.each do |element|
element.parent = self
end
end
end
|
Instance Attribute Details
Returns the value of attribute input.
4
5
6
|
# File 'lib/vendor/treetop/lib/treetop/runtime/syntax_node.rb', line 4
def input
@input
end
|
Returns the value of attribute interval.
4
5
6
|
# File 'lib/vendor/treetop/lib/treetop/runtime/syntax_node.rb', line 4
def interval
@interval
end
|
Returns the value of attribute parent.
5
6
7
|
# File 'lib/vendor/treetop/lib/treetop/runtime/syntax_node.rb', line 5
def parent
@parent
end
|
Instance Method Details
#<=>(other) ⇒ Object
47
48
49
|
# File 'lib/vendor/treetop/lib/treetop/runtime/syntax_node.rb', line 47
def <=>(other)
self.interval.first <=> other.interval.first
end
|
18
19
20
21
22
23
24
25
26
27
28
29
|
# File 'lib/vendor/treetop/lib/treetop/runtime/syntax_node.rb', line 18
def elements
return @elements if terminal?
@comprehensive_elements ||= interval.inject(@elements) do |elements, index|
unless @elements.any? {|element| element.interval.include?(index) }
node = SyntaxNode.new(input, index...(index + 1))
node.parent = self
elements << node
end
elements
end.sort
end
|
#empty? ⇒ Boolean
43
44
45
|
# File 'lib/vendor/treetop/lib/treetop/runtime/syntax_node.rb', line 43
def empty?
interval.first == interval.last && interval.exclude_end?
end
|
#extension_modules ⇒ Object
51
52
53
54
55
56
57
58
59
60
61
|
# File 'lib/vendor/treetop/lib/treetop/runtime/syntax_node.rb', line 51
def extension_modules
local_extensions =
class <<self
included_modules-Object.included_modules
end
if local_extensions.size > 0
local_extensions
else
[] end
end
|
#inspect(indent = "") ⇒ Object
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
# File 'lib/vendor/treetop/lib/treetop/runtime/syntax_node.rb', line 63
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 "\n"+indent+" "+e.inspect
end
}.join("") :
""
)
end
|
#nonterminal? ⇒ Boolean
35
36
37
|
# File 'lib/vendor/treetop/lib/treetop/runtime/syntax_node.rb', line 35
def nonterminal?
!terminal?
end
|
#terminal? ⇒ Boolean
31
32
33
|
# File 'lib/vendor/treetop/lib/treetop/runtime/syntax_node.rb', line 31
def terminal?
@elements.nil?
end
|
#text_value ⇒ Object
39
40
41
|
# File 'lib/vendor/treetop/lib/treetop/runtime/syntax_node.rb', line 39
def text_value
input[interval]
end
|