using CanonSharp.Combinator.Abstractions; namespace CanonSharp.Combinator.Parsers; /// /// 解析器原型基类 /// 实际上就是处理了一个后继调用 /// /// 输入流类型 /// 解析结果的类型 public abstract class PrimitiveParser : IParser { /// /// 运行解析器 返回解析结果 /// /// 当前输入流的状态 /// 输入流状态的类型 /// 解析结果 protected abstract IParseResult Run(TState state) where TState : IReadState; public IParseResult Run(TState state, Func, IParseResult> continuation) where TState : IReadState => continuation(Run(state)); }