SHS/pkg/shsh/parsers.go

56 lines
992 B
Go
Raw Normal View History

2019-11-18 22:44:24 -08:00
// 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) {
2019-11-19 19:15:20 -08:00
switch arg.tag {
case LIST_T:
for i := arg; i; i = i.next {
Parse(i)
}
if list_is_operation(arg) {
arg.tag = OPERATION_T
}
case OPERAND_T:
if string_is_operator(arg._inner) {
arg.tag = OPERATOR_T
}
default:
;// TODO: Tag a parse error?
}
2019-11-18 22:44:24 -08:00
}
func string_delimiters_valid(arg string) bool {
2019-11-19 19:15:20 -08:00
// TODO: Enhance this function
go
2019-11-18 22:44:24 -08:00
}
func list_is_operation(arg *Token) bool {
}
func string_is_operator(arg string) bool {
}