diff options
author | Suleyman Farajli <suleyman@farajli.net> | 2025-01-02 01:17:42 +0400 |
---|---|---|
committer | Suleyman Farajli <suleyman@farajli.net> | 2025-01-02 01:17:42 +0400 |
commit | 4c1cdef73d1dac78e087d46e0273e6a5d8942cf1 (patch) | |
tree | 8a1853edc24b18f81365b88b24e5037a54756d66 /src | |
parent | 240f2bb235d19e0819bd6e80d61e10b0e03e1be9 (diff) |
`word` added
Diffstat (limited to 'src')
-rw-r--r-- | src/main.go | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/src/main.go b/src/main.go index 3f01fa2..05eb80f 100644 --- a/src/main.go +++ b/src/main.go @@ -29,8 +29,6 @@ type Word struct { tokens[] Token } -/* TODO: add validate function for error checking */ - func tokenize(path string) []Token { var tokens []Token; @@ -80,14 +78,14 @@ func tokenize(path string) []Token { return tokens } +var iflabel int = 0 +var looplabel int = 0 +var stringlabel int = 0 func parse(tokens[]Token) []Operation { var ops[] Operation + var externalWords[] Word var iflabels[] int - var iflabel int = 0 var looplabels[] int - var looplabel int = 0 - var stringlabel int = 0 - var externalWords[] Word; for i := 0; i < len(tokens); i++ { var op Operation @@ -162,6 +160,24 @@ func parse(tokens[]Token) []Operation { externalWords = append(externalWords, Word{typ: "const", name: name, tokens: []Token{token}}) i += 2 continue + + case "word": + var tokBuf[] Token + if i + 1 >= len(tokens) { + /* FIXME: Better error message */ + panic("invalid word usage") + } + name := tokens[i + 1].str + i += 2 + for ;i < len(tokens) && tokens[i].str != "end"; i++ { + tokBuf = append(tokBuf, tokens[i]) + } + if i == len(tokens) { + /* FIXME: Better error message */ + panic("missing end") + } + externalWords = append(externalWords, Word{typ: "word", name: name, tokens: tokBuf}) + continue } number, err := strconv.Atoi(tokens[i].str); |