improved lex function layout, fleshed out some cases

This commit is contained in:
Aidan 2019-11-16 01:08:01 -08:00
parent ac6d039ed5
commit fd7cab77f4
No known key found for this signature in database
GPG key ID: 327711E983899316

View file

@ -22,42 +22,41 @@ type parse_tag enum {
type Token struct { type Token struct {
Token *next Token *next
interface{} *_inner interface{} _inner
} }
func lex(string input) string { func lex(string input) Token {
ret := new(Token) ret := new(Token)
iter := &ret iter := &ret
// buffered reader via new or make i dunno var tok strings.Builder
buff_is_dirty := false
iter_alloced := false iter_alloced := false
for pos, char := range input { for pos, char := range input {
switch char { switch char {
case '\'', '\"', '`': case '\'', '\"', '`':
// parse new token // parse new token
fallthrough // ? fallthrough
case ' ', '\t', '\n', '\f', '\r': case ' ', '\t', '\n', '\f', '\r':
// parse new token *iter = new(Token)
(*iter)->_inner = tok.String()
iter_alloced = true
case '(': case '(':
// match paren // match paren
// parse list *iter = new(Token)
(*iter)->_inner = lex(tok.String())
iter_alloced = true
case ')': case ')':
// SHOULDNT HAPPEN // SHOULDNT HAPPEN
default: default:
// add to buffer tok.WriteRune(char)
buf_is_dirty = true buf_is_dirty = true
} }
if buf_is_dirty {
// clear buffer
buf_is_dirty = false
}
if iter_alloced { if iter_alloced {
iter = &(*iter)->next iter = &(*iter)->next
iter_alloced = false iter_alloced = false
// clear buffer
} }
} }
} }