It builds
This commit is contained in:
parent
7aa80376bb
commit
7e175dec95
7 changed files with 52 additions and 45 deletions
|
|
@ -2,6 +2,7 @@ package shsh;
|
|||
|
||||
import (
|
||||
"strings"
|
||||
"unicode"
|
||||
)
|
||||
|
||||
type token_t int
|
||||
|
|
@ -15,7 +16,7 @@ const (
|
|||
type Token struct {
|
||||
next *Token
|
||||
tag token_t
|
||||
int position
|
||||
position int
|
||||
_inner interface{}
|
||||
}
|
||||
|
||||
|
|
@ -25,9 +26,9 @@ func Lex(input string) *Token {
|
|||
delim := ' '
|
||||
var tok strings.Builder
|
||||
iter_alloced := false
|
||||
is_list = false
|
||||
is_str = false
|
||||
is_num = true
|
||||
is_list := false
|
||||
is_str := false
|
||||
is_num := true
|
||||
|
||||
for pos, char := range input {
|
||||
switch char {
|
||||
|
|
@ -41,24 +42,24 @@ func Lex(input string) *Token {
|
|||
|
||||
case delim:
|
||||
*iter = new(Token)
|
||||
*iter.position = pos
|
||||
(*iter).position = pos
|
||||
|
||||
if is_list {
|
||||
*iter._inner = Lex(tok.String())
|
||||
(*iter)._inner = Lex(tok.String())
|
||||
is_list = false
|
||||
*iter._inner = LIST
|
||||
(*iter)._inner = LIST
|
||||
|
||||
} else {
|
||||
*iter._inner = tok.String()
|
||||
if is_string {
|
||||
*iter.tag = STRING
|
||||
(*iter)._inner = tok.String()
|
||||
if is_str {
|
||||
(*iter).tag = STRING
|
||||
is_str = false
|
||||
|
||||
} else if is_num {
|
||||
*iter.tag = NUMBER
|
||||
(*iter).tag = NUMBER
|
||||
|
||||
} else {
|
||||
*iter.tag = SYMBOL
|
||||
(*iter).tag = SYMBOL
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -66,12 +67,12 @@ func Lex(input string) *Token {
|
|||
delim = ' '
|
||||
|
||||
default:
|
||||
is_num = is_num && IsDigit(char)
|
||||
is_num = is_num && unicode.IsDigit(char)
|
||||
tok.WriteRune(char)
|
||||
}
|
||||
|
||||
if iter_alloced {
|
||||
iter = &(*iter.next)
|
||||
iter = &((*iter).next)
|
||||
iter_alloced = false
|
||||
tok.Reset()
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue