improved lex function layout, fleshed out some cases
This commit is contained in:
parent
ac6d039ed5
commit
fd7cab77f4
1 changed files with 12 additions and 13 deletions
|
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue