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