using CanonSharp.Combinator.Abstractions; namespace CanonSharp.Combinator.Parsers.Bases; /// /// 恢复解析器 /// 在上游解析器失败的情况下调用指定恢复函数返回的解析器 /// /// 上游解析器 /// 返回新解析器的恢复函数 /// 输入令牌类型 /// 解析结果类型 internal sealed class ResumeParser( Parser parser, Func, Parser> failedHandler) : Parser { internal override ParseResult Run(TState state, Func, ParseResult> continuation) { return parser.Run(state, result => result.CaseOf(continuation, failedResult => failedHandler(failedResult).Run(state, continuation))); } }