good restructure: less code

This commit is contained in:
Aidan Hahn 2019-11-16 16:16:05 -08:00
parent fd7cab77f4
commit 8faa02f7f7
No known key found for this signature in database
GPG key ID: 327711E983899316
2 changed files with 22 additions and 23 deletions

BIN
pkg/shsh/.token.go.swp Normal file

Binary file not shown.

View file

@ -2,7 +2,6 @@ package token;
import ( import (
"strings" "strings"
"bytes"
) )
type operation func(Token) Token type operation func(Token) Token
@ -13,50 +12,50 @@ type operation func(Token) Token
* OPERATOR: an entry in a symtable * OPERATOR: an entry in a symtable
* OPERATION: a list starting with an operator * OPERATION: a list starting with an operator
*/ */
type parse_tag enum { type parse_tag int
LIST_T iota const (
OPERAND_T iota LIST_T parse_tag = iota
OPERATOR_T iota OPERAND_T parse_tag = iota
OPERATION_T iota OPERATOR_T parse_tag = iota
} OPERATION_T parse_tag = iota
)
type Token struct { type Token struct {
Token *next next *Token
interface{} _inner tag parse_tag
_inner interface{}
} }
func lex(string input) Token { func lex(string input) Token {
ret := new(Token) ret := new(Token)
iter := &ret iter := &ret
delim := ' '
var tok strings.Builder var tok strings.Builder
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 delim = char
fallthrough
case ' ', '\t', '\n', '\f', '\r':
*iter = new(Token)
(*iter)->_inner = tok.String()
iter_alloced = true
case '(': case '(':
// match paren delim = ')'
case delim:
*iter = new(Token) *iter = new(Token)
(*iter)->_inner = lex(tok.String()) *iter._inner = tok.String()
iter_alloced = true iter_alloced = true
case ')': delim = ' '
// SHOULDNT HAPPEN
default: default:
tok.WriteRune(char) tok.WriteRune(char)
buf_is_dirty = true buf_is_dirty = true
} }
if iter_alloced { if iter_alloced {
iter = &(*iter)->next iter = &(*iter.next)
iter_alloced = false iter_alloced = false
// clear buffer tok.Reset()
} }
} }
} }
@ -67,7 +66,7 @@ func parse(Token *arg) {
// Determine if a list is an operation or a list // Determine if a list is an operation or a list
} }
func eval(Token *tree) Token* { func eval(Token *tree) *Token {
// Find operations // Find operations
// Simplify operations deepest first // Simplify operations deepest first
// return tree of final Tokens // return tree of final Tokens