Skip to content

Commit 7a7cd1e

Browse files
committed
Simplify parsers
1 parent eb9bc54 commit 7a7cd1e

File tree

16 files changed

+108
-105
lines changed

16 files changed

+108
-105
lines changed

src/SimpleStateMachine.StructuralSearch.Tests/StructuralSearchTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,12 @@ public static void StructuralSearchShouldBeSuccess2(string filePath)
4747
var configuration = new Configuration
4848
{
4949
FindTemplate = "$Modificator$ $ReturnType$ $MethodName$($params$)",
50-
FindRules = new List<string>
51-
{
50+
FindRules =
51+
[
5252
"$Modificator$ in (\"public\", \"private\", \"internal\")",
5353
"$ReturnType$ is var",
5454
"$MethodName$ is var"
55-
}
55+
]
5656
};
5757

5858
var parser = new StructuralSearchParser(configuration);

src/SimpleStateMachine.StructuralSearch/Constant.cs

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -153,26 +153,24 @@ internal static class Constant
153153
RightCurlyParenthesis
154154
};
155155

156-
public static class FindTemplate
156+
public static readonly IReadOnlySet<char> InvalidStringLiteralChars = new HashSet<char>(AllParenthesis)
157157
{
158-
public static readonly IReadOnlySet<char> All = new HashSet<char>(AllParenthesis)
159-
{
160-
PlaceholderSeparator,
161-
CarriageReturn,
162-
LineFeed,
163-
Space
164-
};
165-
}
166-
167-
public static class Parameter
158+
CarriageReturn,
159+
LineFeed,
160+
Space
161+
};
162+
163+
public static readonly IReadOnlySet<char> All = new HashSet<char>(InvalidStringLiteralChars)
168164
{
169-
public static readonly IReadOnlySet<char> Escape = new HashSet<char>
170-
{
171-
DoubleQuotes,
172-
PlaceholderSeparator,
173-
Dote
174-
};
175-
176-
public static readonly IReadOnlySet<char> Excluded = AllParenthesis.Union(Escape).ToHashSet();
177-
}
165+
PlaceholderSeparator,
166+
};
167+
168+
public static readonly IReadOnlySet<char> CharsToEscape = new HashSet<char>
169+
{
170+
DoubleQuotes,
171+
PlaceholderSeparator,
172+
Dote
173+
};
174+
175+
public static readonly IReadOnlySet<char> LanguageSyntaxChars = AllParenthesis.Union(CharsToEscape).ToHashSet();
178176
}

src/SimpleStateMachine.StructuralSearch/Extensions/StringParserExtensions.cs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
using System;
22
using System.Collections.Generic;
33
using Pidgin;
4-
using static Pidgin.Parser;
54

65
namespace SimpleStateMachine.StructuralSearch.Extensions;
76

@@ -16,7 +15,7 @@ public static Parser<TToken, string> BetweenAsThen<TToken>(this Parser<TToken, s
1615
if (parser2 == null)
1716
throw new ArgumentNullException(nameof(parser2));
1817

19-
return Map<TToken, char, string, char, string>(
18+
return Parser.Map<TToken, char, string, char, string>(
2019
(before, str, after) => before + str + after,
2120
parser1, parser, parser2);
2221
}
@@ -30,7 +29,7 @@ public static Parser<TToken, string> BetweenAsThen<TToken>(this Parser<TToken, s
3029
if (parser2 == null)
3130
throw new ArgumentNullException(nameof(parser2));
3231

33-
return Map<TToken, string, string, string, string>(
32+
return Parser.Map<TToken, string, string, string, string>(
3433
(before, str, after) => before + str + after,
3534
parser1, parser, parser2);
3635
}
@@ -56,13 +55,13 @@ public static Parser<TToken, SourceMatch> AsMatch<TToken>(this Parser<TToken, st
5655
=> parser.Then(Parser<TToken>.CurrentOffset, (s, offset) => new SourceMatch(s, offset - s.Length, offset));
5756

5857
public static Parser<char, T> TrimEnd<T>(this Parser<char, T> parser)
59-
=> parser.Before(SkipWhitespaces);
58+
=> parser.Before(Parser.SkipWhitespaces);
6059

6160
public static Parser<char, T> TrimStart<T>(this Parser<char, T> parser)
62-
=> parser.After(SkipWhitespaces);
61+
=> parser.After(Parser.SkipWhitespaces);
6362

6463
public static Parser<char, T> Trim<T>(this Parser<char, T> parser)
65-
=> parser.Between(SkipWhitespaces);
64+
=> parser.Between(Parser.SkipWhitespaces);
6665

6766
public static Parser<char, TEnum> AsEnum<TEnum>(this Parser<char, string> parser, bool ignoreCase)
6867
where TEnum : struct, Enum

src/SimpleStateMachine.StructuralSearch/Parsers/DebugParser.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
using Pidgin;
22

3-
#pragma warning disable CS9074 // The 'scoped' modifier of parameter doesn't match overridden or implemented member.
4-
53
namespace SimpleStateMachine.StructuralSearch.Parsers;
64

75
internal class DebugParser<TToken, T> : Parser<TToken, T>

src/SimpleStateMachine.StructuralSearch/Parsers/EmptyStringParser.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
using Pidgin;
22

3-
#pragma warning disable CS9074 // The 'scoped' modifier of parameter doesn't match overridden or implemented member.
4-
53
namespace SimpleStateMachine.StructuralSearch.Parsers;
64

75
internal class EmptyStringParser : Parser<char, string>

src/SimpleStateMachine.StructuralSearch/Parsers/ParserWithLookahead.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22
using System.Collections.Generic;
33
using Pidgin;
44

5-
#pragma warning disable CS9074 // The 'scoped' modifier of parameter doesn't match overridden or implemented member.
6-
75
namespace SimpleStateMachine.StructuralSearch.Parsers;
86

97
internal abstract class ParserWithLookahead<TToken, T> : Parser<TToken, T>

src/SimpleStateMachine.StructuralSearch/Parsers/Parsers.cs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,13 @@
33
using System.Linq;
44
using Pidgin;
55
using SimpleStateMachine.StructuralSearch.Extensions;
6-
using static Pidgin.Parser;
76

87
namespace SimpleStateMachine.StructuralSearch.Parsers;
98

109
internal static class Parsers
1110
{
1211
public static Parser<char, string> String(string value, bool ignoreCase)
13-
=> ignoreCase ? CIString(value): Parser.String(value);
12+
=> ignoreCase ? Parser.CIString(value): Parser.String(value);
1413

1514
public static Parser<char, TEnum> After<TEnum>(TEnum value, bool ignoreCase = false)
1615
where TEnum : struct, Enum
@@ -23,7 +22,7 @@ private static Parser<TToken, IEnumerable<T>> MapToMany<TToken, T>(Parser<TToken
2322
ArgumentNullException.ThrowIfNull(parser2);
2423
ArgumentNullException.ThrowIfNull(parser3);
2524

26-
return Map((arg1, arg2, arg3) => (IEnumerable<T>)new List<T> { arg1, arg2, arg3 }, parser1, parser2, parser3);
25+
return Parser.Map((arg1, arg2, arg3) => (IEnumerable<T>)new List<T> { arg1, arg2, arg3 }, parser1, parser2, parser3);
2726
}
2827

2928
private static Parser<TToken, IEnumerable<T>> MapToMany<TToken, T>(Parser<TToken, T> parser1,
@@ -33,7 +32,7 @@ private static Parser<TToken, IEnumerable<T>> MapToMany<TToken, T>(Parser<TToken
3332
ArgumentNullException.ThrowIfNull(parser2);
3433
ArgumentNullException.ThrowIfNull(parser3);
3534

36-
return Map((arg1, arg2, arg3) =>
35+
return Parser.Map((arg1, arg2, arg3) =>
3736
{
3837
var result = arg2.ToList();
3938
result.Insert(0, arg1);
@@ -50,7 +49,7 @@ public static Parser<TToken, IEnumerable<T>> MapToMany<TToken, T>(Parser<TToken,
5049
if (parser2 == null)
5150
throw new ArgumentNullException(nameof(parser2));
5251

53-
return Map((arg1, arg2) =>
52+
return Parser.Map((arg1, arg2) =>
5453
{
5554
var result = new List<T> { arg1, arg2 };
5655
return (IEnumerable<T>)result;
@@ -63,13 +62,13 @@ public static Parser<char, IEnumerable<T>> BetweenChars<T>(char left, char right
6362
=> MapToMany(leftRight(left), expr, leftRight(right));
6463

6564
public static Parser<char, IEnumerable<T>> BetweenOneOfChars<T>(Func<char, Parser<char, T>> leftRight, Parser<char, IEnumerable<T>> expr, params (char, char)[] values)
66-
=> OneOf(values.Select(x => MapToMany(leftRight(x.Item1), expr, leftRight(x.Item2))));
65+
=> Parser.OneOf(values.Select(x => MapToMany(leftRight(x.Item1), expr, leftRight(x.Item2))));
6766

6867
public static Parser<char, IEnumerable<T>> BetweenOneOfChars<T>(Func<char, Parser<char, T>> leftRight, Parser<char, T> expr, params (char, char)[] values)
69-
=> OneOf(values.Select(x => MapToMany(leftRight(x.Item1), expr, leftRight(x.Item2))));
68+
=> Parser.OneOf(values.Select(x => MapToMany(leftRight(x.Item1), expr, leftRight(x.Item2))));
7069

7170
public static Parser<char, (TResult, T)> BetweenOneOfChars<T, TResult>(Func<char, char, TResult> resultFunc, Parser<char, T> expr, params (char, char)[] values)
72-
=> OneOf(values.Select(x => Map((c1, res, c2) => (resultFunc(c1, c2), res), Char(x.Item1).Try(), expr, Char(x.Item2).Try())));
71+
=> Parser.OneOf(values.Select(x => Parser.Map((c1, res, c2) => (resultFunc(c1, c2), res), Parser.Char(x.Item1).Try(), expr, Parser.Char(x.Item2).Try())));
7372

7473
public static Parser<char, TEnum> EnumExcept<TEnum>(bool ignoreCase = false, params TEnum[] excluded)
7574
where TEnum : struct, Enum
@@ -80,7 +79,7 @@ public static Parser<char, TEnum> EnumValue<TEnum>(TEnum value, bool ignoreCase
8079
=> String(value.ToString(), ignoreCase).AsEnum<TEnum>(ignoreCase);
8180

8281
public static Parser<char, Match<T>> Match<T>(Parser<char, T> parser)
83-
=> Map((oldPos, oldOffset, result, newPos, newOffset) =>
82+
=> Parser.Map((oldPos, oldOffset, result, newPos, newOffset) =>
8483
{
8584
var line = new LinePosition(oldPos.Line, newPos.Line);
8685
var column = new ColumnPosition(oldPos.Col, newPos.Col);

src/SimpleStateMachine.StructuralSearch/Parsers/PlaceholderParser.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,10 @@ protected override Parser<char, string> BuildParser(Func<Parser<char, string>?>
5353
}).Try());
5454
}
5555

56-
var anyString = CommonTemplateParser.AnyCharWithPlaceholder
56+
var anyString = CommonTemplateParser.StringLiteralChar
5757
.AtLeastOnceAsStringUntil(lookahead);
5858

59-
var simpleString = CommonTemplateParser.StringWithPlaceholder;
59+
var simpleString = CommonTemplateParser.StringLiteral;
6060
var token = Parser.OneOf(simpleString, CommonParser.WhiteSpaces).Try();
6161
Parser<char, string>? term = null;
6262

src/SimpleStateMachine.StructuralSearch/Parsers/SeriesParser.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33
using Pidgin;
44
using SimpleStateMachine.StructuralSearch.Context;
55

6-
#pragma warning disable CS9074 // The 'scoped' modifier of parameter doesn't match overridden or implemented member.
7-
86
namespace SimpleStateMachine.StructuralSearch.Parsers;
97

108
internal class SeriesParser : Parser<char, IEnumerable<string>>, IContextDependent

src/SimpleStateMachine.StructuralSearch/Rules/Parameters/StringParameter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public string GetValue(ref IParsingContext context)
1616

1717
public override string ToString()
1818
{
19-
var value = EscapeHelper.EscapeChars(_value, c => $"{Constant.BackSlash}{c}", Constant.Parameter.Escape);
19+
var value = EscapeHelper.EscapeChars(_value, c => $"{Constant.BackSlash}{c}", Constant.CharsToEscape);
2020
return $"{value}";
2121
}
2222
}

0 commit comments

Comments
 (0)