// 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) { 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? } } func string_delimiters_valid(arg string) bool { // TODO: Enhance this function go } func list_is_operation(arg *Token) bool { } func string_is_operator(arg string) bool { }