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