using CanonSharp.Combinator.Abstractions; namespace CanonSharp.Combinator.Parsers.Bases; /// /// 选择解析器 /// 如果第一个不成功则调用第二个 /// /// 第一个解析器 /// 第二个解析器 /// 输入流类型 /// 解析器结果类型 internal sealed class AlternativeParser(IParser first, IParser second) : IParser { public IParseResult Run(TState state, Func, IParseResult> continuation) where TState : IReadState { return first.Run(state, result => result.CaseOf(continuation, _ => second.Run(state, continuation))); } }