repo oops

This commit is contained in:
Aidan Hahn 2019-11-18 22:44:24 -08:00
parent 8faa02f7f7
commit d38f53208b
No known key found for this signature in database
GPG key ID: 327711E983899316
4 changed files with 40 additions and 26 deletions

37
pkg/shsh/parsers.go Normal file
View file

@ -0,0 +1,37 @@
// TODO: think about package names
// Should we have one for all our code?
package shsh
import (
"strings"
)
/*
* LIST: a list of elements
* OPERAND: a string or number
* OPERATOR: an entry in a symtable
* OPERATION: a list starting with an operator
*/
type parse_tag int
const (
LIST_T parse_tag = iota
OPERAND_T parse_tag = iota
OPERATOR_T parse_tag = iota
OPERATION_T parse_tag = iota
)
func Parse(arg *Token) {
}
func string_delimiters_valid(arg string) bool {
}
func list_is_operation(arg *Token) bool {
}
func string_is_operator(arg string) bool {
}

View file

@ -1,33 +1,16 @@
package token; package shsh;
import ( import (
"strings" "strings"
) )
type operation func(Token) Token
/*
* LIST: a list of elements
* OPERAND: a string or number
* OPERATOR: an entry in a symtable
* OPERATION: a list starting with an operator
*/
type parse_tag int
const (
LIST_T parse_tag = iota
OPERAND_T parse_tag = iota
OPERATOR_T parse_tag = iota
OPERATION_T parse_tag = iota
)
type Token struct { type Token struct {
next *Token next *Token
tag parse_tag tag parse_tag
_inner interface{} _inner interface{}
} }
func Lex(input string) Token {
func lex(string input) Token {
ret := new(Token) ret := new(Token)
iter := &ret iter := &ret
delim := ' ' delim := ' '
@ -36,6 +19,7 @@ func lex(string input) Token {
for pos, char := range input { for pos, char := range input {
switch char { switch char {
// TODO: User configurable delimiters
case '\'', '"', '`': case '\'', '"', '`':
delim = char delim = char
case '(': case '(':
@ -49,7 +33,6 @@ func lex(string input) Token {
default: default:
tok.WriteRune(char) tok.WriteRune(char)
buf_is_dirty = true
} }
if iter_alloced { if iter_alloced {
@ -60,12 +43,6 @@ func lex(string input) Token {
} }
} }
func parse(Token *arg) {
// if operand determine if operator
// determine operator precense in symbol table
// 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