add assembler code
This commit is contained in:
32
projects/06/assembler/bin/assembler.ml
Normal file
32
projects/06/assembler/bin/assembler.ml
Normal file
@@ -0,0 +1,32 @@
|
||||
open Core
|
||||
open Hack
|
||||
|
||||
let read_file file =
|
||||
let not_empty str = not (String.is_empty str) in
|
||||
List.filter (In_channel.read_lines file) ~f:(not_empty)
|
||||
;;
|
||||
|
||||
let outfile file = String.concat [Filename.chop_extension file; ".hack"];;
|
||||
|
||||
let gen_hack file =
|
||||
let assembly = read_file file in
|
||||
let binary = Translate.translate assembly in
|
||||
let outchan = Out_channel.create (outfile file) in
|
||||
Out_channel.output_lines outchan binary;
|
||||
Out_channel.close outchan;
|
||||
;;
|
||||
|
||||
let param =
|
||||
let open Command.Param in
|
||||
anon ("filename" %: string)
|
||||
;;
|
||||
|
||||
let command =
|
||||
Command.basic
|
||||
~summary:"Translate <filename>.asm to <filename>.hack"
|
||||
~readme: (fun () -> "Assembler for project 6 of Nand2Tetris")
|
||||
(Command.Param.map param ~f:(fun filename ->
|
||||
(fun () -> gen_hack filename)))
|
||||
;;
|
||||
|
||||
let () = Command_unix.run command;;
|
3
projects/06/assembler/bin/dune
Normal file
3
projects/06/assembler/bin/dune
Normal file
@@ -0,0 +1,3 @@
|
||||
(executable
|
||||
(name assembler)
|
||||
(libraries hack core core_unix.command_unix))
|
Reference in New Issue
Block a user