class Refill::Translator

Public Class Methods

new(output: @output = output) click to toggle source
# File lib/refill/translator.rb, line 3
def initialize output: 
  @output = output
end

Public Instance Methods

translate(node) click to toggle source
# File lib/refill/translator.rb, line 7
def translate node
  # TODO logger
  puts "translating node #{node.class}"

  case node
  when AST::Expressions
    translate_and_write_expressions node
  else
    raise 'UnknownNode'
  end
end

Private Instance Methods

translate_and_write_expressions(expressions) click to toggle source
# File lib/refill/translator.rb, line 21
def translate_and_write_expressions expressions
  expressions.expressions.each do |e|
    case e
    when AST::Expressions
      translate_and_write_expressions e
    when AST::Expression
      @output.write "#{translate_expression e}\n"
    else
      raise 'UnknownExpressions'
    end
  end
end
translate_expression(expression) click to toggle source
# File lib/refill/translator.rb, line 34
def translate_expression expression
  case expression
  when AST::Addition
    return "( #{translate_expression expression.left} + #{translate_expression expression.right} )"
  when AST::Integer
    return "( #{expression.value.to_s} )"
  when AST::Literal
    return "( \"#{expression.value.to_s}\" )"
  else
    raise 'UnknownExpression'
  end
end