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 }