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 for pos, char := range input { switch char { // TODO: User configurable delimiters case '\'', '"', '`': delim = char case '(': delim = ')' case delim: *iter = new(Token) *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 }