KarleFKremen

Brainfuck to Ruby/C++ CLI

Aug 10th, 2016
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 1.79 KB | None | 0 0
  1. require 'optparse'
  2. require 'colorize'
  3.  
  4. opt = {}
  5. OptionParser.new do |opts|
  6.   opts.banner = "Usage: example.rb [options]"
  7.  
  8.   opts.on("-c", "--compile FILE", "Specify input file [else from STDIN]") do |v|
  9.     opt[:input] = v
  10.   end
  11.   opts.on("-o", "--output FILE", "Specify output file [else from STDOUT]") do |v|
  12.     opt[:output] = v
  13.   end
  14.   opts.on("-t", "--type TYPE", "Specify output file type [ruby, cxx supported]") do |v|
  15.     opt[:type] = v
  16.   end
  17.   opts.on("-?", "--help", "This help") do
  18.     puts opts
  19.     exit 0
  20.   end
  21. end.parse!
  22.  
  23. code = nil
  24.  
  25. if opt[:input]
  26.     code = IO.read opt[:input]
  27. else
  28.     code = $stdin.read
  29. end
  30.  
  31. unless opt[:type] == 'cxx' or opt[:type] == 'ruby'
  32.     puts "#" + "HALT Wrong type, using Ruby".colorize(:background => :red).colorize(:white)
  33.     opt[:type] = 'ruby'
  34. end
  35.  
  36. rubyc = "\tbuf = [ ]\n\ti = 0\n\tbuf[0] = 0; "
  37. cppc = "#include <bits/stdc++.h>\nusing namespace std; int main() { vector < long long > buf; buf.resize(1000000); size_t i = 0; char timex; "
  38.  
  39. code.split('').each { |ch|
  40.     if ch == '>'
  41.         rubyc += "i += 1; unless buf[i]; buf[i] = 0; end; "
  42.         cppc += "i++; "
  43.     end
  44.     if ch == '<'
  45.         rubyc += "i -= 1; unless buf[i]; buf[i] = 0; end; "
  46.         cppc += "i--; "
  47.     end
  48.     if ch == '+'
  49.         rubyc += "buf[i] += 1; "
  50.         cppc += "buf[i]++; "
  51.     end
  52.     if ch == '-'
  53.         rubyc += "buf[i] -= 1; "
  54.         cppc += "buf[i]--; "
  55.     end
  56.     if ch == '.'
  57.         rubyc += "print buf[i].chr; "
  58.         cppc += "cout << (char)buf[i]; "
  59.     end
  60.     if ch == ','
  61.         rubyc += "buf[i] = getc ; "
  62.         cppc += "cin >> timex; buf[i] = timex; "
  63.     end
  64.     if ch == '['
  65.         rubyc += "while buf[i] != 0; "
  66.         cppc += "while(buf[i]) { "
  67.     end
  68.     if ch == ']'
  69.         rubyc += "end; "
  70.         cppc += "} "
  71.     end
  72. }
  73.  
  74. cppc += "}"
  75. rescode = (opt[:type] == 'cxx' ? cppc : rubyc)
  76.  
  77. if opt[:output]
  78.     IO.write opt[:output], rescode
  79. else
  80.     puts rescode
  81. end
Advertisement
Add Comment
Please, Sign In to add comment