Skip to content

Commit f5a4c4e

Browse files
committed
refact parser
1 parent b8bd672 commit f5a4c4e

File tree

15 files changed

+67
-52
lines changed

15 files changed

+67
-52
lines changed

src/SimpleStateMachine.StructuralSearch.Tests/FindTemplateTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public class FindTemplateTests
1313
public void TemplateParsingShouldBeSuccess(string templatePath)
1414
{
1515
var findTemplate = File.ReadAllText(templatePath);
16-
var template = StructuralSearch.ParseTemplate(findTemplate);
16+
var template = StructuralSearch.ParseFindTemplate(findTemplate);
1717

1818
Assert.NotNull(template);
1919
}
@@ -27,7 +27,7 @@ public void SourceParsingBeFindTemplateShouldBeSuccess(string templatePath, stri
2727
var findTemplate = File.ReadAllText(templatePath);
2828
var source = File.ReadAllText(sourcePath);
2929

30-
var template = StructuralSearch.ParseTemplate(findTemplate);
30+
var template = StructuralSearch.ParseFindTemplate(findTemplate);
3131
var result = template.ParseOrThrow(source);
3232

3333
Assert.NotNull(template);

src/SimpleStateMachine.StructuralSearch.Tests/PlaceholderParserTests.cs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,16 @@ public class PlaceholderParserTests
99
[Fact]
1010
public void FindTemplateShouldBeNotEmpty()
1111
{
12-
Assert.Throws<ParseException>(() => StructuralSearch.ParseTemplate(string.Empty));
12+
Assert.Throws<ParseException>(() => StructuralSearch.ParseFindTemplate(string.Empty));
1313
}
1414

15-
1615
[Theory]
1716
[InlineData("($test$)", "(value )", "value ")]
1817
[InlineData("($test$ )", "(value )", "value")]
1918
[InlineData("($test$)", "(value (test))", "value (test)")]
2019
public void TemplateParsingShouldBeSuccess(string template, string source, string result)
2120
{
22-
var templateParser = StructuralSearch.ParseTemplate(template);
21+
var templateParser = StructuralSearch.ParseFindTemplate(template);
2322
var res = templateParser.ParseOrThrow(source);
2423

2524
// var templateStr = File.ReadAllText(templatePath);
@@ -32,7 +31,7 @@ public void TemplateParsingShouldBeSuccess(string template, string source, strin
3231
[InlineData("$var$;$var2$;", "test;;;test;;;", "value ")]
3332
public void TemplateParsingShouldBeSuccess2(string template, string source, string result)
3433
{
35-
var templateParser = StructuralSearch.ParseTemplate(template);
34+
var templateParser = StructuralSearch.ParseFindTemplate(template);
3635
var res = templateParser.ParseOrThrow(source);
3736

3837
// var templateStr = File.ReadAllText(templatePath);

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,5 @@
3535
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
3636
</Content>
3737
</ItemGroup>
38-
39-
<ItemGroup>
40-
<Folder Include="ReplaceTemplate" />
41-
</ItemGroup>
4238

4339
</Project>

src/SimpleStateMachine.StructuralSearch/Extensions/ManyParserExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ public static class ManyParserExtensions
88
{
99
public static Parser<TToken, IEnumerable<T>> ToIEnumerable<TToken, T>(this Parser<TToken, List<T>> parser)
1010
{
11-
return parser.Cast<IEnumerable<T>>();
11+
return parser.As<TToken, List<T>, IEnumerable<T>>();
1212
}
1313
}
1414
}

src/SimpleStateMachine.StructuralSearch/Extensions/ParserExtensions.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,13 @@ public static Parser<TToken, T> BetweenAsThen<TToken, T, U, V>(this Parser<TToke
100100
throw new ArgumentNullException(nameof(parser2));
101101
return Parser.Map<TToken, U, T, V, T>(func, parser1, parser, parser2);
102102
}
103+
104+
public static Parser<TToken, R> As<TToken, T, R>(this Parser<TToken, T> parser)
105+
where T: R
106+
{
107+
return parser.Select(x => (R)x);
108+
}
109+
103110
// public static Parser<TToken, T> BetweenAsThen<TToken, T, U, V>(this Parser<TToken, T> parser, Parser<TToken, U> parser1, Parser<TToken, V> parser2, Func<U, T, V, T> func)
104111
// {
105112
// if (parser1 == null)

src/SimpleStateMachine.StructuralSearch/Extensions/SourceMatchManyParserExtensions.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,10 @@ public static class SourceMatchParserExtensions
1111
// {
1212
// return parsers.Select(x => Parsers.Series(x, getResult));
1313
// }
14-
14+
public static Parser<char, Parser<char, string>> JoinResults(this Parser<char, IEnumerable<Parser<char, string>>> parsers)
15+
{
16+
return parsers.Select(x => Parsers.Series(x, y => string.Join(string.Empty, y)));
17+
}
1518
public static Parser<char, Parser<char, SourceMatch>> JoinResults(this Parser<char, IEnumerable<Parser<char, SourceMatch>>> parsers)
1619
{
1720
return parsers.Select(x => Parsers.Series(x, y => y.Concatenate()));

src/SimpleStateMachine.StructuralSearch/ParserToParser.cs renamed to src/SimpleStateMachine.StructuralSearch/FindTemplate/ParserToParser.cs

File renamed without changes.

src/SimpleStateMachine.StructuralSearch/EmptyStringParser.cs renamed to src/SimpleStateMachine.StructuralSearch/Parsers/EmptyStringParser.cs

File renamed without changes.

src/SimpleStateMachine.StructuralSearch/Parsers/LookaheadParser.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@ public abstract class LookaheadParser<TToken, T> : Parser<TToken, T>
77
{
88
private Parser<TToken, T> _parser { get; set; }
99

10-
public abstract Parser<TToken, T> BuildParser<Res1, Res2>(Func<Parser<TToken, Res1>> next,
11-
Func<Parser<TToken, Res2>> nextNext);
10+
public abstract Parser<TToken, T> BuildParser(Func<Parser<TToken, T>?> next,
11+
Func<Parser<TToken, T>?> nextNext);
1212

13-
public void Lookahead<Res1, Res2>(Func<Parser<TToken, Res1>> next, Func<Parser<TToken, Res2>> nextNext)
13+
public void Lookahead(Func<Parser<TToken, T>?> next, Func<Parser<TToken, T>?> nextNext)
1414
{
1515
_parser = BuildParser(next, nextNext);
1616
}

src/SimpleStateMachine.StructuralSearch/Parsers/Parsers.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,22 @@ public static Parser<TToken, IEnumerable<T>> MapToMany<TToken, T>(Parser<TToken,
4343
return (IEnumerable<T>)result;
4444
}, parser1, parser2, parser3);
4545
}
46+
47+
public static Parser<TToken, IEnumerable<T>> MapToMany<TToken, T>(Parser<TToken, T> parser1,
48+
Parser<TToken, T> parser2)
49+
{
50+
if (parser1 == null)
51+
throw new ArgumentNullException(nameof(parser1));
52+
if (parser2 == null)
53+
throw new ArgumentNullException(nameof(parser2));
54+
55+
return Map((arg1, arg2) =>
56+
{
57+
var result = new List<T> { arg1, arg2 };
58+
return (IEnumerable<T>)result;
59+
}, parser1, parser2);
60+
}
61+
4662

4763
public static Parser<TToken, R> Series<TToken, T, R>(IEnumerable<Parser<TToken, T>> parsers,
4864
Func<IEnumerable<T>, R> func)

0 commit comments

Comments
 (0)