-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmain.rb
63 lines (53 loc) · 1.11 KB
/
main.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#!/usr/bin/env ruby
require_relative 'lib/tokenizer'
require_relative 'lib/translator'
# class of Compiler
class Compiler
attr_reader :result
def initialize
@result = ''
@lines = []
@tokens = []
end
def compile(lines)
@result = translate tokenize parse lines
end
def parse(lines)
(lines.map do |line|
cmd = line.split(';')[0]
unless cmd.nil?
cmd.chomp!
cmd.rstrip!
end
cmd.reverse.strip.reverse
end).delete_if { |line| line.nil? || line.empty? }
end
def tokenize(lines)
Tokenizer.tokenize(lines)
end
def translate(tokens)
Translator.translate(tokens)
end
end
if $PROGRAM_NAME == __FILE__
unless ARGV.empty?
lines = []
File.open(ARGV[0]).each do |line|
lines << line
end
c = Compiler.new
# puts c.compile(lines)
# puts c.parse(lines)
c.compile(lines)
puts c.result
if ARGV[1].nil?
File.open(ARGV[0].split('.')[0] + '.bf', 'w+') do |file|
file.puts c.result
end
else
File.open(ARGV[1], 'w+') do |file|
file.puts c.result
end
end
end
end