summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSuleyman Farajli <suleyman@farajli.net>2025-01-02 01:17:42 +0400
committerSuleyman Farajli <suleyman@farajli.net>2025-01-02 01:17:42 +0400
commit4c1cdef73d1dac78e087d46e0273e6a5d8942cf1 (patch)
tree8a1853edc24b18f81365b88b24e5037a54756d66 /src
parent240f2bb235d19e0819bd6e80d61e10b0e03e1be9 (diff)
`word` added
Diffstat (limited to 'src')
-rw-r--r--src/main.go28
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);