namespace CanonSharp.Combinator.Abstractions; /// /// 失败解析结果基类 /// /// 输入流类型 /// 解析结果类型 public abstract class FailedResult : ParseResult { public override T Value => throw Exception; /// /// 当前读取到的状态 /// public abstract IReadState State { get; } /// /// 解析失败的消息 /// public abstract string Message { get; } /// /// 解析失败的异常 /// public virtual ParseException Exception => new(ToString()); /// /// 转换该失败结果的类型 /// /// 转换之后的结果类型 /// 转换之后的失败解析类型 public abstract FailedResult Convert(); internal override ParseResult Next(Func> nextParser, Func, ParseResult> continuation) => continuation(Convert()); public override ParseResult Map(Func map) => Convert(); public override TResult CaseOf(Func, TResult> successfulHandler, Func, TResult> failedHandler) => failedHandler(this); public override string ToString() { return $"Parse Failed: {Message}."; } }