gobstones 0.0.1.1 → 0.0.2
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 +4 -4
- data/.gitignore +1 -3
- data/.ruby-version +1 -1
- data/.travis.yml +1 -1
- data/CHANGELOG +22 -2
- data/Gemfile +3 -3
- data/Gemfile.lock +32 -27
- data/bin/gobstones +1 -1
- data/examples/.gitkeep +0 -0
- data/gobstones.gemspec +2 -2
- data/lib/gobstones/cli/board_template +1 -1
- data/lib/gobstones/cli/printer.rb +1 -1
- data/lib/gobstones/cli/runner.rb +8 -2
- data/lib/gobstones/extensions/all.rb +2 -1
- data/lib/gobstones/extensions/boolean.rb +1 -1
- data/lib/gobstones/extensions/fixnum.rb +1 -1
- data/lib/gobstones/extensions/string.rb +9 -0
- data/lib/gobstones/lang/all.rb +1 -1
- data/lib/gobstones/lang/commands/all.rb +3 -2
- data/lib/gobstones/lang/commands/boom_cmd.rb +6 -3
- data/lib/gobstones/lang/commands/command_block.rb +1 -1
- data/lib/gobstones/lang/commands/conditional_cmd.rb +5 -1
- data/lib/gobstones/lang/commands/ir_al_origen_cmd.rb +1 -1
- data/lib/gobstones/lang/commands/mover_cmd.rb +4 -2
- data/lib/gobstones/lang/commands/multiple_assignment.rb +35 -0
- data/lib/gobstones/lang/commands/poner_cmd.rb +8 -4
- data/lib/gobstones/lang/commands/procedure_call.rb +1 -9
- data/lib/gobstones/lang/commands/repeat_with_cmd.rb +10 -6
- data/lib/gobstones/lang/commands/sacar_cmd.rb +9 -7
- data/lib/gobstones/lang/commands/{assignments.rb → single_assignment.rb} +5 -3
- data/lib/gobstones/lang/commands/skip_cmd.rb +2 -2
- data/lib/gobstones/lang/commands/vaciar_tablero_cmd.rb +1 -1
- data/lib/gobstones/lang/commands/while_cmd.rb +1 -1
- data/lib/gobstones/lang/definitions/all.rb +1 -1
- data/lib/gobstones/lang/definitions/definition.rb +47 -5
- data/lib/gobstones/lang/definitions/definition_call.rb +17 -5
- data/lib/gobstones/lang/definitions/function.rb +9 -0
- data/lib/gobstones/lang/definitions/main.rb +1 -1
- data/lib/gobstones/lang/definitions/no_return_statement.rb +7 -3
- data/lib/gobstones/lang/definitions/procedure.rb +5 -20
- data/lib/gobstones/lang/definitions/return_from_function.rb +12 -2
- data/lib/gobstones/lang/definitions/return_from_main.rb +5 -1
- data/lib/gobstones/lang/definitions/var_tuple.rb +13 -1
- data/lib/gobstones/lang/expressions/all.rb +1 -1
- data/lib/gobstones/lang/expressions/arithmetic_expressions.rb +1 -1
- data/lib/gobstones/lang/expressions/boolean_expressions.rb +3 -2
- data/lib/gobstones/lang/expressions/enclosed_by_parens_expression.rb +17 -0
- data/lib/gobstones/lang/expressions/function_call.rb +1 -1
- data/lib/gobstones/lang/expressions/one_arg_expression.rb +16 -4
- data/lib/gobstones/lang/expressions/primitive_functions.rb +18 -12
- data/lib/gobstones/lang/expressions/two_arg_expression.rb +7 -3
- data/lib/gobstones/lang/expressions/type_bound_functions.rb +1 -1
- data/lib/gobstones/lang/expressions/var_name.rb +9 -3
- data/lib/gobstones/lang/literals/all.rb +1 -1
- data/lib/gobstones/lang/literals/colors.rb +1 -1
- data/lib/gobstones/lang/literals/literal.rb +31 -21
- data/lib/gobstones/lang/literals/number.rb +1 -1
- data/lib/gobstones/lang/program.rb +13 -4
- data/lib/gobstones/modules/equal_by_class.rb +1 -1
- data/lib/gobstones/parser/ast/ast.rb +12 -8
- data/lib/gobstones/parser/grammar/gobstones.treetop +4 -4
- data/lib/gobstones/parser/parse_error.rb +1 -1
- data/lib/gobstones/runner/all.rb +1 -2
- data/lib/gobstones/runner/board.rb +13 -4
- data/lib/gobstones/runner/cell.rb +10 -0
- data/lib/gobstones/runner/errors/all.rb +1 -1
- data/lib/gobstones/runner/errors/definition_not_found_error.rb +1 -1
- data/lib/gobstones/runner/execution_context.rb +66 -16
- data/lib/gobstones/runner/head.rb +17 -3
- data/spec/gobstones_lang_test_objects.rb +75 -0
- data/spec/lang/commands/boom_cmd_spec.rb +3 -3
- data/spec/lang/commands/cmd_block_spec.rb +14 -14
- data/spec/lang/commands/if_cmd_spec.rb +21 -20
- data/spec/lang/commands/ir_al_origen_cmd_spec.rb +3 -3
- data/spec/lang/commands/mover_cmd_spec.rb +12 -14
- data/spec/lang/commands/multiple_assignment_spec.rb +37 -0
- data/spec/lang/commands/poner_cmd_spec.rb +13 -14
- data/spec/lang/commands/procedure_call_spec.rb +19 -24
- data/spec/lang/commands/procedure_spec.rb +32 -36
- data/spec/lang/commands/repeat_with_cmd_spec.rb +39 -20
- data/spec/lang/commands/sacar_cmd_spec.rb +17 -16
- data/spec/lang/commands/single_assignment_spec.rb +13 -0
- data/spec/lang/commands/skip_cmd_spec.rb +2 -2
- data/spec/lang/commands/vaciar_tablero_cmd_spec.rb +7 -6
- data/spec/lang/commands/while_cmd_spec.rb +21 -15
- data/spec/lang/definitions/no_return_statement_spec.rb +10 -0
- data/spec/lang/definitions/var_tuple_spec.rb +16 -0
- data/spec/lang/expressions/arithmetic_expressions_spec.rb +15 -15
- data/spec/lang/expressions/boolean_expressions_spec.rb +35 -25
- data/spec/lang/expressions/comparison_expressions_spec.rb +25 -28
- data/spec/lang/expressions/enclosed_by_parens_expression_spec.rb +11 -0
- data/spec/lang/expressions/function_call_spec.rb +29 -0
- data/spec/lang/expressions/primitive_functions_spec.rb +60 -62
- data/spec/lang/expressions/type_bound_functions_spec.rb +13 -13
- data/spec/lang/expressions/var_name_spec.rb +20 -8
- data/spec/lang/literals/booleans_spec.rb +5 -7
- data/spec/lang/literals/colors_spec.rb +4 -4
- data/spec/lang/literals/directions_spec.rb +12 -12
- data/spec/lang/literals/numbers_spec.rb +2 -2
- data/spec/matchers/parse_matcher.rb +9 -10
- data/spec/parser/arithmetic_expressions_spec.rb +19 -19
- data/spec/parser/assignments_spec.rb +24 -10
- data/spec/parser/boolean_expressions_spec.rb +18 -18
- data/spec/parser/command_block_spec.rb +17 -19
- data/spec/parser/data_types_spec.rb +23 -23
- data/spec/parser/function_calls_spec.rb +13 -12
- data/spec/parser/function_definitions_spec.rb +13 -18
- data/spec/parser/gobstones_program_spec.rb +15 -15
- data/spec/parser/if_command_spec.rb +13 -12
- data/spec/parser/main_definition_spec.rb +12 -12
- data/spec/parser/nested_expressions_spec.rb +16 -20
- data/spec/parser/primitive_expressions_spec.rb +27 -33
- data/spec/parser/procedure_calls_spec.rb +12 -12
- data/spec/parser/procedure_definitions_spec.rb +10 -16
- data/spec/parser/repeat_with_command_spec.rb +7 -10
- data/spec/parser/simple_commands_spec.rb +10 -10
- data/spec/parser/treetop_parser_spec.rb +11 -10
- data/spec/parser/var_tuple_spec.rb +7 -11
- data/spec/parser/while_command_spec.rb +9 -9
- data/spec/runner/board_spec.rb +23 -27
- data/spec/runner/cell_spec.rb +34 -38
- data/spec/runner/execution_context_spec.rb +38 -24
- data/spec/runner/head_spec.rb +54 -63
- data/spec/spec_helper.rb +4 -1
- data/spec/type_checker_spec.rb +13 -13
- metadata +33 -18
- data/lib/gobstones/lang/expressions/parentheses_expression.rb +0 -13
- data/spec/lang/commands/assignments_spec.rb +0 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 03e20b75d2bb5c93639777a71d19068ae2b69984
|
4
|
+
data.tar.gz: fb74916def49acc055a0a028546e0e514b2542cb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c3f831d15b2ce307ee9f0c5305e51f17ade931bb27b0ca042ea4f8f58316d290cc40966a9b1e76a4baa0e45d791b3a0341fd20e2606f104d965f6741af67ceca
|
7
|
+
data.tar.gz: 6ffabbf50a90cddd4d4dfa8c814d234307af73b1e70906613df903264d17f89dd5564e4bbdebbdd928edfa34240ad987d4737ad096f77370a32f25c259527353
|
data/.gitignore
CHANGED
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.2.0
|
data/.travis.yml
CHANGED
data/CHANGELOG
CHANGED
@@ -1,4 +1,24 @@
|
|
1
|
-
v 0.0.
|
2
|
-
|
1
|
+
v 0.0.2 (2015.01.10)
|
2
|
+
====================
|
3
|
+
|
4
|
+
New features:
|
5
|
+
|
6
|
+
* Support evaluation of function calls
|
7
|
+
* Support expression between parentheses
|
8
|
+
* Add multiple assignment to the language
|
9
|
+
* Add some runtime type checks
|
10
|
+
|
11
|
+
Bug fixes:
|
12
|
+
|
13
|
+
* repeatWith command issue (f0e5fa00a178ffad825c6cfdafbfbd333e331f9b)
|
14
|
+
|
15
|
+
Infrastructure:
|
16
|
+
|
17
|
+
* Support Ruby 2.2.0 and 1.9.3
|
18
|
+
* Upgrade dependencies to latest stable versions
|
19
|
+
* Lots of refactorings and new specs (now 316)
|
20
|
+
|
21
|
+
v 0.0.1 (2013.10.26)
|
22
|
+
====================
|
3
23
|
|
4
24
|
First version.
|
data/Gemfile
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
|
3
3
|
gem 'treetop', '~> 1.4'
|
4
|
-
gem 'rake', '~> 10.
|
4
|
+
gem 'rake', '~> 10.4'
|
5
5
|
|
6
6
|
group :test do
|
7
7
|
gem 'autotest-standalone', '~> 4.5'
|
8
|
-
gem 'rspec', '~>
|
8
|
+
gem 'rspec', '~> 3.1'
|
9
9
|
gem 'simplecov', '~> 0.7', :require => false
|
10
10
|
end
|
11
11
|
|
12
|
-
gem 'coveralls', :require => false
|
12
|
+
gem 'coveralls', '~> 0.7', :require => false
|
data/Gemfile.lock
CHANGED
@@ -2,46 +2,51 @@ GEM
|
|
2
2
|
remote: https://rubygems.org/
|
3
3
|
specs:
|
4
4
|
autotest-standalone (4.5.11)
|
5
|
-
coveralls (0.7.
|
5
|
+
coveralls (0.7.2)
|
6
6
|
multi_json (~> 1.3)
|
7
|
-
rest-client
|
7
|
+
rest-client (= 1.6.7)
|
8
8
|
simplecov (>= 0.7)
|
9
|
-
term-ansicolor
|
10
|
-
thor
|
11
|
-
diff-lcs (1.2.
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
9
|
+
term-ansicolor (= 1.2.2)
|
10
|
+
thor (= 0.18.1)
|
11
|
+
diff-lcs (1.2.5)
|
12
|
+
docile (1.1.5)
|
13
|
+
mime-types (2.4.3)
|
14
|
+
multi_json (1.10.1)
|
15
|
+
polyglot (0.3.5)
|
16
|
+
rake (10.4.2)
|
16
17
|
rest-client (1.6.7)
|
17
18
|
mime-types (>= 1.16)
|
18
|
-
rspec (
|
19
|
-
rspec-core (~>
|
20
|
-
rspec-expectations (~>
|
21
|
-
rspec-mocks (~>
|
22
|
-
rspec-core (
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
19
|
+
rspec (3.1.0)
|
20
|
+
rspec-core (~> 3.1.0)
|
21
|
+
rspec-expectations (~> 3.1.0)
|
22
|
+
rspec-mocks (~> 3.1.0)
|
23
|
+
rspec-core (3.1.7)
|
24
|
+
rspec-support (~> 3.1.0)
|
25
|
+
rspec-expectations (3.1.2)
|
26
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
27
|
+
rspec-support (~> 3.1.0)
|
28
|
+
rspec-mocks (3.1.3)
|
29
|
+
rspec-support (~> 3.1.0)
|
30
|
+
rspec-support (3.1.2)
|
31
|
+
simplecov (0.9.1)
|
32
|
+
docile (~> 1.1.0)
|
27
33
|
multi_json (~> 1.0)
|
28
|
-
simplecov-html (~> 0.
|
29
|
-
simplecov-html (0.
|
34
|
+
simplecov-html (~> 0.8.0)
|
35
|
+
simplecov-html (0.8.0)
|
30
36
|
term-ansicolor (1.2.2)
|
31
37
|
tins (~> 0.8)
|
32
38
|
thor (0.18.1)
|
33
|
-
tins (0.
|
34
|
-
treetop (1.
|
35
|
-
polyglot
|
36
|
-
polyglot (>= 0.3.1)
|
39
|
+
tins (0.13.2)
|
40
|
+
treetop (1.5.3)
|
41
|
+
polyglot (~> 0.3)
|
37
42
|
|
38
43
|
PLATFORMS
|
39
44
|
ruby
|
40
45
|
|
41
46
|
DEPENDENCIES
|
42
47
|
autotest-standalone (~> 4.5)
|
43
|
-
coveralls
|
44
|
-
rake (~> 10.
|
45
|
-
rspec (~>
|
48
|
+
coveralls (~> 0.7)
|
49
|
+
rake (~> 10.4)
|
50
|
+
rspec (~> 3.1)
|
46
51
|
simplecov (~> 0.7)
|
47
52
|
treetop (~> 1.4)
|
data/bin/gobstones
CHANGED
data/examples/.gitkeep
ADDED
File without changes
|
data/gobstones.gemspec
CHANGED
@@ -3,7 +3,7 @@ $:.unshift lib unless $:.include?(lib)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |spec|
|
5
5
|
spec.name = 'gobstones'
|
6
|
-
spec.version = '0.0.
|
6
|
+
spec.version = '0.0.2'
|
7
7
|
spec.licenses = ['GPLv3']
|
8
8
|
spec.authors = ['Nahuel Garbezza']
|
9
9
|
spec.email = ['n.garbezza@gmail.com']
|
@@ -14,7 +14,7 @@ Gem::Specification.new do |spec|
|
|
14
14
|
spec.required_ruby_version = '>= 1.9.3'
|
15
15
|
spec.required_rubygems_version = '>= 1.3.6'
|
16
16
|
|
17
|
-
spec.add_development_dependency 'rspec', '~>
|
17
|
+
spec.add_development_dependency 'rspec', '~> 3'
|
18
18
|
|
19
19
|
spec.files = `git ls-files`.split $/
|
20
20
|
spec.test_files = spec.files.grep %r{^spec/}
|
data/lib/gobstones/cli/runner.rb
CHANGED
@@ -23,6 +23,8 @@ module Gobstones
|
|
23
23
|
print_program_result parse_program.evaluate
|
24
24
|
rescue Gobstones::Parser::ParseError => parse_error
|
25
25
|
handle_parse_error parse_error
|
26
|
+
rescue Gobstones::Runner::GobstonesTypeError => type_error
|
27
|
+
handle_type_error type_error
|
26
28
|
rescue Exception => e
|
27
29
|
# TODO handle more gobstones exceptions
|
28
30
|
raise e
|
@@ -35,7 +37,7 @@ module Gobstones
|
|
35
37
|
end
|
36
38
|
|
37
39
|
def parse_program
|
38
|
-
@parser.parse
|
40
|
+
@parser.parse @code
|
39
41
|
end
|
40
42
|
|
41
43
|
def handle_parse_error(parse_error)
|
@@ -45,8 +47,12 @@ module Gobstones
|
|
45
47
|
puts "#{'~' * (parse_error.parser.failure_column - 1)}^"
|
46
48
|
end
|
47
49
|
|
50
|
+
def handle_type_error(type_error)
|
51
|
+
puts "Type Error: #{type_error.message} occurred in #{type_error.statement}"
|
52
|
+
end
|
53
|
+
|
48
54
|
end
|
49
55
|
|
50
56
|
end
|
51
57
|
|
52
|
-
end
|
58
|
+
end
|
data/lib/gobstones/lang/all.rb
CHANGED
@@ -1,13 +1,14 @@
|
|
1
|
-
require 'gobstones/lang/commands/assignments'
|
2
1
|
require 'gobstones/lang/commands/boom_cmd'
|
3
2
|
require 'gobstones/lang/commands/command_block'
|
4
3
|
require 'gobstones/lang/commands/if_cmd'
|
5
4
|
require 'gobstones/lang/commands/ir_al_origen_cmd'
|
6
5
|
require 'gobstones/lang/commands/mover_cmd'
|
6
|
+
require 'gobstones/lang/commands/multiple_assignment'
|
7
7
|
require 'gobstones/lang/commands/poner_cmd'
|
8
8
|
require 'gobstones/lang/commands/procedure_call'
|
9
9
|
require 'gobstones/lang/commands/repeat_with_cmd'
|
10
10
|
require 'gobstones/lang/commands/sacar_cmd'
|
11
|
+
require 'gobstones/lang/commands/single_assignment'
|
11
12
|
require 'gobstones/lang/commands/skip_cmd'
|
12
13
|
require 'gobstones/lang/commands/vaciar_tablero_cmd'
|
13
|
-
require 'gobstones/lang/commands/while_cmd'
|
14
|
+
require 'gobstones/lang/commands/while_cmd'
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'gobstones/runner/errors/boom_error'
|
2
|
+
require 'gobstones/modules/equal_by_class'
|
2
3
|
|
3
4
|
module Gobstones
|
4
5
|
|
@@ -6,6 +7,8 @@ module Gobstones
|
|
6
7
|
|
7
8
|
class Boom
|
8
9
|
|
10
|
+
include Gobstones::EqualByClass
|
11
|
+
|
9
12
|
attr_reader :message
|
10
13
|
|
11
14
|
def initialize(message)
|
@@ -13,11 +16,11 @@ module Gobstones
|
|
13
16
|
end
|
14
17
|
|
15
18
|
def ==(other)
|
16
|
-
|
19
|
+
super(other) &&
|
17
20
|
self.message == other.message
|
18
21
|
end
|
19
22
|
|
20
|
-
def evaluate(context
|
23
|
+
def evaluate(context)
|
21
24
|
raise Gobstones::Runner::BoomError, message
|
22
25
|
end
|
23
26
|
|
@@ -25,4 +28,4 @@ module Gobstones
|
|
25
28
|
|
26
29
|
end
|
27
30
|
|
28
|
-
end
|
31
|
+
end
|
@@ -1,9 +1,13 @@
|
|
1
|
+
require 'gobstones/modules/equal_by_class'
|
2
|
+
|
1
3
|
module Gobstones
|
2
4
|
|
3
5
|
module Lang
|
4
6
|
|
5
7
|
class ConditionalCmd
|
6
8
|
|
9
|
+
include Gobstones::EqualByClass
|
10
|
+
|
7
11
|
attr_reader :condition, :then_block
|
8
12
|
|
9
13
|
def initialize(condition, then_block)
|
@@ -11,7 +15,7 @@ module Gobstones
|
|
11
15
|
end
|
12
16
|
|
13
17
|
def ==(other)
|
14
|
-
|
18
|
+
super(other) &&
|
15
19
|
self.condition == other.condition &&
|
16
20
|
self.then_block == other.then_block
|
17
21
|
end
|
@@ -7,7 +7,9 @@ module Gobstones
|
|
7
7
|
class Mover < OneArgExpression
|
8
8
|
|
9
9
|
def evaluate(context)
|
10
|
-
|
10
|
+
with_evaluated_argument_in(context) do |result|
|
11
|
+
context.head.move result
|
12
|
+
end
|
11
13
|
end
|
12
14
|
|
13
15
|
def undo(context)
|
@@ -15,7 +17,7 @@ module Gobstones
|
|
15
17
|
end
|
16
18
|
|
17
19
|
def opposite
|
18
|
-
Mover.new
|
20
|
+
Mover.new argument.opposite
|
19
21
|
end
|
20
22
|
|
21
23
|
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'gobstones/modules/equal_by_class'
|
2
|
+
|
3
|
+
module Gobstones
|
4
|
+
|
5
|
+
module Lang
|
6
|
+
|
7
|
+
class MultipleAssignment
|
8
|
+
|
9
|
+
include Gobstones::EqualByClass
|
10
|
+
|
11
|
+
attr_reader :var_tuple, :expression
|
12
|
+
|
13
|
+
def initialize(var_tuple, expression)
|
14
|
+
@var_tuple, @expression = var_tuple, expression
|
15
|
+
end
|
16
|
+
|
17
|
+
def ==(other)
|
18
|
+
super(other) &&
|
19
|
+
self.var_tuple == other.var_tuple &&
|
20
|
+
self.expression == other.expression
|
21
|
+
end
|
22
|
+
|
23
|
+
def evaluate(context)
|
24
|
+
# TODO implement as many simple assignments?
|
25
|
+
function_call_result = expression.evaluate(context)
|
26
|
+
function_call_result.length.times do |index|
|
27
|
+
context.set var_tuple.variable_at(index), function_call_result[index]
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
@@ -9,7 +9,9 @@ module Gobstones
|
|
9
9
|
class Poner < OneArgExpression
|
10
10
|
|
11
11
|
def evaluate(context)
|
12
|
-
|
12
|
+
with_evaluated_argument_in(context) do |result|
|
13
|
+
context.head.put result
|
14
|
+
end
|
13
15
|
rescue RuntimeError => e
|
14
16
|
raise Gobstones::Runner::GobstonesTypeError, e.message
|
15
17
|
end
|
@@ -17,15 +19,17 @@ module Gobstones
|
|
17
19
|
def undo(context)
|
18
20
|
# TODO maybe the command should use the original context
|
19
21
|
# instead of this one (when it was executed)
|
20
|
-
|
22
|
+
with_evaluated_argument_in(context) do |result|
|
23
|
+
context.head.take_out result
|
24
|
+
end
|
21
25
|
end
|
22
26
|
|
23
27
|
def opposite
|
24
|
-
Sacar.new
|
28
|
+
Sacar.new argument
|
25
29
|
end
|
26
30
|
|
27
31
|
end
|
28
32
|
|
29
33
|
end
|
30
34
|
|
31
|
-
end
|
35
|
+
end
|