diff options
author | Adam Scarr <adam@vektah.net> | 2017-08-07 20:07:29 +1000 |
---|---|---|
committer | Adam Scarr <adam@vektah.net> | 2017-08-07 20:07:29 +1000 |
commit | cc9d18219af9375ad89eaa8a23f1e0bcffa5734e (patch) | |
tree | 4aaf4771b90fbf622f1ebb80a8dabd6a149deb69 /combinator.go | |
parent | 02103782eb22edeca876936596674fa07442daf4 (diff) |
add debugging
Diffstat (limited to 'combinator.go')
-rw-r--r-- | combinator.go | 38 |
1 files changed, 19 insertions, 19 deletions
diff --git a/combinator.go b/combinator.go index 3cb8c6d..7dc4147 100644 --- a/combinator.go +++ b/combinator.go @@ -1,17 +1,17 @@ -package parsec +package goparsify import ( "bytes" ) -func Nil(ps *State) *Node { +var Nil = NewParser("Nil", func(ps *State) *Node { return nil -} +}) -func Never(ps *State) *Node { +var Never = NewParser("Never", func(ps *State) *Node { ps.ErrorHere("not anything") return nil -} +}) func And(parsers ...Parserish) Parser { if len(parsers) == 0 { @@ -20,7 +20,7 @@ func And(parsers ...Parserish) Parser { parserfied := ParsifyAll(parsers...) - return func(ps *State) *Node { + return NewParser("And", func(ps *State) *Node { var nodes = make([]*Node, 0, len(parserfied)) startpos := ps.Pos for _, parser := range parserfied { @@ -34,7 +34,7 @@ func And(parsers ...Parserish) Parser { } } return &Node{Children: nodes} - } + }) } func Any(parsers ...Parserish) Parser { @@ -44,7 +44,7 @@ func Any(parsers ...Parserish) Parser { parserfied := ParsifyAll(parsers...) - return func(ps *State) *Node { + return NewParser("Any", func(ps *State) *Node { longestError := Error{} startpos := ps.Pos for _, parser := range parserfied { @@ -62,23 +62,23 @@ func Any(parsers ...Parserish) Parser { ps.Error = longestError ps.Pos = startpos return nil - } + }) } func Kleene(opScan Parserish, sepScan ...Parserish) Parser { - return manyImpl(0, opScan, Never, sepScan...) + return NewParser("Kleene", manyImpl(0, opScan, Never, sepScan...)) } func KleeneUntil(opScan Parserish, untilScan Parserish, sepScan ...Parserish) Parser { - return manyImpl(0, opScan, untilScan, sepScan...) + return NewParser("KleeneUntil", manyImpl(0, opScan, untilScan, sepScan...)) } func Many(opScan Parserish, sepScan ...Parserish) Parser { - return manyImpl(1, opScan, Never, sepScan...) + return NewParser("Many", manyImpl(1, opScan, Never, sepScan...)) } func ManyUntil(opScan Parserish, untilScan Parserish, sepScan ...Parserish) Parser { - return manyImpl(1, opScan, untilScan, sepScan...) + return NewParser("ManyUntil", manyImpl(1, opScan, untilScan, sepScan...)) } func manyImpl(min int, op Parserish, until Parserish, sep ...Parserish) Parser { @@ -132,7 +132,7 @@ func manyImpl(min int, op Parserish, until Parserish, sep ...Parserish) Parser { func Maybe(parser Parserish) Parser { parserfied := Parsify(parser) - return func(ps *State) *Node { + return NewParser("Maybe", func(ps *State) *Node { node := parserfied(ps) if ps.Errored() { ps.ClearError() @@ -140,19 +140,19 @@ func Maybe(parser Parserish) Parser { } return node - } + }) } func Map(parser Parserish, f func(n *Node) *Node) Parser { p := Parsify(parser) - return func(ps *State) *Node { + return NewParser("Map", func(ps *State) *Node { node := p(ps) if ps.Errored() { return nil } return f(node) - } + }) } func flatten(n *Node) string { @@ -172,7 +172,7 @@ func flatten(n *Node) string { } func Merge(parser Parserish) Parser { - return Map(parser, func(n *Node) *Node { + return NewParser("Merge", Map(parser, func(n *Node) *Node { return &Node{Token: flatten(n)} - }) + })) } |