package shell import "io" type Token interface { Tokens() []Token AddToken(Token) String() string } type Expandable interface { Expand(state State, stdin io.Reader, stderr io.Writer) ([]string, uint8) } type Evalable interface { Evaluate(state State, stdin io.Reader, stdout io.Writer, stderr io.Writer) uint8 } type BaseToken struct { tokens []Token } func (t *BaseToken) Tokens() []Token { return t.tokens } func (t *BaseToken) AddToken(token Token) { if token != nil { t.tokens = append(t.tokens, token) } } func (t *BaseToken) String() string { var str string for _, token := range t.Tokens() { str += token.String() } return str }