Added Bracket, Where, and Token (without tests)

This commit is contained in:
2025-04-11 19:03:45 -06:00
parent 035fa7da14
commit e60f6ae015
3 changed files with 39 additions and 0 deletions

View File

@ -194,6 +194,17 @@ func (p Parser[In, Out]) Label(label string) Parser[In, Out] {
}
}
func (p Parser[In, Out]) Where(pred func(Out) bool) Parser[In, Out] {
return func(s State[In]) (Result[In, Out], error) {
result, err := p(s)
if result.success && !pred(result.value) {
result.success = false
result.message.got = "failed Where predicate"
}
return result, err
}
}
type ParseError Message
func (pe ParseError) Error() string {
@ -412,3 +423,7 @@ func Lazy[In, Out any](p func() Parser[In, Out]) Parser[In, Out] {
return p()(s)
}
}
func Bracket[In, Out, LOut, ROut any](left Parser[In, LOut], p Parser[In, Out], right Parser[In, ROut]) Parser[In, Out] {
return Seq3(left, p, right, func(_ LOut, val Out, _ ROut) Out { return val })
}