diff options
author | Suleyman Farajli <suleyman@farajli.net> | 2024-12-23 22:35:51 +0400 |
---|---|---|
committer | Suleyman Farajli <suleyman@farajli.net> | 2024-12-23 22:35:51 +0400 |
commit | d684b0ee2f142bdde5539cb0899949d4358cb115 (patch) | |
tree | 4a87ff978d9cf92eb0c51f6380535af9d6319293 /src | |
parent | 70dbdc4105dbd508d9e21ef7591acc0deb05d1c6 (diff) |
interpreter removed only compile is supported
Diffstat (limited to 'src')
-rw-r--r-- | src/main.go | 93 |
1 files changed, 12 insertions, 81 deletions
diff --git a/src/main.go b/src/main.go index 6568142..1773c2a 100644 --- a/src/main.go +++ b/src/main.go @@ -2,11 +2,12 @@ package main import ( "fmt" - "strconv" "regexp" "os" ) +var print = fmt.Println + func readfile(path string) []string { var raw []string; @@ -29,93 +30,23 @@ func readfile(path string) []string { return raw; } -func interpret(raw[]string) { - var err error; - var number int; - var stack[]int; - var skip_to_end bool; - - for i := 0; i < len(raw); i++ { - length := len(stack); - /* Conditional looping */ - if (skip_to_end && raw[i] != "end") { - continue; - } - number, err = strconv.Atoi(raw[i]); - if err == nil { - stack = append(stack, number); - continue; - } - - switch raw[i] { - case "+": - if length < 2 { - panic("failed to plus: stack underflow"); - } - stack[length - 2] = stack[length - 1] + stack[length - 2] - stack = stack[:length - 1]; - case "-": - if length < 2 { - panic("failed to minus: stack underflow"); - } - stack[length - 2] = stack[length - 1] - stack[length - 2] - stack = stack[:length - 1]; - case "=": - if length < 2 { - panic("failed to check equality: stack underflow"); - } - if (stack[length - 1] == stack[length - 2]) { - stack = append(stack, -1); - } else { - stack = append(stack, 0); - } - - case ".": - if length < 1 { - panic("failed to dump: stack underflow"); - } - fmt.Println(stack[length - 1]); - stack = stack[:length - 1]; - case "if": - if length < 1 { - panic("failed to if: stack underflow"); - } - if (stack[length - 1] == 0) { - skip_to_end = true; - } - stack = stack[:length - 1]; - case "end": - skip_to_end = false; - - default: - panic("invalid word"); - } - } +func compile(raw[]string) { + print("section .text") + print("global _start") + print("_start:") + print("mov rdi, 0") + print("mov rax, 60") + print("syscall") } func main() { - var file string; argv := os.Args; argc := len(argv); - compile_flg := false; - switch argc { - case 3: - if argv[1] != "-S" { - panic("Invalid usage"); - } - compile_flg = true; - fallthrough; - case 2: - file = argv[argc - 1]; - default: + if (argc != 2) { panic("Invaid usage"); } - output := readfile(file); - if (compile_flg) { - panic("Not Implemented"); - } else { - interpret(output); - } + raw := readfile(argv[argc - 1]) + compile(raw); } |