diff options
| author | Xe <me@christine.website> | 2022-12-30 10:13:56 -0500 |
|---|---|---|
| committer | Xe <me@christine.website> | 2022-12-30 10:13:56 -0500 |
| commit | e3e8ebbcf82f221d026385c5a85d0afde62b3e3d (patch) | |
| tree | 1ab8a5811db5a64ed14d3112e47730d0fe97325a /cmd/hlang/h/parser.go | |
| parent | 9bdbd3156177640afaf18ca2c4ad783138004e4a (diff) | |
| download | x-e3e8ebbcf82f221d026385c5a85d0afde62b3e3d.tar.xz x-e3e8ebbcf82f221d026385c5a85d0afde62b3e3d.zip | |
add old hlang draft
Signed-off-by: Xe <me@christine.website>
Diffstat (limited to 'cmd/hlang/h/parser.go')
| -rw-r--r-- | cmd/hlang/h/parser.go | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/cmd/hlang/h/parser.go b/cmd/hlang/h/parser.go new file mode 100644 index 0000000..4daa833 --- /dev/null +++ b/cmd/hlang/h/parser.go @@ -0,0 +1,42 @@ +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 +} |
