brainz.c3 (1122B) - raw
1 module brainz; 2 import std::collections; 3 import std::io; 4 5 const int MEMORY_SIZE = 30000; 6 7 fn int main(String[] args) { 8 if (args.len < 2) { 9 io::eprintn("Please provide source path"); 10 } 11 String source_path = args[1]; 12 char[]? src = file::load(mem, source_path); 13 if (catch err = src) { 14 io::eprintfn("Error reading source file"); 15 return 1; 16 } 17 18 Program? program = parse(src); 19 if (catch err = program) { 20 io::eprintfn("Error parsing program: %s", err); 21 return 1; 22 } 23 24 char[] memory = mem::new_array(char, 30000); 25 char opt_level = 0; 26 switch (opt_level) { 27 default: 28 if (catch err = opt0::interpret(program, memory)) { 29 io::eprintfn("Error running program: %s", err); 30 return 1; 31 } 32 } 33 return 0; 34 } 35 36 alias Program = char[]; 37 38 fn Program? parse(char[] src, Allocator alloc = allocator::heap()) { 39 @pool() { 40 List{char} instructions; 41 instructions.tinit(); 42 43 foreach (c : src) { 44 switch (c) { 45 case '>': 46 case '<': 47 case '+': 48 case '-': 49 case '.': 50 case ',': 51 case '[': 52 case ']': 53 instructions.push(c); 54 default: {}; 55 } 56 } 57 return instructions.to_array(alloc); 58 }; 59 }