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
|
# File 'lib/treetop/runtime/syntax_node.rb', line 7
def initialize(input, interval, elements = nil)
@input = input
@interval = interval
@elements = elements
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
45
46
47
|
# File 'lib/treetop/runtime/syntax_node.rb', line 45
def <=>(other)
self.interval.first <=> other.interval.first
end
|
#dot_id ⇒ Object
89
90
91
|
# File 'lib/treetop/runtime/syntax_node.rb', line 89
def dot_id
@dot_id ||= @@dot_id_counter += 1
end
|
#elements ⇒ Object
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
# File 'lib/treetop/runtime/syntax_node.rb', line 13
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))
end
element.parent = self
last_element = element
end
@comprehensive_elements
end
|
#empty? ⇒ Boolean
41
42
43
|
# File 'lib/treetop/runtime/syntax_node.rb', line 41
def empty?
interval.first == interval.last && interval.exclude_end?
end
|
#extension_modules ⇒ Object
49
50
51
52
53
54
55
56
57
58
59
|
# File 'lib/treetop/runtime/syntax_node.rb', line 49
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
# File 'lib/treetop/runtime/syntax_node.rb', line 61
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
33
34
35
|
# File 'lib/treetop/runtime/syntax_node.rb', line 33
def nonterminal?
!terminal?
end
|
#terminal? ⇒ Boolean
29
30
31
|
# File 'lib/treetop/runtime/syntax_node.rb', line 29
def terminal?
@elements.nil?
end
|
#text_value ⇒ Object
37
38
39
|
# File 'lib/treetop/runtime/syntax_node.rb', line 37
def text_value
input[interval]
end
|
#write_dot(io) ⇒ Object
93
94
95
96
97
98
99
100
101
102
|
# File 'lib/treetop/runtime/syntax_node.rb', line 93
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
104
105
106
107
108
109
110
111
|
# File 'lib/treetop/runtime/syntax_node.rb', line 104
def write_dot_file(fname)
File.open(fname + ".dot","w") do
|file|
file.puts "digraph G {"
write_dot(file)
file.puts "}"
end
end
|