From c625ed1cfe7f7ea4ab2a75a8a0a6a6772f86431c Mon Sep 17 00:00:00 2001 From: Kyle Gunger Date: Fri, 30 Apr 2021 14:06:58 -0400 Subject: Destroy my own code by using goto --- src/tparse/tree-statement.go | 55 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 43 insertions(+), 12 deletions(-) (limited to 'src/tparse/tree-statement.go') diff --git a/src/tparse/tree-statement.go b/src/tparse/tree-statement.go index f6d3452..938e827 100644 --- a/src/tparse/tree-statement.go +++ b/src/tparse/tree-statement.go @@ -18,24 +18,55 @@ package tparse func parseBlock(tokens *[]Token, tok, max int) (Node, int) { out := Node{} - out.Data = Token{Type: 9, Data: "list"} + out.Data = Token{Type: 10, Data: "block"} var tmp Node tok++ - for ; tok < max; tok++ { + for ;tok < max; tok++{ + t := (*tokens)[tok] + + switch t.Type { + case DELIMIT: + if t.Data == "(" { + + } else if t.Data == "(" { + + } else { + goto BREAK + } + case DEFWORD: + case KEYWORD: + case LINESEP: + goto BREAK + } + } + + BREAK: + + for ;tok < max; { t := (*tokens)[tok] switch t.Data { - case ")", "]", "}": + case ";/", ";;", ";:": return out, tok - case ",": - tok++ + case ";": + tmp, tok = parseStatement(tokens, tok, max) + case "/;": + REBLOCK: + + tmp, tok = parseBlock(tokens, tok, max) + + if (*tokens)[tok].Data == ";;" { + out.Sub = append(out.Sub, tmp) + goto REBLOCK + } else if (*tokens)[tok].Data == ";/" { + tok++ + } default: - errOut("Error: unexpected token when parsing a list of types", t) + errOut("Error: unexpected token when parsing a code block", t) } - tmp, tok = parseType(tokens, tok, max, true) out.Sub = append(out.Sub, tmp) } @@ -44,7 +75,7 @@ func parseBlock(tokens *[]Token, tok, max int) (Node, int) { func parseStatement(tokens *[]Token, tok, max int) (Node, int) { out := Node{} - out.Data = Token{Type: 9, Data: "list"} + out.Data = Token{Type: 11, Data: ";"} var tmp Node tok++ @@ -52,10 +83,10 @@ func parseStatement(tokens *[]Token, tok, max int) (Node, int) { for ; tok < max; tok++ { t := (*tokens)[tok] - switch t.Data { - case ")", "]", "}": + switch t.Type { + case LINESEP, DELIMIT: return out, tok - case ",": + case INLNSEP: tok++ default: errOut("Error: unexpected token when parsing a list of types", t) @@ -70,7 +101,7 @@ func parseStatement(tokens *[]Token, tok, max int) (Node, int) { func parseDef(tokens *[]Token, tok, max int) (Node, int) { out := Node{} - out.Data = Token{Type: 9, Data: "list"} + out.Data = Token{Type: 10, Data: "list"} var tmp Node tok++ -- cgit v1.2.3