Now I understand how Try works
This commit is contained in:
parent
ffe949b97b
commit
0a1fe0821a
@ -85,6 +85,11 @@ func Choose[In, Out any](p, q Parser[In, Out]) Parser[In, Out] {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Try behaves identically to p, except that if p returns an error,
|
||||||
|
// Try will pretend that no input was consumed. This allows infinite
|
||||||
|
// lookahead: Since Choose only calls another parser when the previous
|
||||||
|
// parser consumed nothing, Try will allow backing out of a complex
|
||||||
|
// parser that did partially succeeded.
|
||||||
func Try[In, Out any](p Parser[In, Out]) Parser[In, Out] {
|
func Try[In, Out any](p Parser[In, Out]) Parser[In, Out] {
|
||||||
return func(input State[In]) (bool, Result[In, Out], error) {
|
return func(input State[In]) (bool, Result[In, Out], error) {
|
||||||
consumed, reply, err := p(input)
|
consumed, reply, err := p(input)
|
||||||
|
Loading…
Reference in New Issue
Block a user