Class: Cry::ParseTree
- Inherits:
-
Array
- Object
- Array
- Cry::ParseTree
- Defined in:
- lib/parse_tree.rb
Instance Method Summary collapse
- #evaluate ⇒ Object
- #height ⇒ Object
-
#initialize(*args) ⇒ ParseTree
constructor
A new instance of ParseTree.
- #inspect ⇒ Object (also: #to_s)
- #node_arguments ⇒ Object
- #node_arguments=(node_arguments) ⇒ Object
- #node_method ⇒ Object
- #node_method=(node_method) ⇒ Object
- #node_object ⇒ Object
- #node_object=(node_object) ⇒ Object
Constructor Details
#initialize(*args) ⇒ ParseTree
Returns a new instance of ParseTree.
3 4 5 |
# File 'lib/parse_tree.rb', line 3 def initialize(*args) super args.to_ary end |
Instance Method Details
#evaluate ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 19 |
# File 'lib/parse_tree.rb', line 7 def evaluate evaluated_node_object = evaluate_node(node_object) raw_send_arguments = node_arguments.map{|argument| evaluate_node(argument) }.insert(0, node_method) evaluated_node_object.send *raw_send_arguments rescue ArgumentError => original_error begin standard_send_arguments = raw_send_arguments block_send_argument = raw_send_arguments.pop evaluated_node_object.send *standard_send_arguments, &block_send_argument rescue Exception raise original_error end end |
#height ⇒ Object
45 46 47 |
# File 'lib/parse_tree.rb', line 45 def height (node_method ? 1 : 0) + self[1..size].to_a.map{|node| node.is_a?(ParseTree) ? node.height : 1 }.max.to_i end |
#inspect ⇒ Object Also known as: to_s
49 50 51 |
# File 'lib/parse_tree.rb', line 49 def inspect super.sub(/^\[/, "(").sub(/\]$/, ")") end |
#node_arguments ⇒ Object
37 38 39 |
# File 'lib/parse_tree.rb', line 37 def node_arguments size >= 2 ? self[2..size].to_a : Array.new end |
#node_arguments=(node_arguments) ⇒ Object
41 42 43 |
# File 'lib/parse_tree.rb', line 41 def node_arguments=(node_arguments) self[2..size] = node_arguments end |
#node_method ⇒ Object
21 22 23 |
# File 'lib/parse_tree.rb', line 21 def node_method self.first.to_sym unless empty? end |
#node_method=(node_method) ⇒ Object
25 26 27 |
# File 'lib/parse_tree.rb', line 25 def node_method=(node_method) self[0] = node_method.to_sym end |
#node_object ⇒ Object
29 30 31 |
# File 'lib/parse_tree.rb', line 29 def node_object self[1] unless size < 2 end |
#node_object=(node_object) ⇒ Object
33 34 35 |
# File 'lib/parse_tree.rb', line 33 def node_object=(node_object) self[1] = node_object end |