open Bfcomp;; let get_filename file = let rec parse i = if i >= 0 then if file.[i] = '.' then String.sub file 0 i else parse (i - 1) else file in parse ((String.length file) - 1);; let get_extension file = let len = String.length file in let rec parse i = if i >= 0 then if file.[i] = '.' then String.sub file i (len - i) else parse (i - 1) else "" in parse (len - 1);; let parse_args () = match Array.length (Sys.argv) with 1 -> failwith "no input file" |2 -> let bf_file = Sys.argv.(1) in (bf_file, ((get_filename bf_file) ^ ".asm"), ((get_filename bf_file) ^ ".com")) |3 -> let bf_file = Sys.argv.(1) in (bf_file, ((get_filename bf_file) ^ ".asm"), Sys.argv.(2)) |_ -> failwith "too many parameters; syntax: []";; let (bf_file, asm_file, com_file) = parse_args ();; let rec read_input f = try let u = (input_line f) ^ "\n" in u ^ (read_input f) with End_of_file -> "";; let main () = let in_file = open_in bf_file in let input = read_input in_file in close_in in_file; print_string "brainf*ck version 1.0a (c) lcme.ucoz.ru\n\n"; flush stdout; let out_file = open_out asm_file in output_string out_file (compile input); close_out out_file; Sys.command ("fasm " ^ asm_file ^ " " ^ com_file);; main ();;