summaryrefslogtreecommitdiff
path: root/combinator.go
diff options
context:
space:
mode:
Diffstat (limited to 'combinator.go')
-rw-r--r--combinator.go38
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)}
- })
+ }))
}