gobstones 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (168) hide show
  1. checksums.yaml +5 -5
  2. data/.rubocop.yml +133 -0
  3. data/.rubocop_todo.yml +75 -0
  4. data/.simplecov +1 -3
  5. data/.tool-versions +1 -0
  6. data/.travis.yml +9 -2
  7. data/Gemfile +11 -5
  8. data/Gemfile.lock +65 -39
  9. data/README.md +8 -1
  10. data/Rakefile +1 -1
  11. data/bin/gobstones +1 -1
  12. data/gobstones.gemspec +12 -11
  13. data/lib/gobstones/cli/printer.rb +41 -28
  14. data/lib/gobstones/cli/runner.rb +50 -15
  15. data/lib/gobstones/extensions/all.rb +1 -1
  16. data/lib/gobstones/extensions/boolean.rb +1 -5
  17. data/lib/gobstones/extensions/{fixnum.rb → integer.rb} +2 -4
  18. data/lib/gobstones/extensions/string.rb +1 -3
  19. data/lib/gobstones/lang/all.rb +3 -3
  20. data/lib/gobstones/lang/commands/all.rb +11 -10
  21. data/lib/gobstones/lang/commands/boom.rb +26 -0
  22. data/lib/gobstones/lang/commands/command_block.rb +23 -23
  23. data/lib/gobstones/lang/commands/conditional.rb +26 -0
  24. data/lib/gobstones/lang/commands/if.rb +13 -0
  25. data/lib/gobstones/lang/commands/if_then_else.rb +26 -0
  26. data/lib/gobstones/lang/commands/ir_al_origen.rb +15 -0
  27. data/lib/gobstones/lang/commands/mover.rb +23 -0
  28. data/lib/gobstones/lang/commands/multiple_assignment.rb +34 -21
  29. data/lib/gobstones/lang/commands/poner.rb +31 -0
  30. data/lib/gobstones/lang/commands/procedure_call.rb +8 -8
  31. data/lib/gobstones/lang/commands/repeat_with.rb +69 -0
  32. data/lib/gobstones/lang/commands/sacar.rb +29 -0
  33. data/lib/gobstones/lang/commands/single_assignment.rb +15 -20
  34. data/lib/gobstones/lang/commands/skip.rb +15 -0
  35. data/lib/gobstones/lang/commands/vaciar_tablero.rb +15 -0
  36. data/lib/gobstones/lang/commands/while.rb +20 -0
  37. data/lib/gobstones/lang/definitions/definition.rb +16 -23
  38. data/lib/gobstones/lang/definitions/definition_call.rb +7 -15
  39. data/lib/gobstones/lang/definitions/function.rb +1 -7
  40. data/lib/gobstones/lang/definitions/main.rb +1 -8
  41. data/lib/gobstones/lang/definitions/no_return_statement.rb +2 -8
  42. data/lib/gobstones/lang/definitions/procedure.rb +1 -7
  43. data/lib/gobstones/lang/definitions/return_from_function.rb +6 -13
  44. data/lib/gobstones/lang/definitions/return_from_main.rb +15 -10
  45. data/lib/gobstones/lang/definitions/var_tuple.rb +10 -12
  46. data/lib/gobstones/lang/expressions/arithmetic_expressions.rb +17 -27
  47. data/lib/gobstones/lang/expressions/boolean_expressions.rb +4 -10
  48. data/lib/gobstones/lang/expressions/comparison_expressions.rb +0 -16
  49. data/lib/gobstones/lang/expressions/enclosed_by_parens_expression.rb +3 -5
  50. data/lib/gobstones/lang/expressions/expression.rb +18 -0
  51. data/lib/gobstones/lang/expressions/function_call.rb +9 -6
  52. data/lib/gobstones/lang/expressions/one_arg_expression.rb +8 -16
  53. data/lib/gobstones/lang/expressions/primitive_functions.rb +24 -16
  54. data/lib/gobstones/lang/expressions/two_arg_expression.rb +9 -16
  55. data/lib/gobstones/lang/expressions/type_bound_functions.rb +30 -25
  56. data/lib/gobstones/lang/expressions/var_name.rb +9 -13
  57. data/lib/gobstones/lang/literals/all.rb +3 -3
  58. data/lib/gobstones/lang/literals/{booleans.rb → boolean.rb} +24 -22
  59. data/lib/gobstones/lang/literals/{colors.rb → color.rb} +4 -14
  60. data/lib/gobstones/lang/literals/{directions.rb → direction.rb} +3 -13
  61. data/lib/gobstones/lang/literals/literal.rb +35 -27
  62. data/lib/gobstones/lang/literals/number.rb +6 -8
  63. data/lib/gobstones/lang/program.rb +9 -16
  64. data/lib/gobstones/modules/equality_definition.rb +23 -0
  65. data/lib/gobstones/parser/ast/ast.rb +48 -70
  66. data/lib/gobstones/parser/parse_error.rb +2 -7
  67. data/lib/gobstones/parser/treetop_parser.rb +9 -14
  68. data/lib/gobstones/runner/board.rb +12 -15
  69. data/lib/gobstones/runner/cell.rb +14 -20
  70. data/lib/gobstones/runner/errors/all.rb +1 -1
  71. data/lib/gobstones/runner/errors/boom_error.rb +0 -5
  72. data/lib/gobstones/runner/errors/definition_not_found_error.rb +7 -7
  73. data/lib/gobstones/runner/errors/empty_cell_error.rb +0 -5
  74. data/lib/gobstones/runner/errors/gobstones_runtime_error.rb +0 -5
  75. data/lib/gobstones/runner/errors/gobstones_type_error.rb +2 -7
  76. data/lib/gobstones/runner/errors/out_of_board_error.rb +0 -5
  77. data/lib/gobstones/runner/errors/undefined_variable_error.rb +6 -4
  78. data/lib/gobstones/runner/errors/wrong_arguments_error.rb +0 -5
  79. data/lib/gobstones/runner/execution_context.rb +16 -33
  80. data/lib/gobstones/runner/head.rb +17 -20
  81. data/lib/gobstones/runner/program_result.rb +12 -0
  82. data/lib/gobstones/type_check_result.rb +0 -4
  83. data/spec/lang/commands/boom_spec.rb +7 -0
  84. data/spec/lang/commands/command_block_spec.rb +15 -0
  85. data/spec/lang/commands/if_spec.rb +32 -0
  86. data/spec/lang/commands/if_then_else_spec.rb +19 -0
  87. data/spec/lang/commands/ir_al_origen_spec.rb +11 -0
  88. data/spec/lang/commands/mover_spec.rb +30 -0
  89. data/spec/lang/commands/multiple_assignment_spec.rb +39 -22
  90. data/spec/lang/commands/poner_spec.rb +27 -0
  91. data/spec/lang/commands/procedure_call_spec.rb +26 -28
  92. data/spec/lang/commands/procedure_spec.rb +32 -32
  93. data/spec/lang/commands/repeat_with_spec.rb +64 -0
  94. data/spec/lang/commands/sacar_spec.rb +32 -0
  95. data/spec/lang/commands/single_assignment_spec.rb +5 -6
  96. data/spec/lang/commands/skip_spec.rb +10 -0
  97. data/spec/lang/commands/vaciar_tablero_spec.rb +10 -0
  98. data/spec/lang/commands/while_spec.rb +39 -0
  99. data/spec/lang/definitions/main_spec.rb +34 -0
  100. data/spec/lang/definitions/no_return_statement_spec.rb +4 -5
  101. data/spec/lang/definitions/var_tuple_spec.rb +4 -7
  102. data/spec/lang/expressions/arithmetic_expressions_spec.rb +37 -64
  103. data/spec/lang/expressions/boolean_expressions_spec.rb +25 -34
  104. data/spec/lang/expressions/comparison_expressions_spec.rb +109 -155
  105. data/spec/lang/expressions/enclosed_by_parens_expression_spec.rb +3 -7
  106. data/spec/lang/expressions/function_call_spec.rb +24 -20
  107. data/spec/lang/expressions/primitive_functions_spec.rb +28 -39
  108. data/spec/lang/expressions/type_bound_functions_spec.rb +10 -18
  109. data/spec/lang/expressions/var_name_spec.rb +8 -12
  110. data/spec/lang/literals/{booleans_spec.rb → boolean_spec.rb} +3 -5
  111. data/spec/lang/literals/color_spec.rb +19 -0
  112. data/spec/lang/literals/direction_spec.rb +46 -0
  113. data/spec/lang/literals/{numbers_spec.rb → number_spec.rb} +3 -4
  114. data/spec/matchers/parse_matcher.rb +9 -11
  115. data/spec/parser/arithmetic_expressions_spec.rb +51 -61
  116. data/spec/parser/assignments_spec.rb +21 -31
  117. data/spec/parser/boolean_expressions_spec.rb +35 -43
  118. data/spec/parser/command_block_spec.rb +18 -20
  119. data/spec/parser/data_types_spec.rb +9 -19
  120. data/spec/parser/function_calls_spec.rb +19 -19
  121. data/spec/parser/function_definitions_spec.rb +17 -22
  122. data/spec/parser/gobstones_program_spec.rb +30 -30
  123. data/spec/parser/if_command_spec.rb +19 -28
  124. data/spec/parser/main_definition_spec.rb +13 -16
  125. data/spec/parser/nested_expressions_spec.rb +20 -24
  126. data/spec/parser/primitive_expressions_spec.rb +33 -38
  127. data/spec/parser/procedure_calls_spec.rb +17 -18
  128. data/spec/parser/procedure_definitions_spec.rb +12 -15
  129. data/spec/parser/repeat_with_command_spec.rb +10 -10
  130. data/spec/parser/simple_commands_spec.rb +23 -37
  131. data/spec/parser/treetop_parser_spec.rb +87 -83
  132. data/spec/parser/var_tuple_spec.rb +8 -12
  133. data/spec/parser/while_command_spec.rb +11 -14
  134. data/spec/runner/board_spec.rb +28 -33
  135. data/spec/runner/cell_spec.rb +21 -28
  136. data/spec/runner/execution_context_spec.rb +18 -35
  137. data/spec/runner/head_spec.rb +54 -60
  138. data/spec/spec_helper.rb +10 -1
  139. data/spec/support/board_assertions.rb +18 -0
  140. data/spec/{gobstones_lang_test_objects.rb → support/gobstones_lang_test_objects.rb} +6 -4
  141. data/spec/type_checker_spec.rb +19 -25
  142. metadata +80 -56
  143. data/.ruby-version +0 -1
  144. data/lib/gobstones/lang/commands/boom_cmd.rb +0 -31
  145. data/lib/gobstones/lang/commands/conditional_cmd.rb +0 -31
  146. data/lib/gobstones/lang/commands/if_cmd.rb +0 -38
  147. data/lib/gobstones/lang/commands/ir_al_origen_cmd.rb +0 -19
  148. data/lib/gobstones/lang/commands/mover_cmd.rb +0 -27
  149. data/lib/gobstones/lang/commands/poner_cmd.rb +0 -35
  150. data/lib/gobstones/lang/commands/repeat_with_cmd.rb +0 -77
  151. data/lib/gobstones/lang/commands/sacar_cmd.rb +0 -33
  152. data/lib/gobstones/lang/commands/skip_cmd.rb +0 -19
  153. data/lib/gobstones/lang/commands/vaciar_tablero_cmd.rb +0 -19
  154. data/lib/gobstones/lang/commands/while_cmd.rb +0 -25
  155. data/lib/gobstones/modules/equal_by_class.rb +0 -13
  156. data/spec/lang/commands/boom_cmd_spec.rb +0 -8
  157. data/spec/lang/commands/cmd_block_spec.rb +0 -21
  158. data/spec/lang/commands/if_cmd_spec.rb +0 -50
  159. data/spec/lang/commands/ir_al_origen_cmd_spec.rb +0 -16
  160. data/spec/lang/commands/mover_cmd_spec.rb +0 -36
  161. data/spec/lang/commands/poner_cmd_spec.rb +0 -28
  162. data/spec/lang/commands/repeat_with_cmd_spec.rb +0 -60
  163. data/spec/lang/commands/sacar_cmd_spec.rb +0 -35
  164. data/spec/lang/commands/skip_cmd_spec.rb +0 -12
  165. data/spec/lang/commands/vaciar_tablero_cmd_spec.rb +0 -14
  166. data/spec/lang/commands/while_cmd_spec.rb +0 -43
  167. data/spec/lang/literals/colors_spec.rb +0 -13
  168. data/spec/lang/literals/directions_spec.rb +0 -45
@@ -1,36 +1,28 @@
1
- require 'gobstones/modules/equal_by_class'
1
+ require 'gobstones/modules/equality_definition'
2
2
  require 'gobstones/runner/errors/definition_not_found_error'
3
3
 
4
4
  module Gobstones
5
-
6
5
  module Lang
7
-
8
6
  module DefinitionCall
9
-
10
- include Gobstones::EqualByClass
7
+ include EqualityDefinition
11
8
 
12
9
  attr_reader :name, :arguments
13
10
 
14
- def initialize(name, arguments=[])
11
+ def initialize(name, arguments = [])
15
12
  @name = name
16
13
  @arguments = arguments
17
14
  end
18
15
 
19
- def ==(other)
20
- super(other) &&
21
- self.name == other.name &&
22
- self.arguments == other.arguments
16
+ def equality_attributes
17
+ %i[name arguments]
23
18
  end
24
19
 
25
20
  def evaluate(context)
26
- evaluated_arguments = arguments.map { |argument| argument.evaluate context }
21
+ evaluated_arguments = arguments.map { |argument| argument.evaluate(context) }
27
22
  context.program_context.definition_named(name, ->(definition) {
28
23
  definition.evaluate context, evaluated_arguments
29
- }, -> { raise Gobstones::Runner::DefinitionNotFound.new name } )
24
+ }, -> { raise Runner::DefinitionNotFound, name })
30
25
  end
31
-
32
26
  end
33
-
34
27
  end
35
-
36
28
  end
@@ -3,21 +3,15 @@ require 'gobstones/runner/execution_context'
3
3
  require 'gobstones/lang/definitions/return_from_function'
4
4
 
5
5
  module Gobstones
6
-
7
6
  module Lang
8
-
9
7
  class Function < Definition
10
-
11
8
  def definition_type
12
9
  'function'
13
10
  end
14
11
 
15
12
  def create_context_based_on(outer_context)
16
- Gobstones::Runner::FunctionExecutionContext.based_on outer_context
13
+ Runner::FunctionExecutionContext.based_on(outer_context)
17
14
  end
18
-
19
15
  end
20
-
21
16
  end
22
-
23
17
  end
@@ -4,23 +4,16 @@ require 'gobstones/lang/definitions/no_return_statement'
4
4
  require 'gobstones/lang/definitions/return_from_main'
5
5
 
6
6
  module Gobstones
7
-
8
7
  module Lang
9
-
10
8
  class Main < Definition
11
-
12
9
  def initialize(body, return_statement)
13
10
  super('Main', VarTuple.empty, body, return_statement)
14
11
  end
15
12
 
16
13
  def evaluate(context)
17
- # evaluate body
18
14
  body.evaluate context
19
- # evaluate return
15
+ return_statement.evaluate(context) || []
20
16
  end
21
-
22
17
  end
23
-
24
18
  end
25
-
26
19
  end
@@ -1,19 +1,13 @@
1
- require 'gobstones/modules/equal_by_class'
1
+ require 'gobstones/modules/equality_definition'
2
2
 
3
3
  module Gobstones
4
-
5
4
  module Lang
6
-
7
5
  class NoReturnStatement
8
-
9
- include Gobstones::EqualByClass
6
+ include EqualityDefinition
10
7
 
11
8
  def evaluate(context)
12
9
  # nothing to do
13
10
  end
14
-
15
11
  end
16
-
17
12
  end
18
-
19
13
  end
@@ -3,11 +3,8 @@ require 'gobstones/lang/definitions/no_return_statement'
3
3
  require 'gobstones/runner/execution_context'
4
4
 
5
5
  module Gobstones
6
-
7
6
  module Lang
8
-
9
7
  class Procedure < Definition
10
-
11
8
  # TODO rename args to a better name, args_tuple?
12
9
 
13
10
  def initialize(name, args, body)
@@ -19,11 +16,8 @@ module Gobstones
19
16
  end
20
17
 
21
18
  def create_context_based_on(outer_context)
22
- Gobstones::Runner::ProcedureExecutionContext.based_on outer_context
19
+ Runner::ProcedureExecutionContext.based_on(outer_context)
23
20
  end
24
-
25
21
  end
26
-
27
22
  end
28
-
29
23
  end
@@ -1,12 +1,9 @@
1
- require 'gobstones/modules/equal_by_class'
1
+ require 'gobstones/modules/equality_definition'
2
2
 
3
3
  module Gobstones
4
-
5
4
  module Lang
6
-
7
5
  class ReturnFromFunction
8
-
9
- include Gobstones::EqualByClass
6
+ include EqualityDefinition
10
7
 
11
8
  attr_reader :expressions
12
9
 
@@ -14,19 +11,15 @@ module Gobstones
14
11
  @expressions = expressions
15
12
  end
16
13
 
17
- def ==(other)
18
- super(other) && self.expressions == other.expressions
14
+ def equality_attributes
15
+ %i[expressions]
19
16
  end
20
17
 
21
18
  def evaluate(context)
22
19
  # TODO think more the case of gexp tuple, should it be a data type instead of a plain list?
23
- expressions.size == 1 ?
24
- expressions.first.evaluate(context) :
25
- expressions.map { |expression| expression.evaluate context }
20
+ evaluated_expressions = expressions.map { |expression| expression.evaluate(context) }
21
+ evaluated_expressions.size == 1 ? evaluated_expressions.first : evaluated_expressions
26
22
  end
27
-
28
23
  end
29
-
30
24
  end
31
-
32
25
  end
@@ -1,12 +1,9 @@
1
- require 'gobstones/modules/equal_by_class'
1
+ require 'gobstones/modules/equality_definition'
2
2
 
3
3
  module Gobstones
4
-
5
4
  module Lang
6
-
7
5
  class ReturnFromMain
8
-
9
- include Gobstones::EqualByClass
6
+ include EqualityDefinition
10
7
 
11
8
  attr_reader :var_tuple
12
9
 
@@ -14,13 +11,21 @@ module Gobstones
14
11
  @var_tuple = var_tuple
15
12
  end
16
13
 
17
- def ==(other)
18
- super(other) &&
19
- self.var_tuple == other.var_tuple
14
+ def equality_attributes
15
+ %i[var_tuple]
20
16
  end
21
17
 
22
- end
18
+ def evaluate(context)
19
+ Hash[evaluated_variables(context)]
20
+ end
23
21
 
24
- end
22
+ private
25
23
 
24
+ def evaluated_variables(context)
25
+ var_tuple.variables.map do |variable|
26
+ [variable, context.get(variable)]
27
+ end
28
+ end
29
+ end
30
+ end
26
31
  end
@@ -1,26 +1,27 @@
1
- require 'gobstones/modules/equal_by_class'
1
+ require 'gobstones/modules/equality_definition'
2
+ require 'gobstones/extensions/string'
2
3
 
3
4
  module Gobstones
4
-
5
5
  module Lang
6
-
7
6
  class VarTuple
8
-
9
- include Gobstones::EqualByClass
7
+ include EqualityDefinition
10
8
 
11
9
  attr_reader :variables
12
10
 
13
11
  def self.empty
14
- self.new []
12
+ new([])
13
+ end
14
+
15
+ def self.with_names(var_names)
16
+ new(var_names.map(&:to_var_name))
15
17
  end
16
18
 
17
19
  def initialize(variables)
18
20
  @variables = variables
19
21
  end
20
22
 
21
- def ==(other)
22
- super(other) &&
23
- self.variables == other.variables
23
+ def equality_attributes
24
+ %i[variables]
24
25
  end
25
26
 
26
27
  def length
@@ -30,9 +31,6 @@ module Gobstones
30
31
  def variable_at(index)
31
32
  variables[index]
32
33
  end
33
-
34
34
  end
35
-
36
35
  end
37
-
38
36
  end
@@ -1,52 +1,42 @@
1
1
  require 'gobstones/lang/expressions/two_arg_expression'
2
2
  require 'gobstones/runner/errors/gobstones_runtime_error'
3
+ require 'gobstones/runner/execution_context'
4
+ require 'gobstones/extensions/integer'
3
5
 
4
6
  module Gobstones
5
-
6
7
  module Lang
8
+ class ArithmeticExpression < TwoArgExpression
9
+ def self.numbers(first, second)
10
+ new(first.to_gbs_num, second.to_gbs_num)
11
+ end
12
+ end
7
13
 
8
- class Add < TwoArgExpression
9
-
14
+ class Add < ArithmeticExpression
10
15
  evaluates_with :+
11
-
12
16
  end
13
17
 
14
- class Sub < TwoArgExpression
15
-
18
+ class Sub < ArithmeticExpression
16
19
  evaluates_with :-
17
-
18
20
  end
19
21
 
20
- class Mul < TwoArgExpression
21
-
22
+ class Mul < ArithmeticExpression
22
23
  evaluates_with :*
23
-
24
24
  end
25
25
 
26
- class Div < TwoArgExpression
27
-
28
- def evaluate(context=nil)
29
- begin
30
- left_expr.evaluate(context) / right_expr.evaluate(context)
31
- rescue ZeroDivisionError
32
- raise Gobstones::Runner::GobstonesRuntimeError, 'zero division'
33
- end
26
+ class Div < ArithmeticExpression
27
+ def evaluate(context = Runner::NullExecutionContext.new)
28
+ left_expr.evaluate(context) / right_expr.evaluate(context)
29
+ rescue ZeroDivisionError
30
+ raise Runner::GobstonesRuntimeError, 'zero division'
34
31
  end
35
-
36
32
  end
37
33
 
38
- class Mod < TwoArgExpression
39
-
34
+ class Mod < ArithmeticExpression
40
35
  evaluates_with :%
41
-
42
36
  end
43
37
 
44
- class Pow < TwoArgExpression
45
-
38
+ class Pow < ArithmeticExpression
46
39
  evaluates_with :**
47
-
48
40
  end
49
-
50
41
  end
51
-
52
42
  end
@@ -2,29 +2,23 @@ require 'gobstones/lang/expressions/one_arg_expression'
2
2
  require 'gobstones/lang/expressions/two_arg_expression'
3
3
 
4
4
  module Gobstones
5
-
6
5
  module Lang
7
-
8
6
  class Not < OneArgExpression
9
-
10
7
  def evaluate(context)
11
- with_evaluated_argument_in(context) { |result| result.not }
8
+ with_evaluated_argument_in(context, &:not)
12
9
  end
13
10
 
11
+ def to_s
12
+ 'Not expression'
13
+ end
14
14
  end
15
15
 
16
16
  class And < TwoArgExpression
17
-
18
17
  evaluates_with :and
19
-
20
18
  end
21
19
 
22
20
  class Or < TwoArgExpression
23
-
24
21
  evaluates_with :or
25
-
26
22
  end
27
-
28
23
  end
29
-
30
24
  end
@@ -1,45 +1,29 @@
1
1
  require 'gobstones/lang/expressions/two_arg_expression'
2
2
 
3
3
  module Gobstones
4
-
5
4
  module Lang
6
-
7
5
  class Equal < TwoArgExpression
8
-
9
6
  evaluates_with :equal
10
-
11
7
  end
12
8
 
13
9
  class NotEqual < TwoArgExpression
14
-
15
10
  evaluates_with :not_equal
16
-
17
11
  end
18
12
 
19
13
  class LessThan < TwoArgExpression
20
-
21
14
  evaluates_with :less_than
22
-
23
15
  end
24
16
 
25
17
  class LessEqual < TwoArgExpression
26
-
27
18
  evaluates_with :less_equal
28
-
29
19
  end
30
20
 
31
21
  class GreaterEqual < TwoArgExpression
32
-
33
22
  evaluates_with :greater_equal
34
-
35
23
  end
36
24
 
37
25
  class GreaterThan < TwoArgExpression
38
-
39
26
  evaluates_with :greater_than
40
-
41
27
  end
42
-
43
28
  end
44
-
45
29
  end
@@ -1,17 +1,15 @@
1
1
  require 'gobstones/lang/expressions/one_arg_expression'
2
2
 
3
3
  module Gobstones
4
-
5
4
  module Lang
6
-
7
5
  class EnclosedByParensExpression < OneArgExpression
8
-
9
6
  def evaluate(context)
10
7
  with_evaluated_argument_in(context) { |result| result }
11
8
  end
12
9
 
10
+ def to_s
11
+ 'Expression enclosed in parentheses'
12
+ end
13
13
  end
14
-
15
14
  end
16
-
17
15
  end
@@ -0,0 +1,18 @@
1
+ require 'gobstones/modules/equality_definition'
2
+ require 'error_handling_protocol'
3
+
4
+ module Gobstones
5
+ module Lang
6
+ class Expression
7
+ include EqualityDefinition
8
+
9
+ def evaluate(_context)
10
+ subclass_responsibility
11
+ end
12
+
13
+ def is_function_call?
14
+ false
15
+ end
16
+ end
17
+ end
18
+ end