Skip to content

Commit 64ca506

Browse files
committed
Fix parenthesised parser, fix placeholder parser
1 parent c181e46 commit 64ca506

File tree

20 files changed

+250
-66
lines changed

20 files changed

+250
-66
lines changed

src/SimpleStateMachine.StructuralSearch.Sandbox/Program.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,20 @@
1-
using Pidgin;
1+
using System;
2+
using Pidgin;
3+
using SimpleStateMachine.StructuralSearch.Extensions;
4+
using static Pidgin.Parser;
5+
using static Pidgin.Parser<char>;
26

37
namespace SimpleStateMachine.StructuralSearch.Sandbox
48
{
59
internal static class Program
610
{
711
static void Main(string[] args)
812
{
13+
var test = Parser.OneOf(String("Test"), CommonParser.Empty);
14+
var res = test.ParseOrThrow("");
15+
// var lookahead = Parser.Lookahead(Char(';').Then(End).Try());
16+
// var t = Parser.String("return ").Then(Any.AtLeastOnceAsStringUntilNot(lookahead));
17+
// var res = t.ParseOrThrow("return 124;;");
918
// var testTempalte = "if($test$)";
1019
// var testText = "if((value1)&&(value2))";
1120
// var testTextForMatch = "fdjkfnafdjankfjnafkajndaif((value1)&&(value2))";

src/SimpleStateMachine.StructuralSearch.Tests/FindTemplateTests.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,13 @@ public void TemplateParsingShouldBeSuccess(string templatePath)
2020

2121
[Theory]
2222
[InlineData("Templates/IfElseTemplate.txt", "Sources/IfElseSource.txt")]
23-
[InlineData("Templates/IfValueIsNullTemplate.txt", "Templates/IfValueIsNullSource.txt")]
24-
[InlineData("Templates/NestedParenthesisedTemplate.txt", "Templates/NestedParenthesisedSource.txt")]
23+
[InlineData("Templates/IfValueIsNullTemplate.txt", "Sources/IfValueIsNullSource.txt")]
24+
[InlineData("Templates/NestedParenthesisedTemplate.txt", "Sources/NestedParenthesisedSource.txt")]
2525
public void SourceParsingBeTemplateShouldBeSuccess(string templatePath, string sourcePath)
2626
{
2727
var templateStr = File.ReadAllText(templatePath);
28-
var sourceStr = File.ReadAllText(templatePath);
29-
28+
var sourceStr = File.ReadAllText(sourcePath);
29+
3030
var template = StructuralSearch.ParseTemplate(templateStr);
3131
var result = template.ParseOrThrow(sourceStr);
3232

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
using Pidgin;
2+
using Xunit;
3+
4+
namespace SimpleStateMachine.StructuralSearch.Tests
5+
{
6+
public class PlaceholderParserTests
7+
{
8+
// [Theory]
9+
// [InlineData("($test$)", "(value )", "value ")]
10+
// [InlineData("($test$ )", "(value )", "value")]
11+
// [InlineData("($test$)", "(value (test))", "value (test)")]
12+
// public void TemplateParsingShouldBeSuccess(string template, string source, string result)
13+
// {
14+
// var templateParser = StructuralSearch.ParseTemplate(template);
15+
// var res = templateParser.ParseOrThrow(source);
16+
// // var templateStr = File.ReadAllText(templatePath);
17+
// // var template = StructuralSearch.ParseTemplate(templateStr);
18+
// //
19+
// // Assert.NotNull(template);
20+
// }
21+
}
22+
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
if(temp == null)
22
{
3-
temp = new List<string>();
3+
temp = 12;
44
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
((value1) && (value2))
1+
(((value1) && (value2)) && (value1) && (value2))
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
if($var$ $sign$ null)
1+
if($temp$ $sign$ null)
22
{
33
$var$ = $value$;
44
}

src/SimpleStateMachine.StructuralSearch/Constant.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@ namespace SimpleStateMachine.StructuralSearch
44
{
55
public static class Constant
66
{
7+
/// <summary>
8+
/// Parenthesis empty string
9+
/// </summary>
10+
public static readonly string Empty = string.Empty;
11+
712
/// <summary>
813
/// Parenthesis char: '('
914
/// </summary>

src/SimpleStateMachine.StructuralSearch/Extensions/EnumerableStringExtensions.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,10 @@ public static string JoinToString(this IEnumerable<string> enumerable, string se
99
{
1010
return string.Join(separator, enumerable);
1111
}
12+
13+
public static string JoinToString(this List<string> enumerable, string separator = null)
14+
{
15+
return string.Join(separator, enumerable);
16+
}
1217
}
1318
}

src/SimpleStateMachine.StructuralSearch/Extensions/ParserExtensions.cs

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,26 @@ namespace SimpleStateMachine.StructuralSearch.Extensions
1616
{
1717
public static class ParserExtensions
1818
{
19-
2019
public static Parser<TToken, T> Try<TToken, T>(this Parser<TToken, T> parser)
2120
{
2221
return Parser.Try(parser);
2322
}
24-
25-
public static Parser<TToken, IEnumerable<T>> AtLeastOnceUntilNot<TToken, T, U>(this Parser<TToken, T> parser,
23+
24+
25+
public static Parser<TToken, IEnumerable<T>> AsMany<TToken, T>(this Parser<TToken, T> parser)
26+
{
27+
return parser.Select(x => (IEnumerable<T>)new List<T> { x });
28+
}
29+
30+
public static Parser<TToken, IEnumerable<T>> AtLeastOnceUntilNot<TToken, T, U>(this Parser<TToken, T> parser,
2631
Parser<TToken, U> terminator)
2732
{
28-
return parser != null ? parser.AtLeastOnceUntil(Not(terminator)) : throw new ArgumentNullException(nameof (parser));
33+
return parser != null
34+
? parser.AtLeastOnceUntil(Not(terminator))
35+
: throw new ArgumentNullException(nameof(parser));
2936
}
30-
31-
37+
38+
3239
// public static Parser<TToken, TOut> WithResult<TToken, TOut>(this Parser<TToken, TOut> parser, Func<TToken, SourcePos, TOut> transformResult)
3340
// {
3441
// = Parser<TToken>.CurrentSourcePosDelta.Select<SourcePos>((Func<SourcePosDelta, SourcePos>) (d => new SourcePos(1, 1) + d));
@@ -64,7 +71,7 @@ public static Parser<TToken, T> WithDebug<TToken, T>(this Parser<TToken, T> pars
6471
return u;
6572
}, parser, Parser<TToken>.CurrentPos, Parser<TToken>.CurrentSourcePosDelta);
6673
}
67-
74+
6875
public static Parser<TToken, T> WithDebug<TToken, T>(this Parser<TToken, T> parser)
6976
{
7077
return Map((u, t, v) =>
@@ -73,7 +80,7 @@ public static Parser<TToken, T> WithDebug<TToken, T>(this Parser<TToken, T> pars
7380
return u;
7481
}, parser, Parser<TToken>.CurrentPos, Parser<TToken>.CurrentSourcePosDelta);
7582
}
76-
83+
7784
public static Parser<TToken, T> BetweenAsThen<TToken, T, U, V>(this Parser<TToken, T> parser,
7885
Parser<TToken, U> parser1,
7986
Parser<TToken, V> parser2, Func<U, T, V, T> func)
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using Pidgin;
5+
6+
namespace SimpleStateMachine.StructuralSearch.Extensions
7+
{
8+
public static class SourceMatchParserExtensions
9+
{
10+
// public static Parser<TToken, Parser<TToken, R>> JoinResults<TToken, T, R>(this Parser<TToken, IEnumerable<Parser<TToken, T>>> parsers)
11+
// {
12+
// return parsers.Select(x => Parsers.Series(x, getResult));
13+
// }
14+
15+
public static Parser<char, Parser<char, SourceMatch>> JoinResults(this Parser<char, IEnumerable<Parser<char, SourceMatch>>> parsers)
16+
{
17+
return parsers.Select(x => Parsers.Series(x, y => y.Concatenate()));
18+
}
19+
}
20+
}

0 commit comments

Comments
 (0)