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.
- checksums.yaml +5 -5
- data/.rubocop.yml +133 -0
- data/.rubocop_todo.yml +75 -0
- data/.simplecov +1 -3
- data/.tool-versions +1 -0
- data/.travis.yml +9 -2
- data/Gemfile +11 -5
- data/Gemfile.lock +65 -39
- data/README.md +8 -1
- data/Rakefile +1 -1
- data/bin/gobstones +1 -1
- data/gobstones.gemspec +12 -11
- data/lib/gobstones/cli/printer.rb +41 -28
- data/lib/gobstones/cli/runner.rb +50 -15
- data/lib/gobstones/extensions/all.rb +1 -1
- data/lib/gobstones/extensions/boolean.rb +1 -5
- data/lib/gobstones/extensions/{fixnum.rb → integer.rb} +2 -4
- data/lib/gobstones/extensions/string.rb +1 -3
- data/lib/gobstones/lang/all.rb +3 -3
- data/lib/gobstones/lang/commands/all.rb +11 -10
- data/lib/gobstones/lang/commands/boom.rb +26 -0
- data/lib/gobstones/lang/commands/command_block.rb +23 -23
- data/lib/gobstones/lang/commands/conditional.rb +26 -0
- data/lib/gobstones/lang/commands/if.rb +13 -0
- data/lib/gobstones/lang/commands/if_then_else.rb +26 -0
- data/lib/gobstones/lang/commands/ir_al_origen.rb +15 -0
- data/lib/gobstones/lang/commands/mover.rb +23 -0
- data/lib/gobstones/lang/commands/multiple_assignment.rb +34 -21
- data/lib/gobstones/lang/commands/poner.rb +31 -0
- data/lib/gobstones/lang/commands/procedure_call.rb +8 -8
- data/lib/gobstones/lang/commands/repeat_with.rb +69 -0
- data/lib/gobstones/lang/commands/sacar.rb +29 -0
- data/lib/gobstones/lang/commands/single_assignment.rb +15 -20
- data/lib/gobstones/lang/commands/skip.rb +15 -0
- data/lib/gobstones/lang/commands/vaciar_tablero.rb +15 -0
- data/lib/gobstones/lang/commands/while.rb +20 -0
- data/lib/gobstones/lang/definitions/definition.rb +16 -23
- data/lib/gobstones/lang/definitions/definition_call.rb +7 -15
- data/lib/gobstones/lang/definitions/function.rb +1 -7
- data/lib/gobstones/lang/definitions/main.rb +1 -8
- data/lib/gobstones/lang/definitions/no_return_statement.rb +2 -8
- data/lib/gobstones/lang/definitions/procedure.rb +1 -7
- data/lib/gobstones/lang/definitions/return_from_function.rb +6 -13
- data/lib/gobstones/lang/definitions/return_from_main.rb +15 -10
- data/lib/gobstones/lang/definitions/var_tuple.rb +10 -12
- data/lib/gobstones/lang/expressions/arithmetic_expressions.rb +17 -27
- data/lib/gobstones/lang/expressions/boolean_expressions.rb +4 -10
- data/lib/gobstones/lang/expressions/comparison_expressions.rb +0 -16
- data/lib/gobstones/lang/expressions/enclosed_by_parens_expression.rb +3 -5
- data/lib/gobstones/lang/expressions/expression.rb +18 -0
- data/lib/gobstones/lang/expressions/function_call.rb +9 -6
- data/lib/gobstones/lang/expressions/one_arg_expression.rb +8 -16
- data/lib/gobstones/lang/expressions/primitive_functions.rb +24 -16
- data/lib/gobstones/lang/expressions/two_arg_expression.rb +9 -16
- data/lib/gobstones/lang/expressions/type_bound_functions.rb +30 -25
- data/lib/gobstones/lang/expressions/var_name.rb +9 -13
- data/lib/gobstones/lang/literals/all.rb +3 -3
- data/lib/gobstones/lang/literals/{booleans.rb → boolean.rb} +24 -22
- data/lib/gobstones/lang/literals/{colors.rb → color.rb} +4 -14
- data/lib/gobstones/lang/literals/{directions.rb → direction.rb} +3 -13
- data/lib/gobstones/lang/literals/literal.rb +35 -27
- data/lib/gobstones/lang/literals/number.rb +6 -8
- data/lib/gobstones/lang/program.rb +9 -16
- data/lib/gobstones/modules/equality_definition.rb +23 -0
- data/lib/gobstones/parser/ast/ast.rb +48 -70
- data/lib/gobstones/parser/parse_error.rb +2 -7
- data/lib/gobstones/parser/treetop_parser.rb +9 -14
- data/lib/gobstones/runner/board.rb +12 -15
- data/lib/gobstones/runner/cell.rb +14 -20
- data/lib/gobstones/runner/errors/all.rb +1 -1
- data/lib/gobstones/runner/errors/boom_error.rb +0 -5
- data/lib/gobstones/runner/errors/definition_not_found_error.rb +7 -7
- data/lib/gobstones/runner/errors/empty_cell_error.rb +0 -5
- data/lib/gobstones/runner/errors/gobstones_runtime_error.rb +0 -5
- data/lib/gobstones/runner/errors/gobstones_type_error.rb +2 -7
- data/lib/gobstones/runner/errors/out_of_board_error.rb +0 -5
- data/lib/gobstones/runner/errors/undefined_variable_error.rb +6 -4
- data/lib/gobstones/runner/errors/wrong_arguments_error.rb +0 -5
- data/lib/gobstones/runner/execution_context.rb +16 -33
- data/lib/gobstones/runner/head.rb +17 -20
- data/lib/gobstones/runner/program_result.rb +12 -0
- data/lib/gobstones/type_check_result.rb +0 -4
- data/spec/lang/commands/boom_spec.rb +7 -0
- data/spec/lang/commands/command_block_spec.rb +15 -0
- data/spec/lang/commands/if_spec.rb +32 -0
- data/spec/lang/commands/if_then_else_spec.rb +19 -0
- data/spec/lang/commands/ir_al_origen_spec.rb +11 -0
- data/spec/lang/commands/mover_spec.rb +30 -0
- data/spec/lang/commands/multiple_assignment_spec.rb +39 -22
- data/spec/lang/commands/poner_spec.rb +27 -0
- data/spec/lang/commands/procedure_call_spec.rb +26 -28
- data/spec/lang/commands/procedure_spec.rb +32 -32
- data/spec/lang/commands/repeat_with_spec.rb +64 -0
- data/spec/lang/commands/sacar_spec.rb +32 -0
- data/spec/lang/commands/single_assignment_spec.rb +5 -6
- data/spec/lang/commands/skip_spec.rb +10 -0
- data/spec/lang/commands/vaciar_tablero_spec.rb +10 -0
- data/spec/lang/commands/while_spec.rb +39 -0
- data/spec/lang/definitions/main_spec.rb +34 -0
- data/spec/lang/definitions/no_return_statement_spec.rb +4 -5
- data/spec/lang/definitions/var_tuple_spec.rb +4 -7
- data/spec/lang/expressions/arithmetic_expressions_spec.rb +37 -64
- data/spec/lang/expressions/boolean_expressions_spec.rb +25 -34
- data/spec/lang/expressions/comparison_expressions_spec.rb +109 -155
- data/spec/lang/expressions/enclosed_by_parens_expression_spec.rb +3 -7
- data/spec/lang/expressions/function_call_spec.rb +24 -20
- data/spec/lang/expressions/primitive_functions_spec.rb +28 -39
- data/spec/lang/expressions/type_bound_functions_spec.rb +10 -18
- data/spec/lang/expressions/var_name_spec.rb +8 -12
- data/spec/lang/literals/{booleans_spec.rb → boolean_spec.rb} +3 -5
- data/spec/lang/literals/color_spec.rb +19 -0
- data/spec/lang/literals/direction_spec.rb +46 -0
- data/spec/lang/literals/{numbers_spec.rb → number_spec.rb} +3 -4
- data/spec/matchers/parse_matcher.rb +9 -11
- data/spec/parser/arithmetic_expressions_spec.rb +51 -61
- data/spec/parser/assignments_spec.rb +21 -31
- data/spec/parser/boolean_expressions_spec.rb +35 -43
- data/spec/parser/command_block_spec.rb +18 -20
- data/spec/parser/data_types_spec.rb +9 -19
- data/spec/parser/function_calls_spec.rb +19 -19
- data/spec/parser/function_definitions_spec.rb +17 -22
- data/spec/parser/gobstones_program_spec.rb +30 -30
- data/spec/parser/if_command_spec.rb +19 -28
- data/spec/parser/main_definition_spec.rb +13 -16
- data/spec/parser/nested_expressions_spec.rb +20 -24
- data/spec/parser/primitive_expressions_spec.rb +33 -38
- data/spec/parser/procedure_calls_spec.rb +17 -18
- data/spec/parser/procedure_definitions_spec.rb +12 -15
- data/spec/parser/repeat_with_command_spec.rb +10 -10
- data/spec/parser/simple_commands_spec.rb +23 -37
- data/spec/parser/treetop_parser_spec.rb +87 -83
- data/spec/parser/var_tuple_spec.rb +8 -12
- data/spec/parser/while_command_spec.rb +11 -14
- data/spec/runner/board_spec.rb +28 -33
- data/spec/runner/cell_spec.rb +21 -28
- data/spec/runner/execution_context_spec.rb +18 -35
- data/spec/runner/head_spec.rb +54 -60
- data/spec/spec_helper.rb +10 -1
- data/spec/support/board_assertions.rb +18 -0
- data/spec/{gobstones_lang_test_objects.rb → support/gobstones_lang_test_objects.rb} +6 -4
- data/spec/type_checker_spec.rb +19 -25
- metadata +80 -56
- data/.ruby-version +0 -1
- data/lib/gobstones/lang/commands/boom_cmd.rb +0 -31
- data/lib/gobstones/lang/commands/conditional_cmd.rb +0 -31
- data/lib/gobstones/lang/commands/if_cmd.rb +0 -38
- data/lib/gobstones/lang/commands/ir_al_origen_cmd.rb +0 -19
- data/lib/gobstones/lang/commands/mover_cmd.rb +0 -27
- data/lib/gobstones/lang/commands/poner_cmd.rb +0 -35
- data/lib/gobstones/lang/commands/repeat_with_cmd.rb +0 -77
- data/lib/gobstones/lang/commands/sacar_cmd.rb +0 -33
- data/lib/gobstones/lang/commands/skip_cmd.rb +0 -19
- data/lib/gobstones/lang/commands/vaciar_tablero_cmd.rb +0 -19
- data/lib/gobstones/lang/commands/while_cmd.rb +0 -25
- data/lib/gobstones/modules/equal_by_class.rb +0 -13
- data/spec/lang/commands/boom_cmd_spec.rb +0 -8
- data/spec/lang/commands/cmd_block_spec.rb +0 -21
- data/spec/lang/commands/if_cmd_spec.rb +0 -50
- data/spec/lang/commands/ir_al_origen_cmd_spec.rb +0 -16
- data/spec/lang/commands/mover_cmd_spec.rb +0 -36
- data/spec/lang/commands/poner_cmd_spec.rb +0 -28
- data/spec/lang/commands/repeat_with_cmd_spec.rb +0 -60
- data/spec/lang/commands/sacar_cmd_spec.rb +0 -35
- data/spec/lang/commands/skip_cmd_spec.rb +0 -12
- data/spec/lang/commands/vaciar_tablero_cmd_spec.rb +0 -14
- data/spec/lang/commands/while_cmd_spec.rb +0 -43
- data/spec/lang/literals/colors_spec.rb +0 -13
- data/spec/lang/literals/directions_spec.rb +0 -45
@@ -1,36 +1,28 @@
|
|
1
|
-
require 'gobstones/modules/
|
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
|
20
|
-
|
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
|
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
|
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
|
-
|
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
|
-
|
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/
|
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
|
-
|
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/
|
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
|
18
|
-
|
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.
|
24
|
-
|
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/
|
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
|
18
|
-
|
19
|
-
self.var_tuple == other.var_tuple
|
14
|
+
def equality_attributes
|
15
|
+
%i[var_tuple]
|
20
16
|
end
|
21
17
|
|
22
|
-
|
18
|
+
def evaluate(context)
|
19
|
+
Hash[evaluated_variables(context)]
|
20
|
+
end
|
23
21
|
|
24
|
-
|
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/
|
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
|
-
|
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
|
22
|
-
|
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 <
|
9
|
-
|
14
|
+
class Add < ArithmeticExpression
|
10
15
|
evaluates_with :+
|
11
|
-
|
12
16
|
end
|
13
17
|
|
14
|
-
class Sub <
|
15
|
-
|
18
|
+
class Sub < ArithmeticExpression
|
16
19
|
evaluates_with :-
|
17
|
-
|
18
20
|
end
|
19
21
|
|
20
|
-
class Mul <
|
21
|
-
|
22
|
+
class Mul < ArithmeticExpression
|
22
23
|
evaluates_with :*
|
23
|
-
|
24
24
|
end
|
25
25
|
|
26
|
-
class Div <
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
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 <
|
39
|
-
|
34
|
+
class Mod < ArithmeticExpression
|
40
35
|
evaluates_with :%
|
41
|
-
|
42
36
|
end
|
43
37
|
|
44
|
-
class Pow <
|
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
|
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
|