bfrb 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -11,6 +11,7 @@ To install bfrb:
11
11
  % gem install bfrb
12
12
 
13
13
  Once bfrb is installed, you can use it to interpret your brainfuck code.
14
+
14
15
  First, you can pass brainfuck code directly into it, as long as it is wrapped in quotes.
15
16
 
16
17
  % bfrb ",[.,]"
@@ -22,9 +23,18 @@ Or, you can specify a file with the -f parameter:
22
23
  You can also start an interactive interpreter by running bfrb without any parameters
23
24
 
24
25
  % bfrb
26
+
27
+ Just in case you feel the need to use another language internally in a Ruby program, I guess you can:
28
+
29
+ require 'rubygems'
30
+ require 'bfrb'
31
+
32
+ bf = BfRb::Base.new
33
+ bf.run ",[.,]"
25
34
 
26
35
  == History
27
36
 
37
+ * 0.1.4 - Added a little more documentation, efficiency fixes and Ctrl-X to exit a program
28
38
  * 0.1.3 - Unmatched brace checks
29
39
  * 0.1.2 - Added unit tests
30
40
  * 0.1.1 - Added REPL.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.3
1
+ 0.1.4
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.3"
8
+ s.version = "0.1.4"
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-07}
12
+ s.date = %q{2011-06-09}
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}
@@ -26,9 +26,11 @@ module BfRb
26
26
 
27
27
  # run a given piece of code
28
28
  def run(code)
29
- @code += code
29
+ @code += code.delete "^[]<>.,+-"
30
30
  if check_for_matching_braces
31
- evaluate_code
31
+ catch :quit do
32
+ evaluate_code
33
+ end
32
34
  end
33
35
  end
34
36
 
@@ -63,26 +65,36 @@ module BfRb
63
65
  # evaluate an individual instruction
64
66
  def evaluate_instruction(instruction)
65
67
  case instruction
68
+ # shift right in memory
66
69
  when ">"
67
70
  @memory_counter += 1
71
+ # shift left in memory, unless we're at the beginning
68
72
  when "<"
69
73
  if @memory_counter > 1
70
74
  @memory_counter -= 1
71
75
  else
72
76
  @memory_counter = 0
73
77
  end
78
+ # increment value in memory
74
79
  when "+"
75
80
  @memory.set(@memory_counter, current_memory + 1)
81
+ # decrement value in memory
76
82
  when "-"
77
83
  unless current_memory == 0
78
84
  @memory.set(@memory_counter, current_memory - 1)
79
85
  end
86
+ # print value in memory
80
87
  when "."
81
88
  @output_stream.print current_memory.chr
89
+ # input a character into memory
82
90
  when ","
83
91
  @output_stream.puts
84
92
  input = @input_stream.gets.getbyte(0)
93
+ if input == 24
94
+ throw :quit
95
+ end
85
96
  @memory.set(@memory_counter, input)
97
+ # jump to the closing bracket if memory is 0
86
98
  when "["
87
99
  if current_memory != 0
88
100
  @loop_stack.push @program_counter
@@ -97,6 +109,7 @@ module BfRb
97
109
  end
98
110
  end
99
111
  end
112
+ # return to the opening bracket if memory is not zero
100
113
  when "]"
101
114
  matching_bracket = @loop_stack.pop
102
115
  if current_memory != 0
data/lib/bfrb.rb CHANGED
@@ -22,15 +22,15 @@ module BfRb
22
22
 
23
23
  # interactive read-evaluate-print loop
24
24
  def repl
25
- puts "'exit' leaves the REPL"
25
+ puts "'exit' or Ctrl-X leaves the REPL"
26
26
  puts "'mem' displays the value in the current cell of memory"
27
27
  puts "'clear' clears everything from memory"
28
28
  while true
29
29
  puts ""
30
- print "bf> "
30
+ print "bfrb> "
31
31
  input = gets.chomp
32
32
  case input
33
- when "exit"
33
+ when "exit", 24.chr
34
34
  puts "Exiting"
35
35
  break
36
36
  when "mem"
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.3
4
+ version: 0.1.4
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-07 00:00:00.000000000 -05:00
12
+ date: 2011-06-09 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: &8122260 !ruby/object:Gem::Requirement
17
+ requirement: &8122320 !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: *8122260
25
+ version_requirements: *8122320
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: bundler
28
- requirement: &8115360 !ruby/object:Gem::Requirement
28
+ requirement: &8115540 !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: *8115360
36
+ version_requirements: *8115540
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: jeweler
39
- requirement: &8096676 !ruby/object:Gem::Requirement
39
+ requirement: &8096772 !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: *8096676
47
+ version_requirements: *8096772
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: rcov
50
- requirement: &8095140 !ruby/object:Gem::Requirement
50
+ requirement: &8095248 !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: *8095140
58
+ version_requirements: *8095248
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: -645724511
96
+ hash: 950763631
97
97
  required_rubygems_version: !ruby/object:Gem::Requirement
98
98
  none: false
99
99
  requirements: