bfrb 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -1,6 +1,8 @@
1
1
  = bfrb
2
2
 
3
- bfrb is a simple {brainfuck}[http://www.muppetlabs.com/~breadbox/bf] interpreter written in Ruby.
3
+ bfrb is a simple {brainfuck}[http://www.muppetlabs.com/~breadbox/bf] interpreter written in Ruby.
4
+ It's not the most robust code, but it does the job, and has handled all the example code I've managed to
5
+ throw at it.
4
6
 
5
7
  == Usage
6
8
 
@@ -20,13 +22,10 @@ Or, you can specify a file with the -f parameter:
20
22
  You can also start an interactive interpreter by running bfrb without any parameters
21
23
 
22
24
  % bfrb
23
-
24
- == Things To Do
25
-
26
- * Compiler
27
25
 
28
26
  == History
29
27
 
28
+ * 0.1.3 - Unmatched brace checks
30
29
  * 0.1.2 - Added unit tests
31
30
  * 0.1.1 - Added REPL.
32
31
  * 0.1.0 - Initial release. Allows running code passed in or from a file.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.2
1
+ 0.1.3
data/bfrb.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{bfrb}
8
- s.version = "0.1.2"
8
+ s.version = "0.1.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Chris ONeal"]
12
- s.date = %q{2011-06-06}
12
+ s.date = %q{2011-06-07}
13
13
  s.default_executable = %q{bfrb}
14
14
  s.description = %q{bfrb is a brainfuck interpreter written in Ruby.}
15
15
  s.email = %q{ctoneal@gmail.com}
data/bin/bfrb CHANGED
@@ -5,7 +5,7 @@ require File.expand_path(File.join(File.dirname(__FILE__), "..", "lib", "bfrb.rb
5
5
  def usage
6
6
  puts "Usage:"
7
7
  puts "Start interactive evaluation: bfrb"
8
- puts "Pass code in as first command line parameter (in quotes): bfrb \",[.,]\""
8
+ puts "Pass code in as a command line parameter (in quotes): bfrb \",[.,]\""
9
9
  puts "Specify a file to read: bfrb -f test.bf"
10
10
  puts "View this message: bfrb -u"
11
11
  end
@@ -22,6 +22,7 @@ else
22
22
  usage
23
23
  when "-f"
24
24
  if ARGV.length > 1
25
+ puts "Attempting to run file #{ARGV[1]}"
25
26
  bfrb.load_file(ARGV[1])
26
27
  else
27
28
  puts "Invalid arguments"
@@ -27,7 +27,30 @@ module BfRb
27
27
  # run a given piece of code
28
28
  def run(code)
29
29
  @code += code
30
- evaluate_code
30
+ if check_for_matching_braces
31
+ evaluate_code
32
+ end
33
+ end
34
+
35
+ # checks the code to be run to make sure all braces match
36
+ def check_for_matching_braces
37
+ brace_counter = 0
38
+ @code.each_char do |char|
39
+ if char == "["
40
+ brace_counter += 1
41
+ elsif char == "]"
42
+ brace_counter -= 1
43
+ if brace_counter < 0
44
+ @output_stream.puts "Unmatched ]"
45
+ return false
46
+ end
47
+ end
48
+ end
49
+ if brace_counter > 0
50
+ @output_stream.puts "Unmatched ["
51
+ return false
52
+ end
53
+ return true
31
54
  end
32
55
 
33
56
  # evaluate each instruction in the current code
@@ -57,6 +80,7 @@ module BfRb
57
80
  when "."
58
81
  @output_stream.print current_memory.chr
59
82
  when ","
83
+ @output_stream.puts
60
84
  input = @input_stream.gets.getbyte(0)
61
85
  @memory.set(@memory_counter, input)
62
86
  when "["
@@ -69,6 +69,26 @@ module BfRb
69
69
  @interpreter.evaluate_instruction("]")
70
70
  assert_not_equal(initial_value, @interpreter.program_counter)
71
71
  end
72
+
73
+ should "inform the user if an unmatched [ exists" do
74
+ output, input = IO.pipe
75
+ @interpreter.output_stream = input
76
+ @interpreter.run("[")
77
+ input.close
78
+ value = output.gets.chomp
79
+ output.close
80
+ assert_equal("Unmatched [", value)
81
+ end
82
+
83
+ should "inform the user if an unmatched ] exists" do
84
+ output, input = IO.pipe
85
+ @interpreter.output_stream = input
86
+ @interpreter.run("]")
87
+ input.close
88
+ value = output.gets.chomp
89
+ output.close
90
+ assert_equal("Unmatched ]", value)
91
+ end
72
92
  end
73
93
 
74
94
  context "." do
@@ -80,7 +100,7 @@ module BfRb
80
100
  input.close
81
101
  value = output.getbyte
82
102
  output.close
83
- assert_equal(value, @interpreter.current_memory)
103
+ assert_equal(@interpreter.current_memory, value)
84
104
  end
85
105
  end
86
106
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bfrb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,12 +9,12 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-06-06 00:00:00.000000000 -05:00
12
+ date: 2011-06-07 00:00:00.000000000 -05:00
13
13
  default_executable: bfrb
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: shoulda
17
- requirement: &9363720 !ruby/object:Gem::Requirement
17
+ requirement: &8122260 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: '0'
23
23
  type: :development
24
24
  prerelease: false
25
- version_requirements: *9363720
25
+ version_requirements: *8122260
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: bundler
28
- requirement: &9362928 !ruby/object:Gem::Requirement
28
+ requirement: &8115360 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ~>
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: 1.0.0
34
34
  type: :development
35
35
  prerelease: false
36
- version_requirements: *9362928
36
+ version_requirements: *8115360
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: jeweler
39
- requirement: &9362280 !ruby/object:Gem::Requirement
39
+ requirement: &8096676 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ~>
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: 1.5.2
45
45
  type: :development
46
46
  prerelease: false
47
- version_requirements: *9362280
47
+ version_requirements: *8096676
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: rcov
50
- requirement: &9361608 !ruby/object:Gem::Requirement
50
+ requirement: &8095140 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ! '>='
@@ -55,7 +55,7 @@ dependencies:
55
55
  version: '0'
56
56
  type: :development
57
57
  prerelease: false
58
- version_requirements: *9361608
58
+ version_requirements: *8095140
59
59
  description: bfrb is a brainfuck interpreter written in Ruby.
60
60
  email: ctoneal@gmail.com
61
61
  executables:
@@ -93,7 +93,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
93
93
  version: '0'
94
94
  segments:
95
95
  - 0
96
- hash: 624886557
96
+ hash: -645724511
97
97
  required_rubygems_version: !ruby/object:Gem::Requirement
98
98
  none: false
99
99
  requirements: