add assembler code

This commit is contained in:
2022-07-19 00:46:54 +05:30
parent e6df3495f2
commit 8b272aa7d3
12 changed files with 275 additions and 0 deletions

View 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;;

View File

@@ -0,0 +1,3 @@
(executable
(name assembler)
(libraries hack core core_unix.command_unix))