import gbf/eval
import gbf/lexer
import gbf/parser
import gbf/vm
import gleam/io
import gleam/list
import gleam/result
import gleam/string
pub fn main() {
let input =
"++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++."
let vm =
input
|> string.split(on: "")
|> list.map(char_to_code)
|> vm.new
let ast = input |> lexer.new() |> lexer.lex |> parser.parse()
case ast {
Error(_) -> panic as "not yay failed"
Ok(ast) -> {
use res <- result.try(eval.eval(vm, ast))
io.println("input: " <> input)
io.println("input: " <> res.output)
Ok("")
}
}
}
fn char_to_code(s: String) -> Int {
case s {
"\n" -> 0x0A
" " -> 0x20
"!" -> 0x21
"\"" -> 0x22
"#" -> 0x23
"$" -> 0x24
"%" -> 0x25
"&" -> 0x26
"'" -> 0x27
"(" -> 0x28
")" -> 0x29
"*" -> 0x2A
"+" -> 0x2B
"," -> 0x2C
"-" -> 0x2D
"." -> 0x2E
"/" -> 0x2F
"0" -> 0x30
"1" -> 0x31
"2" -> 0x32
"3" -> 0x33
"4" -> 0x34
"5" -> 0x35
"6" -> 0x36
"7" -> 0x37
"8" -> 0x38
"9" -> 0x39
":" -> 0x3A
";" -> 0x3B
"<" -> 0x3C
"=" -> 0x3D
">" -> 0x3E
"?" -> 0x3F
"@" -> 0x40
"A" -> 0x41
"B" -> 0x42
"C" -> 0x43
"D" -> 0x44
"E" -> 0x45
"F" -> 0x46
"G" -> 0x47
"H" -> 0x48
"I" -> 0x49
"J" -> 0x4A
"K" -> 0x4B
"L" -> 0x4C
"M" -> 0x4D
"N" -> 0x4E
"O" -> 0x4F
"P" -> 0x50
"Q" -> 0x51
"R" -> 0x52
"S" -> 0x53
"T" -> 0x54
"U" -> 0x55
"V" -> 0x56
"W" -> 0x57
"X" -> 0x58
"Y" -> 0x59
"Z" -> 0x5A
"[" -> 0x5B
"\\" -> 0x5C
"]" -> 0x5D
"^" -> 0x5E
"_" -> 0x5F
"`" -> 0x60
"a" -> 0x61
"b" -> 0x62
"c" -> 0x63
"d" -> 0x64
"e" -> 0x65
"f" -> 0x66
"g" -> 0x67
"h" -> 0x68
"i" -> 0x69
"j" -> 0x6A
"k" -> 0x6B
"l" -> 0x6C
"m" -> 0x6D
"n" -> 0x6E
"o" -> 0x6F
"p" -> 0x70
"q" -> 0x71
"r" -> 0x72
"s" -> 0x73
"t" -> 0x74
"u" -> 0x75
"v" -> 0x76
"w" -> 0x77
"x" -> 0x78
"y" -> 0x79
"z" -> 0x7A
"{" -> 0x7B
"|" -> 0x7C
"}" -> 0x7D
"~" -> 0x7E
_ -> 0x3F
}
}
|