Module: Lolcode::Translator

Included in:
VM
Defined in:
lib/lolcode/translator.rb

Instance Method Summary collapse

Instance Method Details

#translate(line) ⇒ Object

Translate to Ruby



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
# File 'lib/lolcode/translator.rb', line 5

def translate(line)
  line = line.dup

  line.gsub!(/\bBTW\b/, ' # ')         # BTW comments
  # line.gsub!(/\bOBTW\b/, '\n=begin\n') # multiline comments begin
  # multiline comments begin
  line.gsub!(/\bOBTW\b/) do |s|
    self.block_level += 1
    "\n=begin\n"
  end
  # multiline comments end
  line.gsub!(/\bTLDR\b/) do |s|
    self.block_level -= 1
    "\n=end\n"
  end

  line.gsub!(/\bVISIBLE\s+([\"\w]+)/) do |s|
    m = /\bVISIBLE\s+([\"\w]+)/.match s
    case type_of(m[1])
    when :symbol
      "puts @#{m[1]}"
    else
      "puts #{m[1]}"
    end
  end
  line.gsub!(/\bINVISIBLE\s+([\"\w]+)/) do |s|
    m = /\bINVISIBLE\s+([\"\w]+)/.match s
    case type_of(m[1])
    when :symbol
      "warn @#{m[1]}"
    else
      "warn #{m[1]}"
    end
  end

  # Varible assignment
  line.gsub!(/\bI\s+HAS\s+A\s+(\w+)\s+ITZ\s+([\"\w]+)/) do |s|
    m = /\bI\s+HAS\s+A\s+(\w+)\s+ITZ\s+([\"\w]+)/.match s
    case type_of(m[2])
    when :symbol
      "@#{m[1]} = @#{m[2]}"
    else
      "@#{m[1]} = #{m[2]}"
    end
  end
  line.gsub!(/\bI\s+HAS\s+A\s+(\w+)/, '@\1 = nil')

  # TODO: Library
  line.gsub!(/\bCAN\s+HAS\s+(\w+)/, '# require \'\1\'')

  return line
end