treerack/parse.go

52 lines
899 B
Go
Raw Normal View History

2017-07-15 21:49:08 +02:00
package treerack
2017-06-25 17:51:08 +02:00
2017-06-25 23:38:32 +02:00
import "fmt"
2017-06-25 17:51:08 +02:00
type definition interface {
nodeName() string
2017-07-15 21:49:08 +02:00
nodeID() int
setID(int)
2017-07-15 22:12:01 +02:00
parser(*registry, *idSet) (parser, error)
2017-06-25 17:51:08 +02:00
commitType() CommitType
2017-07-17 04:23:29 +02:00
// builder() builder
2017-06-25 17:51:08 +02:00
}
type parser interface {
nodeName() string
2017-07-15 21:49:08 +02:00
nodeID() int
2017-07-15 22:12:01 +02:00
setIncludedBy(parser, *idSet)
2017-07-17 04:23:29 +02:00
storeIncluded(*context, int, int)
2017-06-25 17:51:08 +02:00
parse(Trace, *context)
}
2017-07-17 04:23:29 +02:00
type builder interface {
nodeName() string
nodeID() int
build(*context) *Node
}
2017-06-25 17:51:08 +02:00
func parserNotFound(name string) error {
return fmt.Errorf("parser not found: %s", name)
}
2017-06-25 23:38:32 +02:00
func cannotIncludeParsers(name string) error {
return fmt.Errorf("parser: %s cannot include other parsers", name)
}
2017-06-25 17:51:08 +02:00
func parse(t Trace, p parser, c *context) (*Node, error) {
p.parse(t, c)
if c.readErr != nil {
return nil, c.readErr
}
if !c.match {
return nil, ErrInvalidInput
}
if err := c.finalize(); err != nil {
return nil, err
}
return c.node, nil
}