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