brainfucktt 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +1 -0
- data/VERSION +1 -1
- data/bin/brainfucktt +15 -0
- data/brainfucktt.gemspec +6 -2
- data/examples/hello_world_with_comments.rb +1 -3
- data/examples/rot13.rb +37 -0
- data/examples/square_numbers.rb +37 -0
- data/examples/system_bell.rb +3 -0
- data/lib/brainfucktt.rb +20 -7
- data/lib/brainfucktt/byte.rb +3 -3
- data/lib/brainfucktt/errors.rb +15 -5
- data/lib/brainfucktt/language/input_byte.rb +1 -1
- data/lib/brainfucktt/language/loop.rb +1 -1
- data/lib/brainfucktt/node.rb +1 -3
- data/lib/brainfucktt/parser.rb +39 -15
- data/lib/brainfucktt/repl.rb +103 -0
- metadata +25 -3
data/Rakefile
CHANGED
@@ -23,6 +23,7 @@ spec = Gem::Specification.new do |s|
|
|
23
23
|
s.add_dependency 'treetop', '~> 1.4'
|
24
24
|
s.add_dependency 'polyglot', '~> 0.3'
|
25
25
|
s.add_dependency 'version', '~> 1.0'
|
26
|
+
s.add_dependency 'slop', '~> 3.3'
|
26
27
|
s.add_development_dependency 'at', '~> 0.1'
|
27
28
|
s.add_development_dependency 'rake', '~> 10.0'
|
28
29
|
s.add_development_dependency 'guard-rspec', '~> 2.1'
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.2
|
data/bin/brainfucktt
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'brainfucktt/repl'
|
4
|
+
require 'slop'
|
5
|
+
|
6
|
+
opts = Slop.parse help: true do
|
7
|
+
banner "brainfucktt [options]\n Start the Brainfuck REPL"
|
8
|
+
end
|
9
|
+
|
10
|
+
if opts.help?
|
11
|
+
puts
|
12
|
+
puts Brainfucktt::REPL.instance.help.lines.collect { |line| " #{line}"}.join
|
13
|
+
else
|
14
|
+
Brainfucktt::REPL.run
|
15
|
+
end
|
data/brainfucktt.gemspec
CHANGED
@@ -2,14 +2,15 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = "brainfucktt"
|
5
|
-
s.version = "0.1.
|
5
|
+
s.version = "0.1.2"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Ryan Scott Lewis"]
|
9
9
|
s.date = "2012-12-06"
|
10
10
|
s.description = "A Brainfuck interpreter built using Treetop."
|
11
11
|
s.email = "ryan@rynet.us"
|
12
|
-
s.
|
12
|
+
s.executables = ["brainfucktt"]
|
13
|
+
s.files = ["Gemfile", "LICENSE", "README.md", "Rakefile", "VERSION", "bin/brainfucktt", "brainfucktt.gemspec", "examples/hello_world.rb", "examples/hello_world_with_comments.rb", "examples/rot13.rb", "examples/square_numbers.rb", "examples/stringio.rb", "examples/system_bell.rb", "lib/brainfucktt.rb", "lib/brainfucktt/byte.rb", "lib/brainfucktt/conversion_helpers.rb", "lib/brainfucktt/data.rb", "lib/brainfucktt/errors.rb", "lib/brainfucktt/language.rb", "lib/brainfucktt/language/decrement_byte.rb", "lib/brainfucktt/language/decrement_pointer.rb", "lib/brainfucktt/language/increment_byte.rb", "lib/brainfucktt/language/increment_pointer.rb", "lib/brainfucktt/language/input_byte.rb", "lib/brainfucktt/language/loop.rb", "lib/brainfucktt/language/output_byte.rb", "lib/brainfucktt/language/tree.rb", "lib/brainfucktt/language_parser.treetop", "lib/brainfucktt/node.rb", "lib/brainfucktt/parser.rb", "lib/brainfucktt/repl.rb"]
|
13
14
|
s.homepage = "http://github.com/RyanScottLewis/brainfucktt"
|
14
15
|
s.require_paths = ["lib"]
|
15
16
|
s.rubygems_version = "1.8.24"
|
@@ -22,6 +23,7 @@ Gem::Specification.new do |s|
|
|
22
23
|
s.add_runtime_dependency(%q<treetop>, ["~> 1.4"])
|
23
24
|
s.add_runtime_dependency(%q<polyglot>, ["~> 0.3"])
|
24
25
|
s.add_runtime_dependency(%q<version>, ["~> 1.0"])
|
26
|
+
s.add_runtime_dependency(%q<slop>, ["~> 3.3"])
|
25
27
|
s.add_development_dependency(%q<at>, ["~> 0.1"])
|
26
28
|
s.add_development_dependency(%q<rake>, ["~> 10.0"])
|
27
29
|
s.add_development_dependency(%q<guard-rspec>, ["~> 2.1"])
|
@@ -34,6 +36,7 @@ Gem::Specification.new do |s|
|
|
34
36
|
s.add_dependency(%q<treetop>, ["~> 1.4"])
|
35
37
|
s.add_dependency(%q<polyglot>, ["~> 0.3"])
|
36
38
|
s.add_dependency(%q<version>, ["~> 1.0"])
|
39
|
+
s.add_dependency(%q<slop>, ["~> 3.3"])
|
37
40
|
s.add_dependency(%q<at>, ["~> 0.1"])
|
38
41
|
s.add_dependency(%q<rake>, ["~> 10.0"])
|
39
42
|
s.add_dependency(%q<guard-rspec>, ["~> 2.1"])
|
@@ -47,6 +50,7 @@ Gem::Specification.new do |s|
|
|
47
50
|
s.add_dependency(%q<treetop>, ["~> 1.4"])
|
48
51
|
s.add_dependency(%q<polyglot>, ["~> 0.3"])
|
49
52
|
s.add_dependency(%q<version>, ["~> 1.0"])
|
53
|
+
s.add_dependency(%q<slop>, ["~> 3.3"])
|
50
54
|
s.add_dependency(%q<at>, ["~> 0.1"])
|
51
55
|
s.add_dependency(%q<rake>, ["~> 10.0"])
|
52
56
|
s.add_dependency(%q<guard-rspec>, ["~> 2.1"])
|
data/examples/rot13.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
require_relative '../lib/brainfucktt'
|
2
|
+
|
3
|
+
Brainfucktt.run( DATA.read )
|
4
|
+
|
5
|
+
__END__
|
6
|
+
WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
|
7
|
+
THIS IS SLOW THIS IS SLOW THIS IS SLOW THIS IS SLOW THIS IS SLOW THIS IS SLOW
|
8
|
+
WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
|
9
|
+
|
10
|
+
-,+[ Read first character and start outer character reading loop
|
11
|
+
-[ Skip forward if character is 0
|
12
|
+
>>++++[>++++++++<-] Set up divisor (32) for division loop
|
13
|
+
(MEMORY LAYOUT: dividend copy remainder divisor quotient zero zero)
|
14
|
+
<+<-[ Set up dividend (x minus 1) and enter division loop
|
15
|
+
>+>+>-[>>>] Increase copy and remainder / reduce divisor / Normal case: skip forward
|
16
|
+
<[[>+<-]>>+>] Special case: move remainder back to divisor and increase quotient
|
17
|
+
<<<<<- Decrement dividend
|
18
|
+
] End division loop
|
19
|
+
]>>>[-]+ End skip loop; zero former divisor and reuse space for a flag
|
20
|
+
>--[-[<->+++[-]]]<[ Zero that flag unless quotient was 2 or 3; zero quotient; check flag
|
21
|
+
++++++++++++<[ If flag then set up divisor (13) for second division loop
|
22
|
+
(MEMORY LAYOUT: zero copy dividend divisor remainder quotient zero zero)
|
23
|
+
>-[>+>>] Reduce divisor; Normal case: increase remainder
|
24
|
+
>[+[<+>-]>+>>] Special case: increase remainder / move it back to divisor / increase quotient
|
25
|
+
<<<<<- Decrease dividend
|
26
|
+
] End division loop
|
27
|
+
>>[<+>-] Add remainder back to divisor to get a useful 13
|
28
|
+
>[ Skip forward if quotient was 0
|
29
|
+
-[ Decrement quotient and skip forward if quotient was 1
|
30
|
+
-<<[-]>> Zero quotient and divisor if quotient was 2
|
31
|
+
]<<[<<->>-]>> Zero divisor and subtract 13 from copy if quotient was 1
|
32
|
+
]<<[<<+>>-] Zero divisor and add 13 to copy if quotient was 0
|
33
|
+
] End outer skip loop (jump to here if ((character minus 1)/32) was not 2 or 3)
|
34
|
+
<[-] Clear remainder from first division if second division was skipped
|
35
|
+
<.[-] Output ROT13ed character from copy and clear it
|
36
|
+
<-,+ Read next character
|
37
|
+
] End character reading loop
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# require 'brainfucktt'
|
2
|
+
$:.unshift(File.expand_path(File.join(__FILE__, '..', '..', 'lib-compiled')))
|
3
|
+
Rubinius::CodeLoader.require_compiled 'brainfucktt'
|
4
|
+
|
5
|
+
Brainfucktt.run( DATA.read )
|
6
|
+
|
7
|
+
=begin Benchmarks
|
8
|
+
|
9
|
+
ruby 1.9.3p327 (2012-11-10 revision 37606) [x86_64-darwin12.2.0]
|
10
|
+
|
11
|
+
real 0m9.986s
|
12
|
+
user 0m9.564s
|
13
|
+
sys 0m0.274s
|
14
|
+
|
15
|
+
rubinius 2.0.0rc1 (1.8.7 release 2012-11-02 JI) [x86_64-apple-darwin12.2.0]
|
16
|
+
|
17
|
+
uncompiled
|
18
|
+
|
19
|
+
real 0m5.828s
|
20
|
+
user 0m6.330s
|
21
|
+
sys 0m0.233s
|
22
|
+
|
23
|
+
jruby 1.7.0 (1.9.3p203) 2012-10-22 ff1ebbe on Java HotSpot(TM) 64-Bit Server VM 1.6.0_37-b06-434-11M3909 [darwin-x86_64]
|
24
|
+
|
25
|
+
real 0m17.404s
|
26
|
+
user 0m26.151s
|
27
|
+
sys 0m1.402s
|
28
|
+
|
29
|
+
|
30
|
+
=end
|
31
|
+
|
32
|
+
|
33
|
+
__END__
|
34
|
+
++++[>+++++<-]>[<+++++>-]+<+[>[>+>+<<-]++>>[<<+>>-]>>>[-]++>[-]+>>>+[[-]++++++>
|
35
|
+
>>]<<<[[<++++++++<++>>-]+<.<[>----<-]<]<<[>>>>>[>>>[-]+++++++++<[>-<-]+++++++++
|
36
|
+
>[-[<->-]+[<<<]]<[>+<-]>]<<-]<<-]
|
37
|
+
|
data/lib/brainfucktt.rb
CHANGED
@@ -1,17 +1,30 @@
|
|
1
|
-
require 'pathname'
|
2
|
-
|
3
|
-
|
4
|
-
__LIB__
|
5
|
-
$:.unshift(__LIB__.to_s) unless $:.include?(__LIB__)
|
1
|
+
# require 'pathname'
|
2
|
+
#
|
3
|
+
# __LIB__ ||= Pathname.new(__FILE__).join('..').expand_path
|
4
|
+
# $:.unshift(__LIB__.to_s) unless $:.include?(__LIB__)
|
6
5
|
|
7
6
|
require 'brainfucktt/parser'
|
8
7
|
|
9
8
|
# A Brainfuck interpreter built in Ruby using Treetop.
|
10
9
|
module Brainfucktt
|
11
10
|
class << self
|
12
|
-
extend Forwardable
|
13
11
|
|
14
|
-
|
12
|
+
# Parse the given Brainfuck code.
|
13
|
+
#
|
14
|
+
# @param [String, #to_s] code
|
15
|
+
# @raise [Brainfucktt::ParserError]
|
16
|
+
# @return [Brainfucktt::Parser]
|
17
|
+
def parse(code)
|
18
|
+
Parser.parse(code)
|
19
|
+
end
|
20
|
+
|
21
|
+
# Parse and run the given Brainfuck code.
|
22
|
+
#
|
23
|
+
# @param [String, #to_s] code
|
24
|
+
# @param [Hash, #to_hash, #to_h] options
|
25
|
+
def run(code=nil, options={})
|
26
|
+
Parser.run(code, options)
|
27
|
+
end
|
15
28
|
|
16
29
|
end
|
17
30
|
end
|
data/lib/brainfucktt/byte.rb
CHANGED
@@ -44,7 +44,7 @@ module Brainfucktt
|
|
44
44
|
#
|
45
45
|
# @return [true, false]
|
46
46
|
def ==(other)
|
47
|
-
self == other
|
47
|
+
self.object_id == other.object_id
|
48
48
|
end
|
49
49
|
|
50
50
|
# Check to see if the given object instance as an Integer is the same as the value of
|
@@ -74,7 +74,7 @@ module Brainfucktt
|
|
74
74
|
#
|
75
75
|
# @return [String]
|
76
76
|
def to_binary
|
77
|
-
@value
|
77
|
+
"%08b" % @value
|
78
78
|
end
|
79
79
|
|
80
80
|
# Return the Byte as an ASCII character.
|
@@ -89,7 +89,7 @@ module Brainfucktt
|
|
89
89
|
#
|
90
90
|
# @return [String]
|
91
91
|
def to_hex
|
92
|
-
@value
|
92
|
+
'%02x' % @value
|
93
93
|
end
|
94
94
|
|
95
95
|
# Return the Byte as a binary string.
|
data/lib/brainfucktt/errors.rb
CHANGED
@@ -39,11 +39,6 @@ module Brainfucktt
|
|
39
39
|
|
40
40
|
# Raised when the code being parsed has a syntax error.
|
41
41
|
class ParserError < Error
|
42
|
-
extend Forwardable
|
43
|
-
|
44
|
-
def_delegator :@language_parser, :failure_reason, :reason
|
45
|
-
def_delegator :@language_parser, :failure_line, :line
|
46
|
-
def_delegator :@language_parser, :failure_column, :column
|
47
42
|
|
48
43
|
# @param [Brainfucktt::LanguageParser] language_parser
|
49
44
|
def initialize(language_parser)
|
@@ -57,6 +52,21 @@ module Brainfucktt
|
|
57
52
|
"Error at column #{column}, line #{line} - '#{reason}'"
|
58
53
|
end
|
59
54
|
|
55
|
+
# @return [String]
|
56
|
+
def reason
|
57
|
+
@language_parser.failure_reason
|
58
|
+
end
|
59
|
+
|
60
|
+
# @return [String]
|
61
|
+
def line
|
62
|
+
@language_parser.failure_line
|
63
|
+
end
|
64
|
+
|
65
|
+
# @return [String]
|
66
|
+
def column
|
67
|
+
@language_parser.failure_column
|
68
|
+
end
|
69
|
+
|
60
70
|
end
|
61
71
|
|
62
72
|
end
|
data/lib/brainfucktt/node.rb
CHANGED
@@ -5,13 +5,11 @@ module Brainfucktt
|
|
5
5
|
# The base class for Brainfucktt syntax nodes in the AST
|
6
6
|
class Node < Treetop::Runtime::SyntaxNode
|
7
7
|
|
8
|
-
alias_method :elements_with_treetop, :elements
|
9
|
-
|
10
8
|
# The children of this Node instance.
|
11
9
|
#
|
12
10
|
# @return [<Brainfucktt::Node>]
|
13
11
|
def elements
|
14
|
-
|
12
|
+
super.find_all { |node| node.is_a?(Brainfucktt::Node) } rescue []
|
15
13
|
end
|
16
14
|
|
17
15
|
# Return the text value of this Node instance.
|
data/lib/brainfucktt/parser.rb
CHANGED
@@ -16,9 +16,16 @@ module Brainfucktt
|
|
16
16
|
|
17
17
|
# Get a new or the cached instance of this class.
|
18
18
|
#
|
19
|
-
# @return [Brainfucktt::
|
19
|
+
# @return [Brainfucktt::Parser]
|
20
20
|
def instance
|
21
|
-
@instance ||=
|
21
|
+
@instance ||= new
|
22
|
+
end
|
23
|
+
|
24
|
+
# Get a new or the cached instance of this class.
|
25
|
+
#
|
26
|
+
# @return [Brainfucktt::Parser]
|
27
|
+
def language_parser
|
28
|
+
@language_parser ||= LanguageParser.new
|
22
29
|
end
|
23
30
|
|
24
31
|
# Parse the given Brainfuck code.
|
@@ -27,38 +34,55 @@ module Brainfucktt
|
|
27
34
|
# @raise [Brainfucktt::ParserError]
|
28
35
|
# @return [Brainfucktt::Parser]
|
29
36
|
def parse(code)
|
30
|
-
|
31
|
-
raise ParserError, instance unless tree
|
32
|
-
|
33
|
-
new(tree)
|
37
|
+
instance.parse(code)
|
34
38
|
end
|
35
39
|
|
36
40
|
# Parse and run the given Brainfuck code.
|
37
41
|
#
|
38
42
|
# @param [String, #to_s] code
|
39
|
-
|
40
|
-
|
43
|
+
# @param [Hash, #to_hash, #to_h] options
|
44
|
+
def run(code=nil, options={})
|
45
|
+
instance.run(code, options)
|
41
46
|
end
|
47
|
+
|
42
48
|
end
|
43
49
|
|
44
50
|
attr_reader :data, :tree, :input, :output
|
45
51
|
attr_accessor :pointer
|
46
52
|
|
47
|
-
def initialize(
|
48
|
-
|
49
|
-
end
|
53
|
+
def initialize(options={})
|
54
|
+
options = { :input => STDIN, :output => STDOUT }.merge( convert_to_options(options) )
|
50
55
|
|
56
|
+
@input, @output = options.values_at(:input, :output)
|
57
|
+
@data, @pointer, @tree = Data.new, 0, nil
|
58
|
+
end
|
59
|
+
|
51
60
|
# Run the parsed Brainfuck code.
|
52
61
|
#
|
53
|
-
# @
|
62
|
+
# @param [String, #to_s] code The code to parse before running.
|
54
63
|
# @param [Hash, #to_hash, #to_h] options
|
55
|
-
|
56
|
-
|
57
|
-
|
64
|
+
# @raise [Brainfucktt::InvalidOptionsError] When the given offset cannot be converted into an Integer.
|
65
|
+
def run(code=nil, options={})
|
66
|
+
options = { :input => @input, :output => @output }.merge( convert_to_options(options) )
|
58
67
|
@input, @output = options.values_at(:input, :output)
|
68
|
+
|
69
|
+
parse(code) unless code.nil?
|
70
|
+
|
59
71
|
@tree.run(self)
|
60
72
|
end
|
61
73
|
|
74
|
+
# Parse the given Brainfuck code.
|
75
|
+
#
|
76
|
+
# @param [String, #to_s] code
|
77
|
+
# @raise [Brainfucktt::ParserError]
|
78
|
+
# @return [Brainfucktt::Parser]
|
79
|
+
def parse(code)
|
80
|
+
@tree = self.class.language_parser.parse(code)
|
81
|
+
raise ParserError, self unless @tree
|
82
|
+
|
83
|
+
self
|
84
|
+
end
|
85
|
+
|
62
86
|
# Returns the Byte instance within the @data collection at pointer.
|
63
87
|
#
|
64
88
|
# @return [Brainfucktt::Byte]
|
@@ -0,0 +1,103 @@
|
|
1
|
+
require 'brainfucktt/parser'
|
2
|
+
|
3
|
+
module Brainfucktt
|
4
|
+
|
5
|
+
class REPL
|
6
|
+
|
7
|
+
class << self
|
8
|
+
|
9
|
+
def instance
|
10
|
+
@instance ||= new
|
11
|
+
end
|
12
|
+
|
13
|
+
def run
|
14
|
+
puts instance.help
|
15
|
+
instance.loop
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
def initialize
|
21
|
+
trap('INT') { self.exit }
|
22
|
+
@input, @output = nil
|
23
|
+
@parser = Brainfucktt::Parser.new
|
24
|
+
end
|
25
|
+
|
26
|
+
def read
|
27
|
+
Kernel.print '> '
|
28
|
+
@input = gets
|
29
|
+
end
|
30
|
+
|
31
|
+
def eval
|
32
|
+
case @input.strip
|
33
|
+
when 'help' then puts help
|
34
|
+
when '?' then puts help
|
35
|
+
when 'quit' then self.exit
|
36
|
+
when 'exit' then self.exit
|
37
|
+
when 'hex' then puts hex
|
38
|
+
when 'ascii' then puts ascii
|
39
|
+
when 'binary' then puts binary
|
40
|
+
when 'decimal' then puts decimal
|
41
|
+
else; @parser.run(@input)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def print
|
46
|
+
puts @parser.data.bytes.collect { |byte|
|
47
|
+
byte_str = ''
|
48
|
+
byte_str << (@parser.byte == byte ? '>' : '|')
|
49
|
+
byte_str << byte.to_hex
|
50
|
+
byte_str << (@parser.byte == byte ? '<' : '|')
|
51
|
+
|
52
|
+
byte_str
|
53
|
+
}.join(' ')
|
54
|
+
|
55
|
+
@input = nil
|
56
|
+
end
|
57
|
+
|
58
|
+
def loop
|
59
|
+
Kernel.loop do
|
60
|
+
# begin
|
61
|
+
read
|
62
|
+
eval
|
63
|
+
print
|
64
|
+
# rescue
|
65
|
+
# # Do squat
|
66
|
+
# end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def help
|
71
|
+
result = ''
|
72
|
+
result << "Type 'help' or '?' for help.\n"
|
73
|
+
result << "Type 'hex' to output the data buffer in hexadecimal.\n"
|
74
|
+
result << "Type 'ascii' to output the data buffer in ASCII.\n"
|
75
|
+
result << "Type 'binary' to output the data buffer in binary.\n"
|
76
|
+
result << "Type 'decimal' to output the data buffer in decimal.\n"
|
77
|
+
result << "Type 'exit' or 'quit' or press CTRL-C to exit.\n\n"
|
78
|
+
end
|
79
|
+
|
80
|
+
def exit
|
81
|
+
puts
|
82
|
+
Kernel.exit
|
83
|
+
end
|
84
|
+
|
85
|
+
def hex
|
86
|
+
@parser.data.bytes.collect(&:to_hex).join(' ')
|
87
|
+
end
|
88
|
+
|
89
|
+
def ascii
|
90
|
+
@parser.data.bytes.collect(&:to_ascii).join
|
91
|
+
end
|
92
|
+
|
93
|
+
def binary
|
94
|
+
@parser.data.bytes.collect(&:to_binary).join(' ')
|
95
|
+
end
|
96
|
+
|
97
|
+
def decimal
|
98
|
+
@parser.data.bytes.collect(&:to_i).join(' ')
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: brainfucktt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -59,6 +59,22 @@ dependencies:
|
|
59
59
|
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '1.0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: slop
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ~>
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '3.3'
|
70
|
+
type: :runtime
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '3.3'
|
62
78
|
- !ruby/object:Gem::Dependency
|
63
79
|
name: at
|
64
80
|
requirement: !ruby/object:Gem::Requirement
|
@@ -189,7 +205,8 @@ dependencies:
|
|
189
205
|
version: '0.7'
|
190
206
|
description: A Brainfuck interpreter built using Treetop.
|
191
207
|
email: ryan@rynet.us
|
192
|
-
executables:
|
208
|
+
executables:
|
209
|
+
- brainfucktt
|
193
210
|
extensions: []
|
194
211
|
extra_rdoc_files: []
|
195
212
|
files:
|
@@ -198,10 +215,14 @@ files:
|
|
198
215
|
- README.md
|
199
216
|
- Rakefile
|
200
217
|
- VERSION
|
218
|
+
- bin/brainfucktt
|
201
219
|
- brainfucktt.gemspec
|
202
220
|
- examples/hello_world.rb
|
203
221
|
- examples/hello_world_with_comments.rb
|
222
|
+
- examples/rot13.rb
|
223
|
+
- examples/square_numbers.rb
|
204
224
|
- examples/stringio.rb
|
225
|
+
- examples/system_bell.rb
|
205
226
|
- lib/brainfucktt.rb
|
206
227
|
- lib/brainfucktt/byte.rb
|
207
228
|
- lib/brainfucktt/conversion_helpers.rb
|
@@ -219,6 +240,7 @@ files:
|
|
219
240
|
- lib/brainfucktt/language_parser.treetop
|
220
241
|
- lib/brainfucktt/node.rb
|
221
242
|
- lib/brainfucktt/parser.rb
|
243
|
+
- lib/brainfucktt/repl.rb
|
222
244
|
homepage: http://github.com/RyanScottLewis/brainfucktt
|
223
245
|
licenses: []
|
224
246
|
post_install_message:
|
@@ -233,7 +255,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
233
255
|
version: '0'
|
234
256
|
segments:
|
235
257
|
- 0
|
236
|
-
hash: -
|
258
|
+
hash: -1731370008399117762
|
237
259
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
238
260
|
none: false
|
239
261
|
requirements:
|