skeem 0.2.14 → 0.2.18

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 (60) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +451 -195
  3. data/.travis.yml +27 -0
  4. data/CHANGELOG.md +35 -1
  5. data/Gemfile +2 -0
  6. data/README.md +125 -56
  7. data/Rakefile +2 -0
  8. data/appveyor.yml +3 -4
  9. data/bin/cubic.skm +4 -0
  10. data/bin/hello-world.skm +1 -0
  11. data/bin/skeem +72 -0
  12. data/lib/skeem/datum_dsl.rb +40 -30
  13. data/lib/skeem/element_visitor.rb +5 -2
  14. data/lib/skeem/grammar.rb +88 -26
  15. data/lib/skeem/interpreter.rb +9 -7
  16. data/lib/skeem/parser.rb +6 -4
  17. data/lib/skeem/primitive/primitive_builder.rb +148 -122
  18. data/lib/skeem/primitive/primitive_procedure.rb +23 -25
  19. data/lib/skeem/runtime.rb +17 -15
  20. data/lib/skeem/s_expr_builder.rb +49 -117
  21. data/lib/skeem/s_expr_nodes.rb +147 -132
  22. data/lib/skeem/skeem_exception.rb +1 -0
  23. data/lib/skeem/skm_binding.rb +9 -11
  24. data/lib/skeem/skm_compound_datum.rb +9 -6
  25. data/lib/skeem/skm_element.rb +15 -13
  26. data/lib/skeem/skm_empty_list.rb +6 -4
  27. data/lib/skeem/skm_exception.rb +9 -0
  28. data/lib/skeem/skm_expression.rb +3 -1
  29. data/lib/skeem/skm_frame.rb +3 -2
  30. data/lib/skeem/skm_pair.rb +26 -18
  31. data/lib/skeem/skm_procedure_exec.rb +11 -6
  32. data/lib/skeem/skm_simple_datum.rb +23 -20
  33. data/lib/skeem/skm_unary_expression.rb +34 -37
  34. data/lib/skeem/standard/base.skm +4 -0
  35. data/lib/skeem/tokenizer.rb +38 -28
  36. data/lib/skeem/version.rb +3 -1
  37. data/lib/skeem.rb +2 -0
  38. data/skeem.gemspec +9 -6
  39. data/spec/skeem/add4.skm +4 -0
  40. data/spec/skeem/datum_dsl_spec.rb +13 -12
  41. data/spec/skeem/element_visitor_spec.rb +14 -10
  42. data/spec/skeem/interpreter_spec.rb +84 -44
  43. data/spec/skeem/lambda_spec.rb +13 -11
  44. data/spec/skeem/parser_spec.rb +23 -19
  45. data/spec/skeem/primitive/primitive_builder_spec.rb +65 -48
  46. data/spec/skeem/primitive/primitive_procedure_spec.rb +14 -12
  47. data/spec/skeem/runtime_spec.rb +20 -18
  48. data/spec/skeem/s_expr_nodes_spec.rb +8 -6
  49. data/spec/skeem/skm_compound_datum_spec.rb +12 -10
  50. data/spec/skeem/skm_element_spec.rb +7 -5
  51. data/spec/skeem/skm_empty_list_spec.rb +7 -5
  52. data/spec/skeem/skm_frame_spec.rb +5 -4
  53. data/spec/skeem/skm_pair_spec.rb +9 -8
  54. data/spec/skeem/skm_procedure_exec_spec.rb +2 -0
  55. data/spec/skeem/skm_simple_datum_spec.rb +24 -22
  56. data/spec/skeem/skm_unary_expression_spec.rb +11 -9
  57. data/spec/skeem/tokenizer_spec.rb +54 -43
  58. data/spec/skeem_spec.rb +2 -0
  59. data/spec/spec_helper.rb +15 -10
  60. metadata +18 -10
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative '../s_expr_nodes'
2
4
 
3
5
  module Skeem
@@ -17,7 +19,7 @@ module Skeem
17
19
  def callable?
18
20
  true
19
21
  end
20
-
22
+
21
23
  def procedure?
22
24
  true
23
25
  end
@@ -40,10 +42,11 @@ module Skeem
40
42
  check_actual_count(actuals)
41
43
  # TODO: check that next line became useless
42
44
  # aProcedureCall.operands_consumed = true
43
- result = do_call(aRuntime, actuals)
45
+ # result = do_call(aRuntime, actuals)
44
46
  # $stderr.puts " Result: #{result.inspect}"
45
47
  # $stderr.puts "--- End of procedure #{identifier}"
46
- result
48
+ # result
49
+ do_call(aRuntime, actuals)
47
50
  end
48
51
 
49
52
  def skm_equal?(other)
@@ -76,10 +79,8 @@ module Skeem
76
79
  if (anArity.low + 2) != count_param
77
80
  discrepancy_arity_argument_count(anArity.low, count_param, 2)
78
81
  end
79
- else # fixed arity...
80
- if (anArity.high + 1) != count_param
81
- discrepancy_arity_argument_count(anArity.high, count_param, 1)
82
- end
82
+ elsif (anArity.high + 1) != count_param # fixed arity...
83
+ discrepancy_arity_argument_count(anArity.high, count_param, 1)
83
84
  end
84
85
 
85
86
  anArity
@@ -102,10 +103,8 @@ module Skeem
102
103
  if count_actuals > arity.high
103
104
  wrong_number_arguments(arity.high, count_actuals)
104
105
  end
105
- else # fixed non-zero arity...
106
- if count_actuals != arity.high
107
- wrong_number_arguments(arity.high, count_actuals)
108
- end
106
+ elsif count_actuals != arity.high # fixed non-zero arity...
107
+ wrong_number_arguments(arity.high, count_actuals)
109
108
  end
110
109
  end
111
110
 
@@ -114,11 +113,11 @@ module Skeem
114
113
  result = code.call(aRuntime)
115
114
  elsif arity.variadic? || (arity.low < arity.high)
116
115
  if arity.low.zero?
117
- if ['and', 'or', 'append'].include? identifier
116
+ if %w[and or append].include? identifier
118
117
  # Defer the evaluation of arguments to the primitive
119
118
  result = code.call(aRuntime, operands)
120
119
  else
121
- evaluated_args = operands.map {|opernd| opernd.evaluate(aRuntime) }
120
+ evaluated_args = operands.map { |opernd| opernd.evaluate(aRuntime) }
122
121
  result = code.call(aRuntime, evaluated_args)
123
122
  end
124
123
  else
@@ -134,14 +133,13 @@ module Skeem
134
133
  # p args.inspect
135
134
  result = code.send(:call, aRuntime, *args)
136
135
  end
137
- else # Fixed arity...
138
- if identifier.value =~ /^set-[a-zA-Z]+!/ || identifier.value =~ /[a-zA-Z]+-set!/
139
- # Defer evaluation inside the primitive
140
- result = code.send(:call, aRuntime, *operands)
141
- else
142
- evaluated_args = operands.map {|opernd| opernd.evaluate(aRuntime) }
143
- result = code.send(:call, aRuntime, *evaluated_args)
144
- end
136
+ elsif identifier.value =~ /^set-[a-zA-Z]+!/ || identifier.value =~ /[a-zA-Z]+-set!/
137
+ # Fixed arity...
138
+ # Defer evaluation inside the primitive
139
+ result = code.send(:call, aRuntime, *operands)
140
+ else
141
+ evaluated_args = operands.map { |opernd| opernd.evaluate(aRuntime) }
142
+ result = code.send(:call, aRuntime, *evaluated_args)
145
143
  end
146
144
 
147
145
  result
@@ -149,21 +147,21 @@ module Skeem
149
147
 
150
148
  def error_lambda(message_suffix)
151
149
  msg1 = "Primitive procedure '#{identifier.value}'"
152
- raise StandardError, msg1 + ' ' + message_suffix
150
+ raise StandardError, "#{msg1} #{message_suffix}"
153
151
  end
154
152
 
155
153
  def discrepancy_arity_argument_count(arity_required, count_param, delta)
156
154
  msg1 = "Discrepancy in primitive procedure '#{identifier.value}'"
157
155
  msg2 = "between arity (#{arity_required}) + #{delta}"
158
156
  msg3 = "and parameter count of lambda #{count_param}."
159
- raise StandardError, msg1 + ' ' + msg2 + ' ' + msg3
157
+ raise StandardError, "#{msg1} #{msg2} #{msg3}"
160
158
  end
161
159
 
162
160
  def wrong_number_arguments(required, actual)
163
161
  msg1 = "Wrong number of arguments for #<Procedure #{identifier.value}>"
164
162
  msg2 = "(required at least #{required}, got #{actual})"
165
- raise StandardError, msg1 + ' ' + msg2
163
+ raise StandardError, "#{msg1} #{msg2}"
166
164
  end
167
165
  end # class
168
166
  end # module
169
- end # module
167
+ end # module
data/lib/skeem/runtime.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 's_expr_nodes'
2
4
 
3
5
  module Skeem
@@ -41,13 +43,12 @@ module Skeem
41
43
  result = nil
42
44
  begin
43
45
  result = entry.evaluate(self)
44
-
45
- rescue NoMethodError => exc
46
+ rescue NoMethodError => e
46
47
  # $stderr.puts 'In rescue block'
47
48
  # $stderr.puts key_value.inspect
48
49
  # $stderr.puts entry.inspect
49
50
  # $stderr.puts entry.expression.inspect
50
- raise exc
51
+ raise e
51
52
  end
52
53
  result
53
54
  else
@@ -66,13 +67,14 @@ module Skeem
66
67
  invokation.evaluate(self)
67
68
  end
68
69
 
69
- def nest()
70
+ def nest
70
71
  nested = SkmFrame.new(environment)
71
72
  push(nested)
72
73
  end
73
74
 
74
75
  def unnest
75
76
  raise StandardError, 'Cannot unnest environment' unless environment.parent
77
+
76
78
  environment.bindings.clear
77
79
  pop
78
80
  end
@@ -90,6 +92,7 @@ module Skeem
90
92
  if env_stack.empty?
91
93
  raise StandardError, 'Skeem environment stack empty!'
92
94
  end
95
+
93
96
  env_stack.pop
94
97
  end
95
98
 
@@ -110,6 +113,7 @@ module Skeem
110
113
  if call_stack.empty?
111
114
  raise StandardError, 'Skeem call stack empty!'
112
115
  end
116
+
113
117
  call_stack.pop
114
118
  end
115
119
 
@@ -120,16 +124,14 @@ module Skeem
120
124
  private
121
125
 
122
126
  def normalize_key(aKey)
123
- result = case aKey
124
- when String
125
- aKey
126
- when SkmVariableReference
127
- aKey.child.value
128
- else
129
- aKey.evaluate(self).value
130
- end
131
-
132
- result
127
+ case aKey
128
+ when String
129
+ aKey
130
+ when SkmVariableReference
131
+ aKey.child.value
132
+ else
133
+ aKey.evaluate(self).value
134
+ end
133
135
  end
134
136
  end # class
135
- end # module
137
+ end # module
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'stringio'
2
4
  require_relative 'skm_pair'
3
5
  require_relative 'skm_binding'
@@ -22,17 +24,6 @@ module Skeem
22
24
  'STRING_LIT' => SkmString
23
25
  }.freeze
24
26
 
25
- # Create a new AST builder instance.
26
- # @param theTokens [Array<Token>] The sequence of input tokens.
27
- def initialize(theTokens)
28
- super(theTokens)
29
- end
30
-
31
- # Notification that the parse tree construction is complete.
32
- def done!
33
- super
34
- end
35
-
36
27
  protected
37
28
 
38
29
  def terminal2node
@@ -43,11 +34,23 @@ module Skeem
43
34
  def reduce_main(_production, _range, _tokens, theChildren)
44
35
  last_child = theChildren.last
45
36
  # $stderr.puts last_child.inspect
46
- result = if last_child.length == 1
47
- last_child.car
48
- else
49
- last_child
50
- end
37
+ if last_child.length == 1
38
+ last_child.car
39
+ else
40
+ last_child
41
+ end
42
+ end
43
+
44
+ # Default semantic action for rules of the form:
45
+ # rule 'some_symbol_star' => 'some_symbol_star some_symbol'
46
+ def reduce_star_default(_production, _range, _tokens, theChildren)
47
+ theChildren[0] << theChildren[1]
48
+ end
49
+
50
+ # Default semantic action for rules of the form:
51
+ # rule 'some_symbol_star' => []
52
+ def reduce_star_base(_production, _range, _tokens, _children)
53
+ []
51
54
  end
52
55
 
53
56
  # rule('cmd_or_def_plus' => 'cmd_or_def_plus cmd_or_def').as 'multiple_cmd_def'
@@ -81,7 +84,7 @@ module Skeem
81
84
  end
82
85
 
83
86
  # rule('definition' => 'LPAREN BEGIN definition_star RPAREN').as 'definitions_within_begin'
84
- def reduce_definitions_within_begin(_production, aRange, _tokens, theChildren)
87
+ def reduce_definitions_within_begin(_production, _range, _tokens, theChildren)
85
88
  SkmSequencingBlock.new(SkmPair.create_from_a(theChildren[2]))
86
89
  end
87
90
 
@@ -135,20 +138,10 @@ module Skeem
135
138
  end
136
139
 
137
140
  # rule('vector' => 'VECTOR_BEGIN datum_star RPAREN').as 'vector'
138
- def reduce_vector(_production, aRange, _tokens, theChildren)
141
+ def reduce_vector(_production, _range, _tokens, theChildren)
139
142
  SkmVector.new(theChildren[1])
140
143
  end
141
144
 
142
- # rule('datum_star' => 'datum_star datum').as 'datum_star'
143
- def reduce_datum_star(_production, aRange, _tokens, theChildren)
144
- theChildren[0] << theChildren[1]
145
- end
146
-
147
- # rule('datum_star' => []).as 'no_datum_yet'
148
- def reduce_no_datum_yet(_production, aRange, _tokens, theChildren)
149
- []
150
- end
151
-
152
145
  # rule('procedure_call' => 'LPAREN operator RPAREN').as 'proc_call_nullary'
153
146
  def reduce_proc_call_nullary(_production, aRange, _tokens, theChildren)
154
147
  ProcedureCall.new(aRange, theChildren[1], [])
@@ -174,11 +167,6 @@ module Skeem
174
167
  [theChildren.last]
175
168
  end
176
169
 
177
- # rule('operand_plus' => 'operand').as 'last_operand'
178
- def reduce_last_operand(_production, _range, _tokens, theChildren)
179
- [theChildren.last]
180
- end
181
-
182
170
  # rule('def_formals' => 'identifier_star').as 'def_formals'
183
171
  def reduce_def_formals(_production, _range, _tokens, theChildren)
184
172
  SkmFormals.new(theChildren[0], :fixed)
@@ -192,9 +180,10 @@ module Skeem
192
180
 
193
181
  # rule('lambda_expression' => 'LPAREN LAMBDA formals body RPAREN').as 'lambda_expression'
194
182
  def reduce_lambda_expression(_production, aRange, _tokens, theChildren)
195
- lmbd = SkmLambdaRep.new(aRange, theChildren[2], theChildren[3])
183
+ # lmbd = SkmLambdaRep.new(aRange, theChildren[2], theChildren[3])
196
184
  # $stderr.puts lmbd.inspect
197
- lmbd
185
+ # lmbd
186
+ SkmLambdaRep.new(aRange, theChildren[2], theChildren[3])
198
187
  end
199
188
 
200
189
  # rule('formals' => 'LPAREN identifier_star RPAREN').as 'fixed_arity_formals'
@@ -213,16 +202,6 @@ module Skeem
213
202
  SkmFormals.new(formals, :variadic)
214
203
  end
215
204
 
216
- # rule('identifier_star' => 'identifier_star IDENTIFIER').as 'identifier_star'
217
- def reduce_identifier_star(_production, _range, _tokens, theChildren)
218
- theChildren[0] << theChildren[1]
219
- end
220
-
221
- # rule('identifier_star' => []).as 'no_identifier_yet'
222
- def reduce_no_identifier_yet(_production, _range, _tokens, theChildren)
223
- []
224
- end
225
-
226
205
  # rule('identifier_plus' => 'identifier_plus IDENTIFIER').as 'multiple_identifiers'
227
206
  def reduce_multiple_identifiers(_production, _range, _tokens, theChildren)
228
207
  theChildren[0] << theChildren[1]
@@ -239,32 +218,11 @@ module Skeem
239
218
  { defs: definitions, sequence: theChildren[1] }
240
219
  end
241
220
 
242
- # rule('definition_star' => 'definition_star definition').as 'definition_star'
243
- def reduce_definition_star(_production, _range, _tokens, theChildren)
244
- theChildren[0] << theChildren[1]
245
- end
246
-
247
-
248
- # rule('definition_star' => []).as 'no_definition_yet'
249
- def reduce_no_definition_yet(_production, _range, _tokens, theChildren)
250
- []
251
- end
252
-
253
221
  # rule('sequence' => 'command_star expression').as 'sequence'
254
222
  def reduce_sequence(_production, _range, _tokens, theChildren)
255
223
  SkmPair.create_from_a(theChildren[0] << theChildren[1])
256
224
  end
257
225
 
258
- # rule('command_star' => 'command_star command').as 'multiple_commands'
259
- def reduce_multiple_commands(_production, _range, _tokens, theChildren)
260
- theChildren[0] << theChildren[1]
261
- end
262
-
263
- # rule('command_star' => []).as 'no_command_yet'
264
- def reduce_no_command_yet(_production, _range, _tokens, theChildren)
265
- []
266
- end
267
-
268
226
  # rule('conditional' => 'LPAREN IF test consequent alternate RPAREN').as 'conditional'
269
227
  def reduce_conditional(_production, aRange, _tokens, theChildren)
270
228
  SkmCondition.new(aRange, theChildren[2], theChildren[3], theChildren[4])
@@ -286,7 +244,7 @@ module Skeem
286
244
  end
287
245
 
288
246
  # rule('derived_expression' => 'LPAREN LET LPAREN binding_spec_star RPAREN body RPAREN').as 'short_let_form'
289
- def reduce_short_let_form(_production, aRange, _tokens, theChildren)
247
+ def reduce_short_let_form(_production, _range, _tokens, theChildren)
290
248
  SkmBindingBlock.new(:let, theChildren[3], theChildren[5])
291
249
  end
292
250
 
@@ -309,9 +267,9 @@ module Skeem
309
267
 
310
268
  # We reky on utility 'builder' object
311
269
  worker = SkmDoExprBuilder.new(theChildren[3], theChildren[6],
312
- theChildren[7], theChildren[9])
270
+ theChildren[7], theChildren[9])
313
271
  do_expression = worker.do_expression
314
- body = { :defs => [], :sequence => do_expression }
272
+ body = { defs: [], sequence: do_expression }
315
273
  SkmBindingBlock.new(:let_star, worker.bindings, body)
316
274
  end
317
275
 
@@ -325,16 +283,6 @@ module Skeem
325
283
  [theChildren[0]]
326
284
  end
327
285
 
328
- # rule('cond_clause_star' => 'cond_clause_star cond_clause').as 'cond_clauses_star'
329
- def reduce_cond_clauses_star(_production, _range, _tokens, theChildren)
330
- theChildren[0] << theChildren[1]
331
- end
332
-
333
- # rule('cond_clause_star' => []).as 'last_cond_clauses_star'
334
- def reduce_last_cond_clauses_star(_production, _range, _tokens, _children)
335
- []
336
- end
337
-
338
286
  # rule('cond_clause' => 'LPAREN test sequence RPAREN').as 'cond_clause'
339
287
  def reduce_cond_clause(_production, _range, _tokens, theChildren)
340
288
  [theChildren[1], SkmSequencingBlock.new(SkmPair.create_from_a(theChildren[2]))]
@@ -346,40 +294,20 @@ module Skeem
346
294
  end
347
295
 
348
296
  # rule('quasiquotation' => 'LPAREN QUASIQUOTE qq_template RPAREN').as 'quasiquotation'
349
- def reduce_quasiquotation(_production, aRange, _tokens, theChildren)
297
+ def reduce_quasiquotation(_production, _range, _tokens, theChildren)
350
298
  SkmQuasiquotation.new(theChildren[2])
351
299
  end
352
300
 
353
301
  # rule('quasiquotation' => 'GRAVE_ACCENT qq_template').as 'quasiquotation_short'
354
- def reduce_quasiquotation_short(_production, aRange, _tokens, theChildren)
302
+ def reduce_quasiquotation_short(_production, _range, _tokens, theChildren)
355
303
  SkmQuasiquotation.new(theChildren[1])
356
304
  end
357
305
 
358
- # rule('binding_spec_star' => 'binding_spec_star binding_spec').as 'multiple_binding_specs'
359
- def reduce_multiple_binding_specs(_production, aRange, _tokens, theChildren)
360
- theChildren[0] << theChildren[1]
361
- end
362
-
363
- # rule('binding_spec_star' => []).as 'no_binding_spec_yet'
364
- def reduce_no_binding_spec_yet(_production, aRange, _tokens, _children)
365
- []
366
- end
367
-
368
306
  # rule('binding_spec' => 'LPAREN IDENTIFIER expression RPAREN').as 'binding_spec'
369
- def reduce_binding_spec(production, _range, _tokens, theChildren)
307
+ def reduce_binding_spec(_production, _range, _tokens, theChildren)
370
308
  SkmBinding.new(theChildren[1], theChildren[2])
371
309
  end
372
310
 
373
- # rule('iteration_spec_star' => 'iteration_spec_star iteration_spec').as 'multiple_iter_specs'
374
- def reduce_multiple_iter_specs(_production, _range, _tokens, theChildren)
375
- theChildren[0] << theChildren[1]
376
- end
377
-
378
- # rule('iteration_spec_star' => []).as 'no_iter_spec_yet'
379
- def reduce_no_iter_spec_yet(_production, _range, _tokens, _children)
380
- []
381
- end
382
-
383
311
  # rule('iteration_spec' => 'LPAREN IDENTIFIER init step RPAREN').as 'iteration_spec_long'
384
312
  def reduce_iteration_spec_long(_production, _range, _tokens, theChildren)
385
313
  SkmIterationSpec.new(theChildren[1], theChildren[2], theChildren[3])
@@ -391,10 +319,26 @@ module Skeem
391
319
  end
392
320
 
393
321
  # rule('do_result' => []).as 'empty_do_result'
394
- def reduce_empty_do_result(_production, _range, _tokens, theChildren)
322
+ def reduce_empty_do_result(_production, _range, _tokens, _children)
395
323
  SkmEmptyList.instance
396
324
  end
397
325
 
326
+ # rule('includer' => 'LPAREN INCLUDE string_plus RPAREN').as 'include'
327
+ def reduce_include(_production, _range, _tokens, theChildren)
328
+ includer = SkmIncluder.new(theChildren[2])
329
+ includer.build
330
+ end
331
+
332
+ # rule('string_plus' => 'string_plus STRING_LIT').as 'multiple_string'
333
+ def reduce_multiple_string(_production, _range, _tokens, theChildren)
334
+ theChildren[0] << theChildren[1]
335
+ end
336
+
337
+ # rule('string_plus' => 'STRING_LIT').as 'last_single_string'
338
+ def reduce_last_single_string(_production, _range, _tokens, theChildren)
339
+ [theChildren[0]]
340
+ end
341
+
398
342
  # rule('list_qq_template' => 'LPAREN qq_template_or_splice_star RPAREN').as 'list_qq'
399
343
  def reduce_list_qq(_production, _range, _tokens, theChildren)
400
344
  SkmPair.create_from_a(theChildren[1])
@@ -406,21 +350,9 @@ module Skeem
406
350
  end
407
351
 
408
352
  # rule('unquotation' => 'COMMA qq_template').as 'unquotation_short'
409
- def reduce_unquotation_short(_production, aRange, _tokens, theChildren)
353
+ def reduce_unquotation_short(_production, _range, _tokens, theChildren)
410
354
  SkmUnquotation.new(theChildren[1])
411
355
  end
412
-
413
- # rule('qq_template_or_splice_star' => 'qq_template_or_splice_star qq_template_or_splice').as 'multiple_template_splice'
414
- def reduce_multiple_template_splice(_production, _range, _tokens, theChildren)
415
- theChildren[0] << theChildren[1]
416
- end
417
-
418
- # rule('qq_template_or_splice_star' => []).as 'no_template_splice_yet'
419
- def reduce_no_template_splice_yet(_production, _range, _tokens, theChildren)
420
- []
421
- end
422
-
423
-
424
356
  end # class
425
357
  end # module
426
- # End of file
358
+ # End of file