⭐ gleaming brainfuck

add cli interface

Implements #1

olexsmir.xyz 8fe0c0c2 a3c25d08

verified
+4 -2
README.md
··· 22 22 ``` 23 23 24 24 ### As CLI tool 25 - 26 - TODO: yet to be implemented 25 + ```bash 26 + gleam run -m run ./examples/helloworld.bf 27 + #> Hello World! 28 + ```
+2
gleam.toml
··· 7 7 [dependencies] 8 8 gleam_stdlib = ">= 0.44.0 and < 2.0.0" 9 9 splitter = ">= 1.1.0 and < 2.0.0" 10 + argv = ">= 1.0.2 and < 2.0.0" 11 + simplifile = ">= 2.3.0 and < 3.0.0" 10 12 11 13 [dev-dependencies] 12 14 gleeunit = ">= 1.0.0 and < 2.0.0"
+5
manifest.toml
··· 2 2 # You typically do not need to edit this file 3 3 4 4 packages = [ 5 + { name = "argv", version = "1.0.2", build_tools = ["gleam"], requirements = [], otp_app = "argv", source = "hex", outer_checksum = "BA1FF0929525DEBA1CE67256E5ADF77A7CDDFE729E3E3F57A5BDCAA031DED09D" }, 6 + { name = "filepath", version = "1.1.2", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "filepath", source = "hex", outer_checksum = "B06A9AF0BF10E51401D64B98E4B627F1D2E48C154967DA7AF4D0914780A6D40A" }, 5 7 { name = "gleam_stdlib", version = "0.65.0", build_tools = ["gleam"], requirements = [], otp_app = "gleam_stdlib", source = "hex", outer_checksum = "7C69C71D8C493AE11A5184828A77110EB05A7786EBF8B25B36A72F879C3EE107" }, 6 8 { name = "gleeunit", version = "1.6.1", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleeunit", source = "hex", outer_checksum = "FDC68A8C492B1E9B429249062CD9BAC9B5538C6FBF584817205D0998C42E1DAC" }, 9 + { name = "simplifile", version = "2.3.0", build_tools = ["gleam"], requirements = ["filepath", "gleam_stdlib"], otp_app = "simplifile", source = "hex", outer_checksum = "0A868DAC6063D9E983477981839810DC2E553285AB4588B87E3E9C96A7FB4CB4" }, 7 10 { name = "splitter", version = "1.1.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "splitter", source = "hex", outer_checksum = "05564A381580395DCDEFF4F88A64B021E8DAFA6540AE99B4623962F52976AA9D" }, 8 11 ] 9 12 10 13 [requirements] 14 + argv = { version = ">= 1.0.2 and < 2.0.0" } 11 15 gleam_stdlib = { version = ">= 0.44.0 and < 2.0.0" } 12 16 gleeunit = { version = ">= 1.0.0 and < 2.0.0" } 17 + simplifile = { version = ">= 2.3.0 and < 3.0.0" } 13 18 splitter = { version = ">= 1.1.0 and < 2.0.0" }
+12 -7
src/run.gleam
··· 1 + import argv 1 2 import gbf 2 3 import gleam/io 4 + import simplifile 3 5 4 6 pub fn main() -> Nil { 5 - let input = 6 - "++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++." 7 + case argv.load().arguments { 8 + [filename] -> { 9 + let assert Ok(source) = simplifile.read(filename) 10 + let assert Ok(virtual_machine) = gbf.run(source) 7 11 8 - let assert Ok(virtual_machine) = gbf.run(input) 9 - 10 - virtual_machine 11 - |> gbf.output 12 - |> io.println 12 + virtual_machine 13 + |> gbf.output 14 + |> io.println 15 + } 16 + _ -> io.println("usage: ./program filename.bf") 17 + } 13 18 }