rley 0.7.07 → 0.7.08

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +348 -54
  3. data/LICENSE.txt +1 -1
  4. data/README.md +3 -2
  5. data/examples/NLP/engtagger.rb +193 -190
  6. data/examples/NLP/nano_eng/nano_grammar.rb +5 -5
  7. data/examples/data_formats/JSON/cli_options.rb +1 -1
  8. data/examples/data_formats/JSON/json_ast_builder.rb +12 -9
  9. data/examples/data_formats/JSON/json_ast_nodes.rb +12 -21
  10. data/examples/data_formats/JSON/json_grammar.rb +2 -2
  11. data/examples/data_formats/JSON/json_lexer.rb +8 -8
  12. data/examples/data_formats/JSON/json_minifier.rb +1 -1
  13. data/examples/general/calc_iter1/calc_ast_builder.rb +13 -10
  14. data/examples/general/calc_iter1/calc_ast_nodes.rb +23 -37
  15. data/examples/general/calc_iter1/calc_grammar.rb +2 -2
  16. data/examples/general/calc_iter1/calc_lexer.rb +6 -4
  17. data/examples/general/calc_iter1/spec/calculator_spec.rb +5 -5
  18. data/examples/general/calc_iter2/calc_ast_builder.rb +5 -3
  19. data/examples/general/calc_iter2/calc_ast_nodes.rb +27 -43
  20. data/examples/general/calc_iter2/calc_grammar.rb +3 -3
  21. data/examples/general/calc_iter2/calc_lexer.rb +11 -10
  22. data/examples/general/calc_iter2/spec/calculator_spec.rb +26 -26
  23. data/examples/general/left.rb +2 -2
  24. data/examples/general/right.rb +2 -2
  25. data/lib/rley/base/dotted_item.rb +23 -31
  26. data/lib/rley/constants.rb +2 -2
  27. data/lib/rley/engine.rb +20 -23
  28. data/lib/rley/formatter/asciitree.rb +3 -3
  29. data/lib/rley/formatter/bracket_notation.rb +1 -8
  30. data/lib/rley/formatter/debug.rb +6 -6
  31. data/lib/rley/formatter/json.rb +2 -2
  32. data/lib/rley/gfg/call_edge.rb +1 -1
  33. data/lib/rley/gfg/edge.rb +5 -5
  34. data/lib/rley/gfg/end_vertex.rb +2 -6
  35. data/lib/rley/gfg/epsilon_edge.rb +1 -5
  36. data/lib/rley/gfg/grm_flow_graph.rb +27 -23
  37. data/lib/rley/gfg/item_vertex.rb +10 -10
  38. data/lib/rley/gfg/non_terminal_vertex.rb +4 -4
  39. data/lib/rley/gfg/scan_edge.rb +1 -1
  40. data/lib/rley/gfg/shortcut_edge.rb +2 -2
  41. data/lib/rley/gfg/start_vertex.rb +4 -8
  42. data/lib/rley/gfg/vertex.rb +43 -39
  43. data/lib/rley/lexical/token_range.rb +6 -6
  44. data/lib/rley/parse_forest_visitor.rb +5 -5
  45. data/lib/rley/parse_rep/ast_base_builder.rb +9 -11
  46. data/lib/rley/parse_rep/cst_builder.rb +5 -6
  47. data/lib/rley/parse_rep/parse_forest_builder.rb +20 -18
  48. data/lib/rley/parse_rep/parse_forest_factory.rb +3 -3
  49. data/lib/rley/parse_rep/parse_rep_creator.rb +11 -13
  50. data/lib/rley/parse_rep/parse_tree_builder.rb +4 -4
  51. data/lib/rley/parse_rep/parse_tree_factory.rb +27 -27
  52. data/lib/rley/parse_tree_visitor.rb +1 -1
  53. data/lib/rley/parser/error_reason.rb +4 -5
  54. data/lib/rley/parser/gfg_chart.rb +20 -22
  55. data/lib/rley/parser/gfg_parsing.rb +16 -30
  56. data/lib/rley/parser/parse_entry.rb +25 -31
  57. data/lib/rley/parser/parse_entry_set.rb +18 -15
  58. data/lib/rley/parser/parse_entry_tracker.rb +4 -4
  59. data/lib/rley/parser/parse_state.rb +16 -21
  60. data/lib/rley/parser/parse_state_tracker.rb +4 -4
  61. data/lib/rley/parser/parse_tracer.rb +13 -13
  62. data/lib/rley/parser/parse_walker_factory.rb +23 -28
  63. data/lib/rley/parser/state_set.rb +9 -10
  64. data/lib/rley/ptree/non_terminal_node.rb +7 -5
  65. data/lib/rley/ptree/parse_tree.rb +3 -3
  66. data/lib/rley/ptree/parse_tree_node.rb +5 -5
  67. data/lib/rley/ptree/terminal_node.rb +7 -7
  68. data/lib/rley/rley_error.rb +12 -12
  69. data/lib/rley/sppf/alternative_node.rb +6 -6
  70. data/lib/rley/sppf/composite_node.rb +7 -7
  71. data/lib/rley/sppf/epsilon_node.rb +3 -3
  72. data/lib/rley/sppf/leaf_node.rb +3 -3
  73. data/lib/rley/sppf/parse_forest.rb +16 -16
  74. data/lib/rley/sppf/sppf_node.rb +7 -8
  75. data/lib/rley/sppf/token_node.rb +3 -3
  76. data/lib/rley/syntax/grammar.rb +5 -5
  77. data/lib/rley/syntax/grammar_builder.rb +9 -9
  78. data/lib/rley/syntax/grm_symbol.rb +6 -6
  79. data/lib/rley/syntax/non_terminal.rb +9 -15
  80. data/lib/rley/syntax/production.rb +10 -10
  81. data/lib/rley/syntax/symbol_seq.rb +7 -9
  82. data/lib/rley/syntax/terminal.rb +4 -5
  83. data/lib/rley/syntax/verbatim_symbol.rb +3 -3
  84. data/lib/support/base_tokenizer.rb +19 -18
  85. data/spec/rley/base/dotted_item_spec.rb +2 -2
  86. data/spec/rley/engine_spec.rb +17 -15
  87. data/spec/rley/formatter/asciitree_spec.rb +7 -7
  88. data/spec/rley/formatter/bracket_notation_spec.rb +13 -13
  89. data/spec/rley/formatter/json_spec.rb +1 -1
  90. data/spec/rley/gfg/end_vertex_spec.rb +5 -5
  91. data/spec/rley/gfg/item_vertex_spec.rb +10 -10
  92. data/spec/rley/gfg/non_terminal_vertex_spec.rb +3 -3
  93. data/spec/rley/gfg/shortcut_edge_spec.rb +1 -1
  94. data/spec/rley/gfg/start_vertex_spec.rb +5 -5
  95. data/spec/rley/gfg/vertex_spec.rb +3 -3
  96. data/spec/rley/lexical/token_range_spec.rb +16 -16
  97. data/spec/rley/lexical/token_spec.rb +2 -2
  98. data/spec/rley/parse_forest_visitor_spec.rb +165 -163
  99. data/spec/rley/parse_rep/ambiguous_parse_spec.rb +44 -44
  100. data/spec/rley/parse_rep/ast_builder_spec.rb +6 -6
  101. data/spec/rley/parse_rep/cst_builder_spec.rb +5 -5
  102. data/spec/rley/parse_rep/groucho_spec.rb +21 -21
  103. data/spec/rley/parse_rep/parse_forest_builder_spec.rb +26 -26
  104. data/spec/rley/parse_rep/parse_forest_factory_spec.rb +6 -6
  105. data/spec/rley/parse_rep/parse_tree_factory_spec.rb +2 -2
  106. data/spec/rley/parse_tree_visitor_spec.rb +10 -8
  107. data/spec/rley/parser/error_reason_spec.rb +6 -6
  108. data/spec/rley/parser/gfg_earley_parser_spec.rb +4 -2
  109. data/spec/rley/parser/gfg_parsing_spec.rb +4 -8
  110. data/spec/rley/parser/parse_entry_spec.rb +19 -19
  111. data/spec/rley/parser/parse_state_spec.rb +5 -5
  112. data/spec/rley/parser/parse_walker_factory_spec.rb +1 -1
  113. data/spec/rley/parser/state_set_spec.rb +22 -22
  114. data/spec/rley/ptree/non_terminal_node_spec.rb +5 -3
  115. data/spec/rley/ptree/parse_tree_node_spec.rb +4 -4
  116. data/spec/rley/ptree/terminal_node_spec.rb +6 -6
  117. data/spec/rley/sppf/alternative_node_spec.rb +6 -6
  118. data/spec/rley/sppf/non_terminal_node_spec.rb +3 -3
  119. data/spec/rley/sppf/token_node_spec.rb +4 -4
  120. data/spec/rley/support/ambiguous_grammar_helper.rb +3 -4
  121. data/spec/rley/support/grammar_abc_helper.rb +2 -4
  122. data/spec/rley/support/grammar_ambig01_helper.rb +4 -5
  123. data/spec/rley/support/grammar_arr_int_helper.rb +4 -5
  124. data/spec/rley/support/grammar_b_expr_helper.rb +4 -5
  125. data/spec/rley/support/grammar_l0_helper.rb +10 -11
  126. data/spec/rley/support/grammar_pb_helper.rb +6 -5
  127. data/spec/rley/support/grammar_sppf_helper.rb +1 -1
  128. data/spec/rley/syntax/grammar_builder_spec.rb +5 -5
  129. data/spec/rley/syntax/grammar_spec.rb +6 -6
  130. data/spec/rley/syntax/grm_symbol_spec.rb +1 -1
  131. data/spec/rley/syntax/non_terminal_spec.rb +8 -8
  132. data/spec/rley/syntax/production_spec.rb +13 -13
  133. data/spec/rley/syntax/symbol_seq_spec.rb +2 -2
  134. data/spec/rley/syntax/terminal_spec.rb +5 -5
  135. data/spec/rley/syntax/verbatim_symbol_spec.rb +1 -1
  136. data/spec/spec_helper.rb +0 -12
  137. data/spec/support/base_tokenizer_spec.rb +7 -2
  138. metadata +21 -62
  139. data/.simplecov +0 -8
@@ -55,7 +55,7 @@ END_TEXT
55
55
 
56
56
  rep_help = <<-END_TEXT
57
57
  Set the parse tree representation (default: cst)
58
- cst Concrete Syntax Tree. The out-of-the-box parse tree
58
+ cst Concrete Syntax Tree. The out-of-the-box parse tree
59
59
  representation.
60
60
  ast Abstract Syntaxt Tree. A customized parse tree for JSON.
61
61
  It is a more compact and practical representation.
@@ -9,7 +9,7 @@ require_relative 'json_ast_nodes'
9
9
  # The Builder pattern creates a complex object
10
10
  # (say, a parse tree) from simpler objects (terminal and non-terminal
11
11
  # nodes) and using a step by step approach.
12
- class JSONASTBuilder < Rley::ParseRep::ASTBaseBuilder
12
+ class JSONASTBuilder < Rley::ParseRep::ASTBaseBuilder
13
13
  Terminal2NodeClass = {
14
14
  'false' => JSONBooleanNode,
15
15
  'true' => JSONBooleanNode,
@@ -19,21 +19,23 @@ class JSONASTBuilder < Rley::ParseRep::ASTBaseBuilder
19
19
  }.freeze
20
20
 
21
21
  protected
22
-
23
- def terminal2node()
22
+
23
+ def terminal2node
24
24
  Terminal2NodeClass
25
25
  end
26
-
26
+
27
27
  # Default class for representing terminal nodes.
28
28
  # @return [Class]
29
- def terminalnode_class()
29
+ def terminalnode_class
30
30
  JSONTerminalNode
31
31
  end
32
-
32
+
33
+ # rubocop: disable Naming/VariableNumber
34
+
33
35
  def reduce_JSON_text_0(_aProd, aRange, theTokens, theChildren)
34
36
  return_first_child(aRange, theTokens, theChildren)
35
37
  end
36
-
38
+
37
39
  # rule 'object' => %w[begin-object member-list end-object]
38
40
  def reduce_object_0(aProduction, _range, _tokens, theChildren)
39
41
  second_child = theChildren[1]
@@ -69,7 +71,7 @@ class JSONASTBuilder < Rley::ParseRep::ASTBaseBuilder
69
71
  def reduce_array_0(aProduction, _range, _tokens, theChildren)
70
72
  second_child = theChildren[1]
71
73
  second_child.symbol = aProduction.lhs
72
- return second_child
74
+ return second_child
73
75
  end
74
76
 
75
77
  # rule 'array' => %w[begin-array end-array]
@@ -83,12 +85,13 @@ class JSONASTBuilder < Rley::ParseRep::ASTBaseBuilder
83
85
  node.children << theChildren[2]
84
86
  return node
85
87
  end
86
-
88
+
87
89
  # rule 'array-items' => %w[value]
88
90
  def reduce_array_items_1(aProduction, _range, _tokens, theChildren)
89
91
  node = JSONArrayNode.new(aProduction.lhs)
90
92
  node.children << theChildren[0]
91
93
  return node
92
94
  end
95
+ # rubocop: enable Naming/VariableNumber
93
96
  end # class
94
97
  # End of file
@@ -16,11 +16,11 @@ JSONTerminalNode = Struct.new(:token, :value, :position) do
16
16
  self.value = aLiteral.dup
17
17
  end
18
18
 
19
- def symbol()
19
+ def symbol
20
20
  token.terminal
21
21
  end
22
22
 
23
- def to_ruby()
23
+ def to_ruby
24
24
  value
25
25
  end
26
26
 
@@ -29,9 +29,9 @@ JSONTerminalNode = Struct.new(:token, :value, :position) do
29
29
  def accept(aVisitor)
30
30
  aVisitor.visit_terminal(self)
31
31
  end
32
-
32
+
33
33
  def done!
34
- # Do nothing
34
+ # Do nothing
35
35
  end
36
36
  end
37
37
 
@@ -77,23 +77,18 @@ class JSONCompositeNode
77
77
  def accept(aVisitor)
78
78
  aVisitor.visit_nonterminal(self)
79
79
  end
80
-
80
+
81
81
  def done!
82
- # Do nothing
82
+ # Do nothing
83
83
  end
84
84
 
85
85
  alias subnodes children
86
86
  end # class
87
87
 
88
-
89
88
  class JSONArrayNode < JSONCompositeNode
90
- def initialize(aSymbol)
91
- super(aSymbol)
92
- end
93
-
94
89
  # Convert this tree node in a simpler Ruby representation.
95
90
  # Basically a JSON object corresponds to a Ruhy Hash
96
- def to_ruby()
91
+ def to_ruby
97
92
  rep = []
98
93
  children.each do |child|
99
94
  rep << child.to_ruby
@@ -114,7 +109,7 @@ class JSONPair
114
109
  @symbol = aSymbol
115
110
  end
116
111
 
117
- def children()
112
+ def children
118
113
  return [name, value]
119
114
  end
120
115
 
@@ -125,27 +120,23 @@ class JSONPair
125
120
  def accept(aVisitor)
126
121
  aVisitor.visit_nonterminal(self)
127
122
  end
128
-
123
+
129
124
  def done!
130
125
  # Do nothing
131
126
  end
132
-
127
+
133
128
  def to_ruby
134
129
  rep = {}
135
130
  rep[name.to_ruby] = value.to_ruby
136
131
 
137
- return rep
132
+ return rep
138
133
  end
139
134
  end # class
140
135
 
141
136
  class JSONObjectNode < JSONCompositeNode
142
- def initialize(aSymbol)
143
- super(aSymbol)
144
- end
145
-
146
137
  # Convert this tree node in a simpler Ruby representation.
147
138
  # Basically a JSON object corresponds to a Ruby Hash
148
- def to_ruby()
139
+ def to_ruby
149
140
  rep = {}
150
141
  members.each do |pair|
151
142
  rep[pair.name.to_ruby] = pair.value.to_ruby
@@ -18,11 +18,11 @@ builder = Rley::Syntax::GrammarBuilder.new do
18
18
  rule 'JSON_text' => 'value'
19
19
  rule 'value' => 'false'
20
20
  rule 'value' => 'null'
21
- rule 'value' => 'true'
21
+ rule 'value' => 'true'
22
22
  rule 'value' => 'object'
23
23
  rule 'value' => 'array'
24
24
  rule 'value' => 'number'
25
- rule 'value' => 'string'
25
+ rule 'value' => 'string'
26
26
  rule 'object' => %w[begin-object member-list end-object]
27
27
  rule 'object' => %w[begin-object end-object]
28
28
  # Next rule is an example of a left recursive rule
@@ -28,19 +28,19 @@ class JSONLexer
28
28
  @line_start = 0
29
29
  end
30
30
 
31
- def tokens()
31
+ def tokens
32
32
  tok_sequence = []
33
33
  until @scanner.eos?
34
34
  token = _next_token
35
35
  tok_sequence << token unless token.nil?
36
36
  end
37
37
 
38
- return tok_sequence
38
+ tok_sequence
39
39
  end
40
40
 
41
41
  private
42
42
 
43
- def _next_token()
43
+ def _next_token
44
44
  token = nil
45
45
  skip_whitespaces
46
46
  curr_ch = scanner.getch # curr_ch is at start of token or eof reached...
@@ -58,7 +58,7 @@ class JSONLexer
58
58
  keyw = scanner.scan(/false|true|null/)
59
59
  if keyw.nil?
60
60
  invalid_keyw = scanner.scan(/\w+/)
61
- raise ScanError.new("Invalid keyword: #{invalid_keyw}")
61
+ raise ScanError, "Invalid keyword: #{invalid_keyw}"
62
62
  else
63
63
  token = build_token(keyw, keyw)
64
64
  end
@@ -68,7 +68,7 @@ class JSONLexer
68
68
  value = scanner.scan(/([^"\\]|\\.)*/)
69
69
  end_delimiter = scanner.getch
70
70
  err_msg = 'No closing quotes (") found'
71
- raise ScanError.new(err_msg) if end_delimiter.nil?
71
+ raise ScanError, err_msg if end_delimiter.nil?
72
72
 
73
73
  token = build_token(value, 'string')
74
74
 
@@ -81,12 +81,12 @@ class JSONLexer
81
81
  erroneous = curr_ch.nil? ? '' : curr_ch
82
82
  sequel = scanner.scan(/.{1,20}/)
83
83
  erroneous += sequel unless sequel.nil?
84
- raise ScanError.new("Unknown token #{erroneous}")
84
+ raise ScanError, "Unknown token #{erroneous}"
85
85
  end # case
86
86
  break unless token.nil? && (curr_ch = scanner.getch)
87
87
  end
88
88
 
89
- return token
89
+ token
90
90
  end
91
91
 
92
92
  def build_token(lexeme, token)
@@ -94,7 +94,7 @@ class JSONLexer
94
94
  Rley::Lexical::Token.new(lexeme, token, pos)
95
95
  end
96
96
 
97
- def skip_whitespaces()
97
+ def skip_whitespaces
98
98
  matched = scanner.scan(/[ \t\f\n\r]+/)
99
99
  return if matched.nil?
100
100
 
@@ -35,7 +35,7 @@ class JSONMinifier
35
35
  lexeme = aTerm.token.lexeme
36
36
  literal = if aTerm.symbol.name == 'string'
37
37
  # String values are delimited by double quotes
38
- '"' + lexeme + '"'
38
+ "\"#{lexeme}\""
39
39
  else
40
40
  lexeme
41
41
  end
@@ -15,8 +15,8 @@ class CalcASTBuilder < Rley::ParseRep::ASTBaseBuilder
15
15
  }.freeze
16
16
 
17
17
  protected
18
-
19
- def terminal2node()
18
+
19
+ def terminal2node
20
20
  Terminal2NodeClass
21
21
  end
22
22
 
@@ -26,7 +26,9 @@ class CalcASTBuilder < Rley::ParseRep::ASTBaseBuilder
26
26
  operator_node.children << theChildren[2]
27
27
  return operator_node
28
28
  end
29
-
29
+
30
+ # rubocop: disable Naming/VariableNumber
31
+
30
32
  # rule 'expression' => 'simple_expression'
31
33
  def reduce_expression_0(_production, aRange, theTokens, theChildren)
32
34
  return_first_child(aRange, theTokens, theChildren)
@@ -35,32 +37,32 @@ class CalcASTBuilder < Rley::ParseRep::ASTBaseBuilder
35
37
  # rule 'simple_expression' => 'term'
36
38
  def reduce_simple_expression_0(_production, aRange, theTokens, theChildren)
37
39
  return_first_child(aRange, theTokens, theChildren)
38
- end
40
+ end
39
41
 
40
42
  # rule 'simple_expression' => %w[simple_expression add_operator term]
41
43
  def reduce_simple_expression_1(_production, _range, _tokens, theChildren)
42
44
  reduce_binary_operator(theChildren)
43
45
  end
44
-
45
- # rule 'term' => 'factor'
46
+
47
+ # rule 'term' => 'factor'
46
48
  def reduce_term_0(_production, aRange, theTokens, theChildren)
47
49
  return_first_child(aRange, theTokens, theChildren)
48
- end
50
+ end
49
51
 
50
52
  # rule 'term' => %w[term mul_operator factor]
51
53
  def reduce_term_1(_production, _range, _tokens, theChildren)
52
54
  reduce_binary_operator(theChildren)
53
55
  end
54
-
56
+
55
57
  # rule 'factor' => 'NUMBER'
56
58
  def reduce_factor_0(_aProd, aRange, theTokens, theChildren)
57
59
  return_first_child(aRange, theTokens, theChildren)
58
60
  end
59
-
61
+
60
62
  # # rule 'factor' => %w[LPAREN expression RPAREN]
61
63
  def reduce_factor_1(_aProd, aRange, theTokens, theChildren)
62
64
  return_second_child(aRange, theTokens, theChildren)
63
- end
65
+ end
64
66
 
65
67
  # rule 'add_operator' => 'PLUS'
66
68
  def reduce_add_operator_0(_production, _range, _tokens, theChildren)
@@ -81,5 +83,6 @@ class CalcASTBuilder < Rley::ParseRep::ASTBaseBuilder
81
83
  def reduce_mul_operator_1(_production, _range, _tokens, theChildren)
82
84
  return CalcDivideNode.new(theChildren[0].symbol)
83
85
  end
86
+ # rubocop: enable Naming/VariableNumber
84
87
  end # class
85
88
  # End of file
@@ -3,7 +3,6 @@
3
3
  # Classes that implement nodes of Abstract Syntax Trees (AST) representing
4
4
  # calculator parse results.
5
5
 
6
-
7
6
  CalcTerminalNode = Struct.new(:token, :value, :position) do
8
7
  def initialize(aToken, aPosition)
9
8
  self.token = aToken
@@ -16,23 +15,23 @@ CalcTerminalNode = Struct.new(:token, :value, :position) do
16
15
  self.value = aLiteral.dup
17
16
  end
18
17
 
19
- def symbol()
18
+ def symbol
20
19
  token.terminal
21
20
  end
22
21
 
23
- def interpret()
24
- return value
22
+ def interpret
23
+ value
25
24
  end
26
-
27
- def done!()
25
+
26
+ def done!
28
27
  # Do nothing
29
28
  end
30
-
29
+
31
30
  # Part of the 'visitee' role in Visitor design pattern.
32
31
  # @param aVisitor[ParseTreeVisitor] the visitor
33
32
  def accept(aVisitor)
34
33
  aVisitor.visit_terminal(self)
35
- end
34
+ end
36
35
  end
37
36
 
38
37
  class CalcNumberNode < CalcTerminalNode
@@ -53,30 +52,26 @@ class CalcCompositeNode
53
52
 
54
53
  def initialize(aSymbol)
55
54
  @symbol = aSymbol
56
- @children = []
55
+ @children = []
57
56
  end
58
-
59
- def done!()
57
+
58
+ def done!
60
59
  # Do nothing
61
- end
60
+ end
62
61
 
63
62
  # Part of the 'visitee' role in Visitor design pattern.
64
63
  # @param aVisitor[ParseTreeVisitor] the visitor
65
64
  def accept(aVisitor)
66
65
  aVisitor.visit_nonterminal(self)
67
66
  end
68
-
67
+
69
68
  alias subnodes children
70
69
  end # class
71
70
 
72
71
  class CalcUnaryOpNode < CalcCompositeNode
73
- def initialize(aSymbol)
74
- super(aSymbol)
75
- end
76
-
77
72
  # Convert this tree node in a simpler Ruby representation.
78
73
  # Basically a Calc object corresponds to a Ruhy Hash
79
- def to_ruby()
74
+ def to_ruby
80
75
  rep = {}
81
76
  members.each do |pair|
82
77
  rep[pair.name.to_ruby] = pair.value.to_ruby
@@ -92,13 +87,9 @@ class CalcNegateNode < CalcUnaryOpNode
92
87
  end # class
93
88
 
94
89
  class CalcBinaryOpNode < CalcCompositeNode
95
- def initialize(aSymbol)
96
- super(aSymbol)
97
- end
98
-
99
90
  protected
100
-
101
- def retrieve_operands()
91
+
92
+ def retrieve_operands
102
93
  operands = []
103
94
  children.each do |child|
104
95
  oper = child.respond_to?(:interpret) ? child.interpret : child
@@ -111,42 +102,37 @@ end # class
111
102
 
112
103
  class CalcAddNode < CalcBinaryOpNode
113
104
  # TODO
114
- def interpret()
105
+ def interpret
115
106
  operands = retrieve_operands
116
107
 
117
- sum = operands[0] + operands[1]
118
- return sum
108
+ operands[0] + operands[1]
119
109
  end
120
110
  end # class
121
111
 
122
-
123
112
  class CalcSubtractNode < CalcBinaryOpNode
124
113
  # TODO
125
- def interpret()
114
+ def interpret
126
115
  operands = retrieve_operands
127
116
 
128
- substraction = operands[0] - operands[1]
129
- return substraction
117
+ operands[0] - operands[1]
130
118
  end
131
119
  end # class
132
120
 
133
121
  class CalcMultiplyNode < CalcBinaryOpNode
134
122
  # TODO
135
- def interpret()
123
+ def interpret
136
124
  operands = retrieve_operands
137
- multiplication = operands[0] * operands[1]
138
- return multiplication
125
+ operands[0] * operands[1]
139
126
  end
140
127
  end # class
141
128
 
142
129
  class CalcDivideNode < CalcBinaryOpNode
143
130
  # TODO
144
- def interpret()
131
+ def interpret
145
132
  operands = retrieve_operands
146
133
  numerator = operands[0].to_f
147
134
  denominator = operands[1]
148
- division = numerator / denominator
149
- return division
135
+ numerator / denominator
150
136
  end
151
137
  end # class
152
138
  # End of file