Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env ruby
- class DankCode
- def initialize(path)
- @code = File.readlines(path).map(&:chomp)
- end
- def parse_expr(expr)
- expr.gsub(/\bisn't\b/, "!=").gsub(/\bis\b/, "==").gsub(/:(\S+)/) { %Q["#{$1}"] }
- end
- def transcode_line(line)
- indent = line[/\A\t*/]
- line = line.sub(/\A\t*/, "")
- return nil unless line =~ /\S+/
- ruby = case line
- when /\A>tfw (\w+)\z/
- "return #{$1}"
- when /\A>mfw (\w+)\z/
- "puts #{$1}"
- when /\A>implying (.*)\z/
- "if #{parse_expr($1)}"
- when /\A>be (\w+) like (.*)\z/
- "#{$1} = #{parse_expr($2)}"
- when ">done implying"
- "end"
- when ">or not"
- "else"
- when /\A>wew (\w+\(.*?\))\z/
- "wew = #{$1}"
- when />wewlad (.*)/
- "def #{$1}"
- when ">be me"
- "def main"
- when ">thank mr skeltal"
- "exit"
- else
- warn "Can't parse #{line}"
- ""
- end
- [indent.gsub("\t", " "), ruby]
- end
- def run!
- ruby_lines = @code.map do |line| transcode_line(line) end.compact
- ruby = []
- ruby_lines.each do |i,c|
- ruby << "end" if c =~ /\Adef/
- ruby << "#{i}#{c}"
- end
- ruby << "end"
- ruby << "main"
- puts ruby[1..-1]
- end
- end
- path = ARGV[0]
- DankCode.new(path).run!
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement