package shsh; import ( "strings" ) type Token struct { next *Token tag parse_tag _inner interface{} } func Lex(input string) Token { ret := new(Token) iter := &ret delim := ' ' var tok strings.Builder iter_alloced := false is_list = false; for pos, char := range input { switch char { // TODO: User configurable delimiters case '\'', '"', '`': delim = char case '(': is_list = true delim = ')' case delim: *iter = new(Token) if is_list { // TODO: Pass a pointer out of Lex and store a pointer *iter._inner = Lex(tok.String()) is_list = false } else { // TODO: Store a pointer to the contents of the stringbuilder *iter._inner = tok.String() } iter_alloced = true delim = ' ' default: tok.WriteRune(char) } if iter_alloced { iter = &(*iter.next) iter_alloced = false tok.Reset() } } } func eval(Token *tree) *Token { // Find operations // Simplify operations deepest first // return tree of final Tokens }