43 lines
885 B
Go
43 lines
885 B
Go
package h
|
|
|
|
//go:generate peggy -o h_gen.go h.peg
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/eaburns/peggy/peg"
|
|
"within.website/x/jbo/namcu"
|
|
)
|
|
|
|
func (p *_Parser) Parse() (int, bool) {
|
|
pos, perr := _HAccepts(p, 0)
|
|
return perr, pos >= 0
|
|
}
|
|
|
|
func (p *_Parser) ErrorTree(minPos int) *peg.Fail {
|
|
p.fail = make(map[_key]*peg.Fail) // reset fail memo table
|
|
_, tree := _HFail(p, 0, minPos)
|
|
return tree
|
|
}
|
|
|
|
func (p *_Parser) ParseTree() *peg.Node {
|
|
_, tree := _HNode(p, 0)
|
|
return tree
|
|
}
|
|
|
|
// Parse parses h.
|
|
// On success, the parseTree is returned.
|
|
// On failure, both the word-level and the raw, morphological errors are returned.
|
|
func Parse(text string) (*peg.Node, error) {
|
|
p := _NewParser(text)
|
|
if perr, ok := p.Parse(); !ok {
|
|
return nil, fmt.Errorf("h: gentoldra fi'o zvati fe li %s", namcu.Lerfu(perr))
|
|
}
|
|
|
|
tree := p.ParseTree()
|
|
RemoveSpace(tree)
|
|
CollapseLists(tree)
|
|
|
|
return tree, nil
|
|
}
|