Skip to content

Instantly share code, notes, and snippets.

@dankogai
Created December 15, 2016 01:19
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save dankogai/7020471a37e4e902c70cfe5ff3b7111f to your computer and use it in GitHub Desktop.
let datasize = 65536
var framework = "Darwin"
#if os(Linux)
framework = "Glibc"
#endif
let bf2swift:[Character:String] = [
">": "sp += 1",
"<": "sp -= 1",
"+": "data[sp] += 1",
"-": "data[sp] -= 1",
"[": "while data[sp] != CChar(0) {",
"]": "}",
".": "putchar(Int32(data[sp]))",
",": "data[sp] = {c in CChar(c < 0 ? 0 : c)}(getchar())"
]
func bf2swift(src:String) -> String {
var lines = [
"import \(framework)",
"var data = [CChar](repeating:CChar(0), count:\(datasize))",
"var (sp, pc) = (0, 0)",
]
for c in src.characters {
if let l = bf2swift[c] {
lines.append(l)
}
}
lines.append("")
return lines.joined(separator: "\n")
}
extension String {
func bfCompile()->String {
return bf2swift(src: self)
}
}
let src = "+[,<>.]-"
print(src.bfCompile())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment