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));
}