From 4c1cdef73d1dac78e087d46e0273e6a5d8942cf1 Mon Sep 17 00:00:00 2001 From: Suleyman Farajli Date: Thu, 2 Jan 2025 01:17:42 +0400 Subject: `word` added --- src/main.go | 28 ++++++++++++++++++++++------ 1 file 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); -- cgit v1.2.3