fix: Using covariant interface for IParser and IParseResult.
Rename CanonSharp.Common to CanonSharp.Pascal.
This commit is contained in:
@@ -20,7 +20,7 @@ public static class ParserBuilder
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <returns></returns>
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static Parser<TToken, T> Pure<TToken, T>(T value)
|
||||
public static IParser<TToken, T> Pure<TToken, T>(T value)
|
||||
=> new PureParser<TToken, T>(value);
|
||||
|
||||
/// <summary>
|
||||
@@ -31,7 +31,7 @@ public static class ParserBuilder
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <returns></returns>
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static Parser<TToken, T> Pure<TToken, T>(Func<IReadState<TToken>, T> valueFunc)
|
||||
public static IParser<TToken, T> Pure<TToken, T>(Func<IReadState<TToken>, T> valueFunc)
|
||||
=> new DelayedPureParser<TToken, T>(valueFunc);
|
||||
|
||||
/// <summary>
|
||||
@@ -40,7 +40,7 @@ public static class ParserBuilder
|
||||
/// <typeparam name="TToken"></typeparam>
|
||||
/// <returns></returns>
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static Parser<TToken, Unit> Null<TToken>() => Pure<TToken, Unit>(Unit.Instance);
|
||||
public static IParser<TToken, Unit> Null<TToken>() => Pure<TToken, Unit>(Unit.Instance);
|
||||
|
||||
/// <summary>
|
||||
/// 失败的解析器
|
||||
@@ -49,7 +49,7 @@ public static class ParserBuilder
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <returns></returns>
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static Parser<TToken, T> Fail<TToken, T>() => new FailedParser<TToken, T>();
|
||||
public static IParser<TToken, T> Fail<TToken, T>() => new FailedParser<TToken, T>();
|
||||
|
||||
/// <summary>
|
||||
/// 失败的解析器
|
||||
@@ -59,7 +59,7 @@ public static class ParserBuilder
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <returns></returns>
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static Parser<TToken, T> Fail<TToken, T>(string message) => new FailedParserWithMessage<TToken, T>(message);
|
||||
public static IParser<TToken, T> Fail<TToken, T>(string message) => new FailedParserWithMessage<TToken, T>(message);
|
||||
|
||||
/// <summary>
|
||||
/// 失败的解析器
|
||||
@@ -69,7 +69,7 @@ public static class ParserBuilder
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <returns></returns>
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static Parser<TToken, T> Fail<TToken, T>(Func<IReadState<TToken>, string> messageFunc) =>
|
||||
public static IParser<TToken, T> Fail<TToken, T>(Func<IReadState<TToken>, string> messageFunc) =>
|
||||
new FailedParserWithDelayedMessage<TToken, T>(messageFunc);
|
||||
|
||||
/// <summary>
|
||||
@@ -80,7 +80,7 @@ public static class ParserBuilder
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <returns></returns>
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static Parser<TToken, T> Fail<TToken, T>(Exception exception) =>
|
||||
public static IParser<TToken, T> Fail<TToken, T>(Exception exception) =>
|
||||
new FailedParserWithException<TToken, T>(exception);
|
||||
|
||||
/// <summary>
|
||||
@@ -90,7 +90,7 @@ public static class ParserBuilder
|
||||
/// <typeparam name="TToken"></typeparam>
|
||||
/// <returns></returns>
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static Parser<TToken, TToken> Satisfy<TToken>(Func<TToken, bool> predicate)
|
||||
public static IParser<TToken, TToken> Satisfy<TToken>(Func<TToken, bool> predicate)
|
||||
=> new SatisfyParser<TToken>(predicate);
|
||||
|
||||
/// <summary>
|
||||
@@ -99,7 +99,7 @@ public static class ParserBuilder
|
||||
/// <typeparam name="TToken"></typeparam>
|
||||
/// <returns></returns>
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static Parser<TToken, TToken> Any<TToken>() => Satisfy<TToken>(_ => true);
|
||||
public static IParser<TToken, TToken> Any<TToken>() => Satisfy<TToken>(_ => true);
|
||||
|
||||
/// <summary>
|
||||
/// 识别指定输入元素的解析器
|
||||
@@ -108,7 +108,7 @@ public static class ParserBuilder
|
||||
/// <typeparam name="TToken"></typeparam>
|
||||
/// <returns></returns>
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static Parser<TToken, TToken> Token<TToken>(TToken token)
|
||||
public static IParser<TToken, TToken> Token<TToken>(TToken token)
|
||||
=> Satisfy<TToken>(t => EqualityComparer<TToken>.Default.Equals(t, token));
|
||||
|
||||
/// <summary>
|
||||
@@ -118,7 +118,7 @@ public static class ParserBuilder
|
||||
/// <typeparam name="TToken"></typeparam>
|
||||
/// <returns></returns>
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static Parser<TToken, Unit> Skip<TToken>(int count) => new SkipParser<TToken>(count);
|
||||
public static IParser<TToken, Unit> Skip<TToken>(int count) => new SkipParser<TToken>(count);
|
||||
|
||||
/// <summary>
|
||||
/// 识别指定数量输入元素的解析器
|
||||
@@ -127,7 +127,7 @@ public static class ParserBuilder
|
||||
/// <typeparam name="TToken"></typeparam>
|
||||
/// <returns></returns>
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static Parser<TToken, IEnumerable<TToken>> Take<TToken>(int count) => new TakeParser<TToken>(count);
|
||||
public static IParser<TToken, IEnumerable<TToken>> Take<TToken>(int count) => new TakeParser<TToken>(count);
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -141,7 +141,7 @@ public static class ParserBuilder
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <returns></returns>
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static Parser<TToken, T> Fix<TToken, T>(Func<Parser<TToken, T>, Parser<TToken, T>> parserFix)
|
||||
public static IParser<TToken, T> Fix<TToken, T>(Func<IParser<TToken, T>, IParser<TToken, T>> parserFix)
|
||||
=> new FixParser<TToken, T>(parserFix);
|
||||
|
||||
#endregion
|
||||
@@ -156,7 +156,7 @@ public static class ParserBuilder
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <returns></returns>
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static Parser<TToken, T> Choice<TToken, T>(IEnumerable<Parser<TToken, T>> parsers)
|
||||
public static IParser<TToken, T> Choice<TToken, T>(IEnumerable<IParser<TToken, T>> parsers)
|
||||
=> parsers.Aggregate((result, parser) => result.Alternative(parser));
|
||||
|
||||
/// <summary>
|
||||
@@ -167,7 +167,7 @@ public static class ParserBuilder
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <returns></returns>
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static Parser<TToken, T> Choice<TToken, T>(params Parser<TToken, T>[] parsers)
|
||||
public static IParser<TToken, T> Choice<TToken, T>(params IParser<TToken, T>[] parsers)
|
||||
=> Choice(parsers.AsEnumerable());
|
||||
|
||||
/// <summary>
|
||||
@@ -178,7 +178,7 @@ public static class ParserBuilder
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <returns></returns>
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static Parser<TToken, IEnumerable<T>> Sequence<TToken, T>(IEnumerable<Parser<TToken, T>> parsers)
|
||||
public static IParser<TToken, IEnumerable<T>> Sequence<TToken, T>(IEnumerable<IParser<TToken, T>> parsers)
|
||||
=> parsers.Reverse().Aggregate(Pure<TToken, IEnumerable<T>>([]),
|
||||
(next, parser) => parser.Bind(
|
||||
x => next.Map(result => result.Prepend(x))));
|
||||
@@ -191,7 +191,7 @@ public static class ParserBuilder
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <returns></returns>
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static Parser<TToken, IEnumerable<T>> Sequence<TToken, T>(params Parser<TToken, T>[] parsers)
|
||||
public static IParser<TToken, IEnumerable<T>> Sequence<TToken, T>(params IParser<TToken, T>[] parsers)
|
||||
=> Sequence(parsers.AsEnumerable());
|
||||
|
||||
/// <summary>
|
||||
@@ -203,7 +203,7 @@ public static class ParserBuilder
|
||||
/// <typeparam name="TIgnore"></typeparam>
|
||||
/// <returns></returns>
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static Parser<TToken, IEnumerable<TToken>> TakeTill<TToken, TIgnore>(Parser<TToken, TIgnore> terminator)
|
||||
public static IParser<TToken, IEnumerable<TToken>> TakeTill<TToken, TIgnore>(IParser<TToken, TIgnore> terminator)
|
||||
=> Any<TToken>().ManyTill(terminator);
|
||||
|
||||
/// <summary>
|
||||
@@ -215,7 +215,7 @@ public static class ParserBuilder
|
||||
/// <typeparam name="TIgnore"></typeparam>
|
||||
/// <returns></returns>
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static Parser<TToken, IEnumerable<TToken>> Take1Till<TToken, TIgnore>(Parser<TToken, TIgnore> termintor)
|
||||
public static IParser<TToken, IEnumerable<TToken>> Take1Till<TToken, TIgnore>(IParser<TToken, TIgnore> termintor)
|
||||
=> Any<TToken>().Many1Till(termintor);
|
||||
|
||||
#endregion
|
||||
|
||||
Reference in New Issue
Block a user