gobstones 0.0.1.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|