Class: Treetop::Runtime::SyntaxNode
- Inherits:
-
Object
- Object
- Treetop::Runtime::SyntaxNode
show all
- Defined in:
- lib/treetop/runtime/syntax_node.rb
Constant Summary
collapse
- @@dot_id_counter =
0
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
|
# File 'lib/treetop/runtime/syntax_node.rb', line 7
def initialize(input, interval, elements = nil)
@input = input
@interval = interval
if (@elements = elements)
@elements.each { |e| e.equal?(true) or e.parent = self }
end
end
|
Instance Attribute Details
Returns the value of attribute input.
4
5
6
|
# File 'lib/treetop/runtime/syntax_node.rb', line 4
def input
@input
end
|
#interval ⇒ Object
Returns the value of attribute interval.
4
5
6
|
# File 'lib/treetop/runtime/syntax_node.rb', line 4
def interval
@interval
end
|
#parent ⇒ Object
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
#<=>(other) ⇒ Object
47
48
49
|
# File 'lib/treetop/runtime/syntax_node.rb', line 47
def <=>(other)
self.interval.first <=> other.interval.first
end
|
#dot_id ⇒ Object
98
99
100
|
# File 'lib/treetop/runtime/syntax_node.rb', line 98
def dot_id
@dot_id ||= @@dot_id_counter += 1
end
|
#elements ⇒ Object
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
# File 'lib/treetop/runtime/syntax_node.rb', line 15
def elements
return @elements if terminal?
last_element = nil
@comprehensive_elements ||= @elements.map do |element|
if element == true
index = last_element ? last_element.interval.last : interval.first
element = SyntaxNode.new(input, index...(index + 1))
element.parent = self
end
last_element = element
end
@comprehensive_elements
end
|
#empty? ⇒ Boolean
43
44
45
|
# File '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/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
91
92
93
94
|
# File 'lib/treetop/runtime/syntax_node.rb', line 91
def inspect(indent="")
inspect_self(indent) +
inspect_children(indent)
end
|
#inspect_children(indent = "") ⇒ Object
78
79
80
81
82
83
84
85
86
87
88
89
|
# File 'lib/treetop/runtime/syntax_node.rb', line 78
def inspect_children(indent="")
return '' unless elements && elements.size > 0
":" +
elements.map do |e|
begin
"\n"+e.inspect(indent+" ")
rescue "\n"+indent+" "+e.inspect
end
end.
join("")
end
|
#inspect_self(indent = "") ⇒ Object
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
# File 'lib/treetop/runtime/syntax_node.rb', line 63
def inspect_self(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
end
|
#nonterminal? ⇒ Boolean
35
36
37
|
# File 'lib/treetop/runtime/syntax_node.rb', line 35
def nonterminal?
!terminal?
end
|
#terminal? ⇒ Boolean
31
32
33
|
# File 'lib/treetop/runtime/syntax_node.rb', line 31
def terminal?
@elements.nil?
end
|
#text_value ⇒ Object
39
40
41
|
# File 'lib/treetop/runtime/syntax_node.rb', line 39
def text_value
input[interval]
end
|
#write_dot(io) ⇒ Object
102
103
104
105
106
107
108
109
110
111
|
# File 'lib/treetop/runtime/syntax_node.rb', line 102
def write_dot(io)
io.puts "node#{dot_id} [label=\"'#{text_value}'\"];"
if nonterminal? then
elements.each do
|x|
io.puts "node#{dot_id} -> node#{x.dot_id};"
x.write_dot(io)
end
end
end
|
#write_dot_file(fname) ⇒ Object
113
114
115
116
117
118
119
120
|
# File 'lib/treetop/runtime/syntax_node.rb', line 113
def write_dot_file(fname)
File.open(fname + ".dot","w") do
|file|
file.puts "digraph G {"
write_dot(file)
file.puts "}"
end
end
|