From fd7cab77f4acb073a1c2cfe8aa760146c40e2677 Mon Sep 17 00:00:00 2001 From: Aidan Date: Sat, 16 Nov 2019 01:08:01 -0800 Subject: [PATCH] improved lex function layout, fleshed out some cases --- pkg/shsh/token.go | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/pkg/shsh/token.go b/pkg/shsh/token.go index fd81863..54ddd83 100644 --- a/pkg/shsh/token.go +++ b/pkg/shsh/token.go @@ -22,42 +22,41 @@ type parse_tag enum { type Token struct { Token *next - interface{} *_inner + interface{} _inner } -func lex(string input) string { +func lex(string input) Token { ret := new(Token) iter := &ret - // buffered reader via new or make i dunno - buff_is_dirty := false + var tok strings.Builder iter_alloced := false for pos, char := range input { switch char { case '\'', '\"', '`': // parse new token - fallthrough // ? + fallthrough case ' ', '\t', '\n', '\f', '\r': - // parse new token + *iter = new(Token) + (*iter)->_inner = tok.String() + iter_alloced = true case '(': // match paren - // parse list + *iter = new(Token) + (*iter)->_inner = lex(tok.String()) + iter_alloced = true case ')': // SHOULDNT HAPPEN default: - // add to buffer + tok.WriteRune(char) buf_is_dirty = true } - if buf_is_dirty { - // clear buffer - buf_is_dirty = false - } - if iter_alloced { iter = &(*iter)->next iter_alloced = false + // clear buffer } } }