Skip to content

Commit 5b77543

Browse files
committed
readonly record struct, update .Net version
1 parent e47385d commit 5b77543

21 files changed

+208
-109
lines changed

global.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"sdk": {
3-
"version": "5.0.0",
3+
"version": "6.0.0",
44
"rollForward": "latestMinor",
55
"allowPrerelease": false
66
}

src/SimpleStateMachine.StructuralSearch.Sandbox/SimpleStateMachine.StructuralSearch.Sandbox.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55
<TargetFramework>net5.0</TargetFramework>
66
<ImplicitUsings>enable</ImplicitUsings>
77
<Nullable>enable</Nullable>
8-
<LangVersion>9</LangVersion>
8+
<LangVersion>10</LangVersion>
99
</PropertyGroup>
1010

1111
<ItemGroup>
12-
<PackageReference Include="Pidgin" Version="3.0.1" />
12+
<PackageReference Include="Pidgin" Version="3.1.0" />
1313
<PackageReference Include="YamlDotNet" Version="11.2.1" />
1414
</ItemGroup>
1515

src/SimpleStateMachine.StructuralSearch.Tests/Examples/TernaryOperator.cs

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,44 +6,44 @@ public class TernaryOperator
66
{
77
public int Test1()
88
{
9-
var temp = 150;
9+
var temp = 1;
1010

11-
if(temp == 125)
12-
return 12;
11+
if(temp == 2)
12+
return 3;
1313
else
14-
return 15;
14+
return 4;
1515
}
1616

1717
public int Test2()
1818
{
19-
var temp = 150;
19+
var temp = 5;
2020

21-
if(temp == 125)
22-
return 12;
21+
if(temp == 6)
22+
return 7;
2323
else
24-
return 15;
24+
return 8;
2525
}
2626

2727
public int Test3()
2828
{
29-
var temp2 = 150;
29+
var temp2 = 1;
3030

31-
if(temp2 == 125)
32-
return 12;
31+
if(temp2 == 2)
32+
return 3;
3333
else
34-
return 15;
34+
return 4;
3535
}
3636

3737
public int Test4()
3838
{
39-
var temp3 = 150;
39+
var temp3 = 5;
4040

41-
if(temp3 == 125)
42-
return 12;
43-
else if (temp3 == 135)
44-
return 15;
41+
if(temp3 == 6)
42+
return 7;
43+
else if (temp3 == 8)
44+
return 9;
4545
else
46-
return 0;
46+
return 10;
4747
}
4848

4949
public void Test5()

src/SimpleStateMachine.StructuralSearch.Tests/FindTemplateTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ public void SourceParsingBeFindTemplateShouldBeSuccess(string templatePath, stri
3434
var result = findParser.Parse(ref parsingContext, input);
3535

3636
Assert.NotNull(findParser);
37-
Assert.NotNull(result.Value);
38-
Assert.Equal(result.Lenght, source.Length);
37+
// Assert.NotNull(result.Value);
38+
Assert.Equal(result.Length, source.Length);
3939
}
4040
}
4141
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,17 @@
44
<TargetFramework>net5.0</TargetFramework>
55
<Nullable>enable</Nullable>
66
<IsPackable>false</IsPackable>
7-
<LangVersion>9</LangVersion>
7+
<LangVersion>10</LangVersion>
88
</PropertyGroup>
99

1010
<ItemGroup>
11-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.9.4" />
11+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.1.0" />
1212
<PackageReference Include="xunit" Version="2.4.1" />
1313
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
1414
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
1515
<PrivateAssets>all</PrivateAssets>
1616
</PackageReference>
17-
<PackageReference Include="coverlet.collector" Version="3.0.2">
17+
<PackageReference Include="coverlet.collector" Version="3.1.2">
1818
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
1919
<PrivateAssets>all</PrivateAssets>
2020
</PackageReference>
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
namespace SimpleStateMachine.StructuralSearch.Extensions;
2+
3+
public static class MatchExtensions
4+
{
5+
public static bool IsEmpty(this Match<string> match)
6+
{
7+
return string.IsNullOrEmpty(match.Value);
8+
}
9+
}

src/SimpleStateMachine.StructuralSearch/Extensions/ParserExtensions.cs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,44 @@ public static Parser<TToken, bool> Contains<TToken, T>(this Parser<TToken, T> pa
4949
: throw new ArgumentNullException(nameof(parser));
5050
}
5151

52+
// public static Parser<char, T> Match<T>(this Parser<char, T> parser, ref ParseState<char> state,
53+
// ref PooledList<Expected<char>> expected, out T result)
54+
// {
55+
// Parser<char>.CurrentPos.TryParse(ref state, ref expected, out var oldPos);
56+
// Parser<char>.CurrentOffset.TryParse(ref state, ref expected, out var oldOffset);
57+
// var res = parser.TryParse(ref state, ref expected, out result);
58+
//
59+
// if (res)
60+
// {
61+
// Parser<char>.CurrentPos.TryParse(ref state, ref expected, out var newPos);
62+
// Parser<char>.CurrentOffset.TryParse(ref state, ref expected, out var newOffset);
63+
//
64+
// var line = new LinePosition(oldPos.Line, newPos.Line);
65+
// var column = new ColumnPosition(oldPos.Col, newPos.Col);
66+
// var offset = new OffsetPosition(oldOffset, newOffset);
67+
//
68+
// return null;
69+
// }
70+
// }
71+
72+
public static Parser<char, Match<T>> Match<T>(this Parser<char, T> parser)
73+
{
74+
return Map((oldPos, oldOffset, result, newPos, newOffset) =>
75+
{
76+
var line = new LinePosition(oldPos.Line, newPos.Line);
77+
var column = new ColumnPosition(oldPos.Col, newPos.Col);
78+
var offset = new OffsetPosition(oldOffset, newOffset);
79+
var lenght = newOffset - oldOffset;
80+
return new Match<T>(result, lenght, column, line, offset);
81+
},
82+
Parser<char>.CurrentPos, Parser<char>.CurrentOffset,
83+
parser,
84+
Parser<char>.CurrentPos, Parser<char>.CurrentOffset);
85+
}
86+
87+
88+
89+
5290
// public static Parser<TToken, TOut> WithResult<TToken, TOut>(this Parser<TToken, TOut> parser, Func<TToken, SourcePos, TOut> transformResult)
5391
// {
5492
// = Parser<TToken>.CurrentSourcePosDelta.Select<SourcePos>((Func<SourcePosDelta, SourcePos>) (d => new SourcePos(1, 1) + d));
Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1-
using System.Collections.Generic;
1+
using System;
2+
using System.Collections.Generic;
23
using System.IO;
4+
using System.Linq;
5+
using System.Text;
36
using Pidgin;
47
using SimpleStateMachine.StructuralSearch.Extensions;
58
using YamlDotNet.Core.Events;
@@ -14,14 +17,23 @@ public FindParser(SeriesParser parser)
1417
Parser = parser;
1518
}
1619

17-
public SourceMatch Parse(ref IParsingContext context, IInput input)
20+
public string Parse(ref IParsingContext context, IInput input)
1821
{
22+
StringBuilder res = new StringBuilder();
1923
Parser.SetContext(ref context);
20-
21-
var result = input.Parse(Parser.Select(x => string.Join(string.Empty, x))
22-
.AsMatch());
23-
24-
return result.Success ? result.Value : SourceMatch.Empty;
24+
var parser = Parser.Select(x => string.Join(string.Empty, x)).Match().Try();
25+
var empty = Pidgin.Parser<char>.Any.Select(x=>
26+
{
27+
res.Append(x);
28+
return string.Empty;
29+
}).ThenReturn(Match.EmptyMatchString);
30+
var parse = Pidgin.Parser.OneOf(parser, empty)
31+
.Many();
32+
33+
var result = input.Parse(parse);
34+
var t = result.Value.Where(x => !x.IsEmpty());
35+
// return result.Success ? result.Value.JoinToString() : string.Empty;
36+
return string.Empty;
2537
}
2638
}
2739
}

src/SimpleStateMachine.StructuralSearch/IFindParser.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@ namespace SimpleStateMachine.StructuralSearch
77
{
88
public interface IFindParser
99
{
10-
SourceMatch Parse(ref IParsingContext context, IInput input);
10+
string Parse(ref IParsingContext context, IInput input);
1111
}
1212
}

src/SimpleStateMachine.StructuralSearch/Parsers/ParserWithLookahead.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
using System;
22
using System.Collections.Generic;
3+
using System.Runtime.CompilerServices;
34
using Pidgin;
5+
using SimpleStateMachine.StructuralSearch.Extensions;
46

57
namespace SimpleStateMachine.StructuralSearch
68
{
79
public abstract class ParserWithLookahead<TToken, T> : Parser<TToken, T>
810
{
9-
private Func<Parser<TToken, T>> _parser { get; set; }
11+
protected Lazy<Parser<TToken, T>> parser;
1012

1113
public Func<IEnumerable<LookaheadResult<TToken, T>>> OnLookahead { get; set; }
1214

@@ -16,13 +18,13 @@ public abstract Parser<TToken, T> BuildParser(Func<Parser<TToken, T>?> next,
1618
public void Lookahead(Func<Parser<TToken, T>?> next, Func<Parser<TToken, T>?> nextNext)
1719
{
1820
// lazy initialization
19-
_parser = () => BuildParser(next, nextNext);
21+
parser = new Lazy<Parser<TToken, T>>(() => BuildParser(next, nextNext));
2022
}
2123

2224
public override bool TryParse(ref ParseState<TToken> state, ref PooledList<Expected<TToken>> expected,
2325
out T result)
2426
{
25-
var res = _parser().TryParse(ref state, ref expected, out result);
27+
var res = parser.Value.TryParse(ref state, ref expected, out result);
2628
return res;
2729
}
2830
}

0 commit comments

Comments
 (0)