User:JayCampbell/bbf2bf.rb
Jump to navigation
Jump to search
#!/usr/bin/ruby # # bbf2bf.rb # Convert ehird's "brainfuck to B Nomic platonic autoaction english" to brainfuck # Jay Campbell, November 2008 $stdout.sync = $stderr.sync = true if (file = ARGV.pop) == '-v' then verbose = true; file = ARGV.pop else verbose = false end filelines = '' File.open(file) do |f| filelines << f.gets while not f.eof end filelines.gsub!(/[\r\n]+/, ' ') filelines.gsub!(/\./, ".\n") filelines.gsub!(/\- /, '-') filelines.gsub!(/ +/, ' ') filelines.gsub!(/^ /, '') @lines = filelines.split /[\r\n]+/ @instructions = Array.new @lines.each do |line| if line =~ /When a party's step is (\d+),?(.*)/i instruction_step = $1.to_i to_eol = $2 if to_eol =~ /and the Contents of the Current Cell is (0|not 0),?(.*)/i condition = $1.downcase clause = $2 else clause = to_eol end if clause =~ /they must (inc|dec)rease the value of the Interpreter's Pointer attribute by 1 and set their Step to (\d+)/i if $1.downcase == 'inc' @instructions[instruction_step] = '>' else @instructions[instruction_step] = '<' end elsif clause =~ /they must BF- ?(Inc|Dec)rement the Current Cell and set their Step to (\d+)/i if $1.downcase == 'inc' @instructions[instruction_step] = '+' else @instructions[instruction_step] = '-' end elsif clause =~ /they must set their Step to (\d+)/i if condition == 'not 0' @instructions[instruction_step] = ']' @instructions[$1.to_i] = '[' end elsif clause =~ /they must BF- ?(Output|Input) (to )?the Current Cell and set their Step to (\d+)/i if $1.downcase == 'input' @instructions[instruction_step] = ',' else @instructions[instruction_step] = '.' end else end else puts "Malformed line: #{line}" if verbose end end puts @instructions.join
-- User:JayCampbell 2008