Skip to content

Commit eb9bc54

Browse files
committed
Use Input and findRules as FindParser parameter
1 parent 737c701 commit eb9bc54

32 files changed

+340
-502
lines changed

src/SimpleStateMachine.StructuralSearch.Tests/ParameterParserTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public static void StringParameterParsingShouldBeFail(string str)
3030
{
3131
Assert.Throws<ParseException<char>>(() =>
3232
{
33-
var result = ParametersParser.StringParameter.Before(CommonParser.EOF).ParseOrThrow(str);
33+
var result = ParametersParser.StringParameter.Before(CommonParser.Eof).ParseOrThrow(str);
3434
return result;
3535
});
3636
}

src/SimpleStateMachine.StructuralSearch.Tests/ReplaceTemplateTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ public static void ReplaceBuildShouldBeSuccess(string templatePath, string resul
3737
var replaceTemplate = File.ReadAllText(templatePath);
3838
var replaceResult = File.ReadAllText(resultPath);
3939
var replaceBuilder = StructuralSearch.StructuralSearch.ParseReplaceTemplate(replaceTemplate);
40-
41-
IParsingContext parsingContext = new ParsingContext(Input.Input.Empty);
40+
41+
IParsingContext parsingContext = new ParsingContext(Input.Input.Empty, []);
4242
for (int i = 0; i < keys.Length; i++)
4343
{
4444
parsingContext[keys[i]] = Placeholder.Placeholder.CreateEmpty(keys[i], values[i]);

src/SimpleStateMachine.StructuralSearch.Tests/SimpleStateMachine.StructuralSearch.Tests.csproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
<TargetFramework>net8.0</TargetFramework>
55
<Nullable>enable</Nullable>
66
<IsPackable>false</IsPackable>
7-
<LangVersion>10</LangVersion>
87
<Nullable>enable</Nullable>
98
</PropertyGroup>
109

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
using System.Collections.Generic;
22
using SimpleStateMachine.StructuralSearch.Input;
33
using SimpleStateMachine.StructuralSearch.Placeholder;
4+
using SimpleStateMachine.StructuralSearch.Rules.FindRules;
45

56
namespace SimpleStateMachine.StructuralSearch.Context;
67

7-
internal interface IParsingContext : IDictionary<string, IPlaceholder>
8+
public interface IParsingContext : IDictionary<string, IPlaceholder>
89
{
910
IInput Input { get; }
11+
IReadOnlyCollection<IFindRule> FindRules { get; }
1012
}
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
using System.Collections.Generic;
22
using SimpleStateMachine.StructuralSearch.Input;
33
using SimpleStateMachine.StructuralSearch.Placeholder;
4+
using SimpleStateMachine.StructuralSearch.Rules.FindRules;
45

56
namespace SimpleStateMachine.StructuralSearch.Context;
67

78
internal class ParsingContext : Dictionary<string, IPlaceholder>, IParsingContext
89
{
9-
public ParsingContext(IInput input)
10+
public ParsingContext(IInput input, IReadOnlyCollection<IFindRule> findRules)
1011
{
1112
Input = input;
13+
FindRules = findRules;
1214
}
1315

1416
public IInput Input { get; }
17+
public IReadOnlyCollection<IFindRule> FindRules { get; }
1518
}

src/SimpleStateMachine.StructuralSearch/Extensions/EnumerableCharExtensions.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ internal static class EnumerableCharExtensions
99
public static Parser<TToken, string> AsString<TToken>(this Parser<TToken, IEnumerable<char>> parser)
1010
=> parser.Select(x => new string(x.ToArray()));
1111

12-
public static Parser<TToken, IEnumerable<T>> MergerMany<TToken, T>(this Parser<TToken, IEnumerable<IEnumerable<T>>> parser)
12+
public static Parser<TToken, IEnumerable<T>> SelectMany<TToken, T>(this Parser<TToken, IEnumerable<IEnumerable<T>>> parser)
1313
=> parser.Select(x => x.SelectMany(y => y));
1414

15-
public static Parser<TToken, IEnumerable<T>> MergerMany<TToken, T>(this Parser<TToken, IEnumerable<List<T>>> parser)
15+
public static Parser<TToken, IEnumerable<T>> SelectMany<TToken, T>(this Parser<TToken, IEnumerable<List<T>>> parser)
1616
=> parser.Select(x => x.SelectMany(y => y));
1717
}

src/SimpleStateMachine.StructuralSearch/Extensions/IEnumerableExtensions.cs renamed to src/SimpleStateMachine.StructuralSearch/Extensions/EnumerableExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace SimpleStateMachine.StructuralSearch.Extensions;
44

5-
internal static class IEnumerableExtensions
5+
internal static class EnumerableExtensions
66
{
77
public static IEnumerable<T> EmptyIfNull<T>(this IEnumerable<T>? enumerable)
88
=> enumerable ?? [];

src/SimpleStateMachine.StructuralSearch/Extensions/ParserExtensions.cs

Lines changed: 30 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -2,52 +2,55 @@
22
using Pidgin;
33
using System.Collections.Generic;
44
using SimpleStateMachine.StructuralSearch.StructuralSearch;
5-
using static Pidgin.Parser;
65

76
namespace SimpleStateMachine.StructuralSearch.Extensions;
87

98
internal static class ParserExtensions
109
{
11-
public static Parser<TToken, T> Try<TToken, T>(this Parser<TToken, T> parser)
10+
public static Parser<TToken, T> Try<TToken, T>(this Parser<TToken, T> parser)
1211
=> Parser.Try(parser);
1312

14-
public static Parser<TToken, IEnumerable<T>> AsMany<TToken, T>(this Parser<TToken, T> parser)
15-
=> parser.Select(x => (IEnumerable<T>)new List<T> { x });
13+
public static Parser<TToken, IEnumerable<T>> AsMany<TToken, T>(this Parser<TToken, T> parser)
14+
=> parser.Select(IEnumerable<T> (x) => new List<T> { x });
15+
16+
public static Parser<TToken, T> AsLazy<TToken, T>(this Func<Parser<TToken, T>> parser)
17+
=> Parser.Rec(() => parser() ?? throw new ArgumentNullException(nameof(parser)));
1618

1719
public static Parser<TToken, IEnumerable<T>> AtLeastOnceUntilNot<TToken, T, U>(this Parser<TToken, T> parser, Parser<TToken, U> terminator) =>
1820
parser != null
19-
? parser.AtLeastOnceUntil(Not(terminator))
21+
? parser.AtLeastOnceUntil(Parser.Not(terminator))
2022
: throw new ArgumentNullException(nameof(parser));
2123

22-
public static Parser<TToken, IEnumerable<T>> UntilNot<TToken, T, U>(this Parser<TToken, T> parser, Parser<TToken, U> terminator) =>
23-
parser != null
24-
? parser.Until(Not(terminator))
25-
: throw new ArgumentNullException(nameof(parser));
24+
public static Parser<TToken, IEnumerable<T>> UntilNot<TToken, T, U>(this Parser<TToken, T> parser, Parser<TToken, U> terminator)
25+
{
26+
ArgumentNullException.ThrowIfNull(parser);
27+
28+
return parser.Until(Parser.Not(terminator));
29+
}
2630

2731
public static bool TryParse(this Parser<char, string> parser, string value, out string? result)
2832
{
29-
if (parser is null)
30-
throw new ArgumentNullException(nameof(parser));
31-
33+
ArgumentNullException.ThrowIfNull(parser);
34+
3235
var res = parser.Parse(value);
3336
result = res.Success ? res.Value : default;
3437
return res.Success;
3538
}
36-
37-
public static Parser<TToken, T> ThenInvoke<TToken, T>(this Parser<TToken, T> parser, Action<T> action)
39+
40+
public static Parser<TToken, T> ThenInvoke<TToken, T>(this Parser<TToken, T> parser, Action<T> action)
3841
=> parser.Select(x =>
3942
{
4043
action.Invoke(x);
4144
return x;
4245
});
4346

44-
public static Parser<TToken, bool> Contains<TToken, T>(this Parser<TToken, T> parser)
47+
public static Parser<TToken, bool> Contains<TToken, T>(this Parser<TToken, T> parser)
4548
=> parser != null
4649
? parser.Optional().Select(x => x.HasValue)
4750
: throw new ArgumentNullException(nameof(parser));
4851

49-
public static Parser<char, Match<T>> Match<T>(this Parser<char, T> parser)
50-
=> Map((oldPos, oldOffset, result, newPos, newOffset) =>
52+
public static Parser<char, Match<T>> Match<T>(this Parser<char, T> parser)
53+
=> Parser.Map((oldPos, oldOffset, result, newPos, newOffset) =>
5154
{
5255
var line = new LinePosition(oldPos.Line, newPos.Line);
5356
var column = new ColumnPosition(oldPos.Col, newPos.Col);
@@ -59,42 +62,27 @@ public static Parser<char, Match<T>> Match<T>(this Parser<char, T> parser)
5962
parser,
6063
Parser<char>.CurrentPos, Parser<char>.CurrentOffset);
6164

62-
public static Parser<TToken, T> WithDebug<TToken, T>(this Parser<TToken, T> parser, string label)
63-
=> Map((u, t, v) =>
65+
public static Parser<TToken, T> WithDebug<TToken, T>(this Parser<TToken, T> parser, string label)
66+
=> Parser.Map((u, t, _) =>
6467
{
6568
Console.WriteLine($"{label} ({t.Col}) : {u} ");
6669
return u;
6770
}, parser, Parser<TToken>.CurrentPos, Parser<TToken>.CurrentSourcePosDelta);
6871

69-
public static Parser<TToken, T> WithDebug<TToken, T>(this Parser<TToken, T> parser)
70-
{
71-
return Map((u, t, v) =>
72+
public static Parser<TToken, T> WithDebug<TToken, T>(this Parser<TToken, T> parser) =>
73+
Parser.Map((u, t, _) =>
7274
{
7375
Console.WriteLine($"({t.Col}) : {u} ");
7476
return u;
7577
}, parser, Parser<TToken>.CurrentPos, Parser<TToken>.CurrentSourcePosDelta);
76-
}
7778

78-
public static Parser<TToken, T> BetweenAsThen<TToken, T, U, V>(this Parser<TToken, T> parser,
79-
Parser<TToken, U> parser1,
80-
Parser<TToken, V> parser2, Func<U, T, V, T> func)
81-
{
82-
if (parser1 == null)
83-
throw new ArgumentNullException(nameof(parser1));
84-
if (parser2 == null)
85-
throw new ArgumentNullException(nameof(parser2));
86-
87-
return Map(func, parser1, parser, parser2);
88-
}
89-
90-
public static Parser<TToken, R> As<TToken, T, R>(this Parser<TToken, T> parser)
91-
where T: R
92-
=> parser.Select(x => (R)x);
79+
public static Parser<TToken, TInterface> As<TToken, TClass, TInterface>(this Parser<TToken, TClass> parser)
80+
where TClass : TInterface => parser.Select(x => (TInterface)x);
9381

94-
public static Parser<TToken, T> After<TToken, T, U>(this Parser<TToken, T> parser, Parser<TToken, U> parserAfter)
95-
=> parserAfter.Then(parser, (u, t) => t);
82+
public static Parser<TToken, T> After<TToken, T, TNextToken>(this Parser<TToken, T> parser, Parser<TToken, TNextToken> parserAfter)
83+
=> parserAfter.Then(parser, (_, t) => t);
9684

9785
// TODO optimization
98-
public static Parser<char, T> ParenthesisedOptional<T, TResult>(this Parser<char, T> parser, Func<char, Parser<char, TResult>> custom)
99-
=> OneOf(CommonParser.Parenthesised(parser, custom).Try(), parser);
86+
public static Parser<char, T> ParenthesisedOptional<T, TResult>(this Parser<char, T> parser, Func<char, Parser<char, TResult>> custom)
87+
=> Parser.OneOf(CommonParser.Parenthesised(parser, custom).Try(), parser);
10088
}

src/SimpleStateMachine.StructuralSearch/Extensions/IRuleParameterExtensions.cs renamed to src/SimpleStateMachine.StructuralSearch/Extensions/RuleParameterExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace SimpleStateMachine.StructuralSearch.Extensions;
44

5-
internal static class IRuleParameterExtensions
5+
internal static class RuleParameterExtensions
66
{
77
public static bool IsApplicableForPlaceholder(this IRuleParameter parameter, string placeholderName)
88
=> parameter is IPlaceholderRelatedRuleParameter relatedRuleParameter && relatedRuleParameter.PlaceholderName == placeholderName;

src/SimpleStateMachine.StructuralSearch/Extensions/StringParserExtensions.cs

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ public static Parser<TToken, string> BetweenAsThen<TToken>(this Parser<TToken, s
2020
(before, str, after) => before + str + after,
2121
parser1, parser, parser2);
2222
}
23-
24-
public static Parser<TToken, string> BetweenAsThen<TToken>(this Parser<TToken, string> parser,
23+
24+
public static Parser<TToken, string> BetweenAsThen<TToken>(this Parser<TToken, string> parser,
2525
Parser<TToken, string> parser1,
2626
Parser<TToken, string> parser2)
2727
{
@@ -34,36 +34,37 @@ public static Parser<TToken, string> BetweenAsThen<TToken>(this Parser<TToken, s
3434
(before, str, after) => before + str + after,
3535
parser1, parser, parser2);
3636
}
37+
3738
// public static Parser<TToken, IEnumerable<string>> ToMany<TToken>(this Parser<TToken, string> parser)
3839
// => parser.Select(x => new List<string> { x }).As<TToken, List<string>, IEnumerable<string>>();
39-
public static Parser<TToken, IEnumerable<string>> ToMany<TToken>(this Parser<TToken, string> parser)
40+
public static Parser<TToken, IEnumerable<string>> ToMany<TToken>(this Parser<TToken, string> parser)
4041
=> parser.Select(x => new List<string>() { x }).ToIEnumerable();
4142

4243
public static Parser<TToken, string> JoinToString<TToken>(this Parser<TToken, IEnumerable<string>> parser, string? separator = null)
4344
{
4445
separator ??= string.Empty;
4546
return parser.Select(x => string.Join(separator, x));
4647
}
47-
48+
4849
public static Parser<TToken, string> JoinToString<TToken>(this Parser<TToken, List<string>> parser, string? separator = null)
4950
{
5051
separator ??= string.Empty;
5152
return parser.Select(x => string.Join(separator, x));
5253
}
53-
54-
public static Parser<TToken, SourceMatch> AsMatch<TToken>(this Parser<TToken, string> parser)
54+
55+
public static Parser<TToken, SourceMatch> AsMatch<TToken>(this Parser<TToken, string> parser)
5556
=> parser.Then(Parser<TToken>.CurrentOffset, (s, offset) => new SourceMatch(s, offset - s.Length, offset));
5657

57-
public static Parser<char, T> TrimEnd<T>(this Parser<char, T> parser)
58+
public static Parser<char, T> TrimEnd<T>(this Parser<char, T> parser)
5859
=> parser.Before(SkipWhitespaces);
5960

60-
public static Parser<char, T> TrimStart<T>(this Parser<char, T> parser)
61+
public static Parser<char, T> TrimStart<T>(this Parser<char, T> parser)
6162
=> parser.After(SkipWhitespaces);
6263

63-
public static Parser<char, T> Trim<T>(this Parser<char, T> parser)
64+
public static Parser<char, T> Trim<T>(this Parser<char, T> parser)
6465
=> parser.Between(SkipWhitespaces);
6566

6667
public static Parser<char, TEnum> AsEnum<TEnum>(this Parser<char, string> parser, bool ignoreCase)
67-
where TEnum: struct, Enum
68+
where TEnum : struct, Enum
6869
=> parser.Select(value => System.Enum.Parse<TEnum>(value, ignoreCase));
6970
}

0 commit comments

Comments
 (0)