Class: Rus3::Evaluator::Translator

Inherits:
Object
  • Object
show all
Defined in:
lib/rus3/evaluator/translator.rb

Overview

A class to translate an i-exp to r-exp.

Constant Summary collapse

TRANSLATOR_VERSION =
"0.1.0"

Instance Method Summary collapse

Constructor Details

#initializeTranslator

Returns a new instance of Translator.



16
17
18
19
# File 'lib/rus3/evaluator/translator.rb', line 16

def initialize
  @verbose = false
  @procedure_map = {}
end

Instance Method Details

#add_procedure_map(map) ⇒ Object



25
26
27
# File 'lib/rus3/evaluator/translator.rb', line 25

def add_procedure_map(map)
  @procedure_map.merge!(map)
end

#translate(ast_node) ⇒ Object

Translates an AST node into Ruby code.



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/rus3/evaluator/translator.rb', line 31

def translate(ast_node)
  return nil if ast_node.nil?

  if @verbose
    print "- translater ==> "
    pp ast_node
  end

  type = ast_node.type.to_s.delete_prefix("ast_")
  method_name = "translate_#{type}".intern
  begin
    m = method(method_name)
  rescue
    raise SchemeSyntaxError.new([ast_node.type, ast_node.to_s])
  end
  m.call(ast_node)
end

#verbose=(verbose) ⇒ Object



21
22
23
# File 'lib/rus3/evaluator/translator.rb', line 21

def verbose=(verbose)
  @verbose = verbose
end

#versionObject



12
13
14
# File 'lib/rus3/evaluator/translator.rb', line 12

def version
  "(scheme-ruby-translator :version #{TRANSLATOR_VERSION})"
end