SHS/pkg/shsh/token.go
2019-11-18 22:44:24 -08:00

50 lines
940 B
Go

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
}