goparsify/result.go

42 lines
1.0 KiB
Go

package goparsify
import (
"fmt"
"strings"
)
// TrashResult is used in places where the result isnt wanted, but something needs to be passed in to satisfy the interface.
var TrashResult = &Result{}
// Result is the output of a parser. Usually only one of its fields will be set and should be though of
// more as a union type. having it avoids interface{} littered all through the parsing code and makes
// the it easy to do the two most common operations, getting a token and finding a child.
type Result struct {
Token string
Child []Result
Result interface{}
Input string
Start int
End int
}
// String stringifies a node. This is only called from debug code.
func (r Result) String() string {
if r.Result != nil {
if rs, ok := r.Result.(fmt.Stringer); ok {
return rs.String()
}
return fmt.Sprintf("%#v", r.Result)
}
if len(r.Child) > 0 {
children := []string{}
for _, child := range r.Child {
children = append(children, child.String())
}
return "[" + strings.Join(children, ",") + "]"
}
return r.Token
}