package main import "core:fmt" import "core:os" import "lex" import "shuntingyard" import "vm" main :: proc() { my_vm := vm.new_vm() defer vm.delete_vm(my_vm) for { inp_buf := make([]byte, 256) defer delete(inp_buf) fmt.print("> ") char_count, err := os.read(os.stdin, inp_buf[:]) if err < 0 { fmt.println("[!] ERROR", err) return } if char_count < 1 { break } // Remove new line src := string(inp_buf[:char_count - 1]) // catch quit or exit if src == "quit" || src == "exit" { break } else if src == "" { continue } // src := read_file("./math.txt") tokens := lex.lex(src) ast := shuntingyard.shunting_yard(tokens) vm.load_code(my_vm, ast[:]) res := vm.execute(my_vm) fmt.println(res) } } read_file :: proc(path: string) -> string { src_bytes, ok := os.read_entire_file_from_filename("./math.txt") src := cast(string)src_bytes if !ok { fmt.println("Could not read file") os.exit(1) } return src }