gobstones 0.0.2 → 0.0.3

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 (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