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
|
|
|
|
}
|
|
|
|
|
|
|
|
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-06-26 02:20:23 +02:00
|
|
|
storeIncluded(*context, *Node)
|
2017-06-25 17:51:08 +02:00
|
|
|
parse(Trace, *context)
|
|
|
|
}
|
|
|
|
|
|
|
|
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-07-15 21:49:08 +02:00
|
|
|
func stringsContainDeprecated(ss []string, s string) bool {
|
2017-06-25 17:51:08 +02:00
|
|
|
for _, si := range ss {
|
|
|
|
if si == s {
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
|
|
|
|
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
|
|
|
|
}
|