summaryrefslogtreecommitdiff
path: root/src/tparse
diff options
context:
space:
mode:
Diffstat (limited to 'src/tparse')
-rw-r--r--src/tparse/token.go6
-rw-r--r--src/tparse/tree-statement.go10
-rw-r--r--src/tparse/tree.go2
-rw-r--r--src/tparse/type.go4
4 files changed, 16 insertions, 6 deletions
diff --git a/src/tparse/token.go b/src/tparse/token.go
index 182b2e0..02502eb 100644
--- a/src/tparse/token.go
+++ b/src/tparse/token.go
@@ -27,6 +27,12 @@ type Token struct {
// Node represents a node in an AST
type Node struct {
Data Token
+
+ IsBlock bool
+ BlockQs []Token
+ BlockIn []Node
+ BlockOut []Node
+
Sub []Node
}
diff --git a/src/tparse/tree-statement.go b/src/tparse/tree-statement.go
index 874528a..167cee2 100644
--- a/src/tparse/tree-statement.go
+++ b/src/tparse/tree-statement.go
@@ -23,6 +23,9 @@ func parseBlock(tokens *[]Token, tok, max int) (Node, int) {
tok++
+ def := Node{}
+ def.Data = Token{Type: 10, Data: "blockdef"}
+
for ;tok < max; tok++{
t := (*tokens)[tok]
@@ -30,14 +33,15 @@ func parseBlock(tokens *[]Token, tok, max int) (Node, int) {
case DELIMIT:
if t.Data == "(" {
tmp, tok = parseParamList(tokens, tok, max)
- out.Sub = append(out.Sub, tmp)
+ def.Sub = append(out.Sub, tmp)
} else if t.Data == "[" {
tmp, tok = parseTypeList(tokens, tok, max)
- out.Sub = append(out.Sub, tmp)
+ def.Sub = append(out.Sub, tmp)
} else {
goto BREAK
}
case DEFWORD:
+
case KEYWORD:
case LINESEP:
goto BREAK
@@ -46,6 +50,8 @@ func parseBlock(tokens *[]Token, tok, max int) (Node, int) {
BREAK:
+ out.Sub = append(out.Sub, def)
+
for ;tok < max; {
t := (*tokens)[tok]
diff --git a/src/tparse/tree.go b/src/tparse/tree.go
index 9e9e554..08c94bf 100644
--- a/src/tparse/tree.go
+++ b/src/tparse/tree.go
@@ -19,7 +19,7 @@ package tparse
import "fmt"
// ID 9 = ast root
-// ID 10 = ast list
+// ID 10 = ast token
func errOut(message string, token Token) {
fmt.Println(message)
diff --git a/src/tparse/type.go b/src/tparse/type.go
index 73bb94d..b860f02 100644
--- a/src/tparse/type.go
+++ b/src/tparse/type.go
@@ -50,7 +50,7 @@ var PREWORDS = []string{
"extern",
"size",
"align",
- "origin",
+ "address",
"rootfile",
"if",
"else",
@@ -130,8 +130,6 @@ var RESWORD = map[string]int{
"module": KEYWORD,
"export": KEYWORD,
-
- "drop": KEYWORD,
}
func checkResWord(s string) int {