Guest User

Untitled

a guest
May 20th, 2018
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.15 KB | None | 0 0
  1. class Translator
  2.  
  3. def self.translate!(filenames)
  4. writer = CodeWriter.new('hello codewriter I hope you are feeling fine')
  5. filenames.each do |vm_filename|
  6. puts "Translating #{vm_filename} ..."
  7. parser = Parser.new(vm_filename)
  8. while parser.has_more_commands? do
  9. writer.begin!(asm_file_name_for(vm_filename))
  10. parser.advance
  11. if parser.command_type == :C_ARITHMETIC
  12. puts "#{parser.index}: #{parser.command.collect{|s| s + ' '}} C_ARITHMETIC"
  13. writer.write_arithmetic(parser.arg1)
  14. elsif parser.command_type == :C_PUSH || parser.command_type == :C_POP
  15. puts "#{parser.index}: #{parser.command.collect{|s| s + ' '}} is C_PUSH or C_POP"
  16. writer.write_push_pop(parser.command_type, parser.arg1, parser.arg2)
  17. else
  18. puts "uhoh, outside of my ability! (for now)"
  19. end
  20. end
  21. end
  22. writer.close
  23. end
  24.  
  25. def self.asm_file_name_for(vm_filename)
  26. raise TranslatorException.new('Bad VM filename') unless vm_filename.include?('.vm')
  27. basename = File.basename(vm_filename, '.vm')
  28. path = File.split(vm_filename)[0]
  29. "#{path}/#{basename}.asm"
  30. end
  31.  
  32. end
Add Comment
Please, Sign In to add comment