Added Bracket, Where, and Token (without tests)
This commit is contained in:
@ -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 })
|
||||
}
|
||||
|
Reference in New Issue
Block a user