Skip to content

Commit 4a3aadf

Browse files
committed
push
1 parent 00ab0e3 commit 4a3aadf

File tree

4 files changed

+73
-37
lines changed

4 files changed

+73
-37
lines changed

src/SimpleStateMachine.StructuralSearch.Tests/PlaceholderParserTests.cs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System.Linq;
1+
using System;
2+
using System.Linq;
23
using Xunit;
34

45
namespace SimpleStateMachine.StructuralSearch.Tests;
@@ -10,11 +11,16 @@ public static class PlaceholderParserTests
1011
[InlineData("($test$ )", "(value )", "value")]
1112
[InlineData("($test$)", "(value (test))", "value (test)")]
1213
[InlineData("($test$)", "(value (test) )", "value (test) ")]
14+
[InlineData("($test$):", "(value (test) );", "value (test) ")]
15+
[InlineData("($test$ )", "(value (test) )", "value (test)")]
16+
[InlineData("$test$(123)", "temp1(123)", "temp1")]
17+
18+
[InlineData("$var$;", "test;", "test")]
1319
[InlineData("$var$;", "test;;", "test")]
1420
[InlineData("$var$;.", "test;;;.", "test;;")]
15-
[InlineData("$value2$(123)", "temp1(123)", "temp1")]
16-
[InlineData("$value2$", "temp1 ?? temp2", "temp1 ?? temp2")]
17-
[InlineData("$value2$;", "temp1 ?? temp2;", "temp1 ?? temp2")]
21+
[InlineData("$var$", "temp1 ?? temp2", "temp1 ?? temp2")]
22+
[InlineData("$var$;", "temp1 ?? temp2;", "temp1 ?? temp2")]
23+
[InlineData("$var$;.", "temp1 ?? temp2;.", "temp1 ?? temp2")]
1824
public static void PlaceholderParsingShouldBeSuccess(string template, string source, string expectedResult)
1925
{
2026
var input = Input.Input.String(source);

src/SimpleStateMachine.StructuralSearch.Tests/Tests.cs

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,28 +8,26 @@ namespace SimpleStateMachine.StructuralSearch.Tests;
88
public static class Tests
99
{
1010
[Theory]
11-
[InlineData("temp1 ?? temp2;", ";", "temp1 ?? temp2")]
12-
[InlineData("(value )", null, "value ")]
13-
[InlineData("(value )", null, "value")]
14-
[InlineData("(value (test))", null, "value (test)")]
15-
[InlineData("(value (test) )", null, "value (test) ")]
16-
[InlineData("test;;", ";", "test;")]
17-
[InlineData("test;;;.", ".", "test;;")]
18-
[InlineData( "temp1(123)", null,"temp1")]
19-
[InlineData("temp1 ?? temp2", null, "temp1 ?? temp2")]
20-
public static void PlaceholderParsingShouldBeSuccess(string input, string? terminator, string expectedResult)
11+
[InlineData("test;", ";", "test")]
12+
[InlineData("test;;", ";", "test")]
13+
[InlineData("test;;.", ".", "test;;")]
14+
[InlineData("(value (test));", ";", "value (test)")]
15+
[InlineData("(value (test) );", ";", "value (test) ")]
16+
public static void PlaceholderParsingShouldBeSuccess(string input, string terminator, string expectedResult)
2117
{
22-
var terminatorParser = terminator is null ? Parser.EndOfLine : Parser.String(terminator);
23-
var result = Parser.AnyCharExcept().AtLeastOnceAsStringUntil(terminatorParser).ParseOrThrow(expectedResult);
18+
var terminatorParser = Parser.Lookahead(Parser.String(terminator)).WithDebug("terminator").Select(x => Unit.Value);
19+
var result = Parser.AnyCharExcept(Constant.AllParenthesis).AtLeastOnceAsStringUntil(terminatorParser).ParseOrThrow(input);
2420
Assert.Equal(expectedResult, result);
2521
}
2622

2723
[Theory]
28-
[InlineData("temp1;", ";", "temp1 ?? temp2")]
24+
[InlineData("test;", ";", "test")]
25+
[InlineData("test;;", ";", "test")]
26+
[InlineData("test;;.", ".", "test;;")]
2927
public static void PlaceholderParsingShouldBeSuccess2(string input, string terminator, string expectedResult)
3028
{
31-
var terminatorParser = Parser.String(terminator).Try().Select(x => Unit.Value);
32-
var result = PlaceholderParser.CreateParser(terminatorParser).ParseToEnd(input);
29+
var terminatorParser = Parser.Lookahead(Parser.String(terminator)).WithDebug("terminator").Select(x => Unit.Value);
30+
var result = PlaceholderParser.CreateParser(terminatorParser).ParseOrThrow(input);
3331
Assert.Equal(expectedResult, result);
3432
}
3533
}

src/SimpleStateMachine.StructuralSearch/CustomParsers/PlaceholderParser.cs

Lines changed: 48 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -74,40 +74,72 @@ protected override Parser<char, string> BuildParser(Func<Parser<char, string>?>
7474
// var parser = prdsAndTokens.Or(anyString);
7575
}
7676

77-
// internal static Parser<char, string> CreateParser(Parser<char, Unit> terminator)
77+
// internal static Parser<char, string> GreedyUntil(Parser<char, Unit> terminator)
7878
// {
79-
// var simpleString = StringLiteralChar.AtLeastOnceAsStringUntil(terminator).Select(x => x);
80-
// var whitespaces = Parser.OneOf(Constant.WhitespaceChars).AtLeastOnceAsStringUntil(terminator).Select(x => x);
81-
// var token = Parser.OneOf(simpleString.Try(), whitespaces).Select(x => x);
79+
// var term = Parser.AnyCharExcept(Constant.AllParenthesis)
80+
// .AtLeastOnceAsStringUntil(terminator)
81+
// .WithDebug("term");
8282
//
8383
// Parser<char, string>? parser = null;
84+
//
85+
// var bracketed = Parser.Rec(() => parser!)
86+
// .ManyString()
87+
// .BetweenAnyParentheses((l, inner, r) => $"{l}{inner}{r}")
88+
// .WithDebug("bracketed");
89+
//
90+
// parser = Parser.OneOf(bracketed.Try(), term);
91+
//
92+
// return parser.AtLeastOnceUntil(terminator).JoinToString();
93+
//
94+
// // var term = Parser.AnyCharExcept(Constant.AllParenthesis).Until(terminator)
95+
// // .Select(x => new string(x.ToArray()));
96+
// //
97+
// // Parser<char, string>? parser = null;
98+
// //
99+
// // var bracketed = Parser.OneOf(Parser.Rec(() => parser!), term)
100+
// // .ManyString()
101+
// // .BetweenAnyParentheses((c1, s, c2) => $"{c1}{s}{c2}").WithDebug();
102+
// //
103+
// // parser = Parser.OneOf(bracketed.Try(), term);
104+
// // return parser.AtLeastOnceUntil(terminator).JoinToString();
105+
// }
106+
107+
// internal static Parser<char, string> GreedyUntil(Parser<char, Unit> terminator)
108+
// {
109+
// var word = StringLiteralChar.AtLeastOnceString().WithDebug();
110+
// var whitespace = Parser.OneOf(Constant.WhitespaceChars).AtLeastOnceString().WithDebug();
111+
//
112+
// // var word = StringLiteralChar.AtLeastOnceAsStringUntil(terminator).WithDebug();
113+
// // var whitespace = Parser.OneOf(Constant.WhitespaceChars).AtLeastOnceAsStringUntil(terminator).WithDebug();
114+
// var term = Parser.OneOf(word.Try(), whitespace);
84115
//
85-
// // var parserBetweenParentheses = Parser.Rec(() => parser ?? throw new ArgumentNullException(nameof(parser)))
86-
// // .BetweenAnyParentheses((c1, s, c2) => $"{c1}{s}{c2}");
116+
// Parser<char, string>? parser = null;
117+
//
118+
// var bracketed = Parser.OneOf(Parser.Rec(() => parser!), term)
119+
// .ManyString()
120+
// .BetweenAnyParentheses((c1, s, c2) => $"{c1}{s}{c2}").WithDebug();
87121
//
88-
// // parser = Parser.OneOf(token, parserBetweenParentheses).AtLeastOnceUntil(terminator).JoinToString();
89-
// parser = token.Try().Many().JoinToString();
90-
// return parser;
122+
// parser = Parser.OneOf(bracketed.Try(), term);
123+
// return parser.ManyString().Before(terminator.Try());
91124
// }
92125

93126
internal static Parser<char, string> CreateParser(Parser<char, Unit> terminator)
94127
{
95-
var anyString = InvalidStringLiteralChars.AnyCharWithPlshd
96-
.AtLeastOnceAsStringUntil(lookahead);
128+
var anyString = StringLiteralChar
129+
.AtLeastOnceAsStringUntil(terminator);
97130

98-
var simpleString = CommonTemplateParser.StringWithPlshd;
131+
var simpleString = StringLiteralChar.AtLeastOnceString();
99132
var token = Parser.OneOf(simpleString, Grammar.WhiteSpaces).Try();
100133
Parser<char, string>? term = null;
101134

102-
var parenthesised = Parsers.BetweenOneOfChars(x => Parser.Char(x).AsString(),
103-
expr: Parser.Rec(() => term ?? throw new ArgumentNullException(nameof(term))),
104-
Constant.AllParenthesised).JoinToString();
135+
var parenthesised = Parser.Rec(() => term ?? throw new ArgumentNullException(nameof(term)))
136+
.BetweenAnyParentheses((l, s, r) => $"{l}{s}{r}");
105137

106138
term = Parser.OneOf(parenthesised, token).Many().JoinToString();
107139

108140
//parenthesised and tokens and whiteSpaces
109141
var prdsAndTokens = Parser.OneOf(parenthesised, token)
110-
.AtLeastOnceUntil(lookahead)
142+
.AtLeastOnceUntil(terminator)
111143
.JoinToString()
112144
.Try();
113145

src/SimpleStateMachine.StructuralSearch/Extensions/ParserExtensions.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,14 +48,14 @@ public static Parser<char, Match<T>> Match<T>(this Parser<char, T> parser)
4848
public static Parser<TToken, T> WithDebug<TToken, T>(this Parser<TToken, T> parser, string label)
4949
=> Parser.Map((u, t, _) =>
5050
{
51-
Console.WriteLine($"{label} ({t.Col}) : {u} ");
51+
Console.WriteLine($"{label}: [{t.Line},{t.Col}] : {u} ");
5252
return u;
5353
}, parser, Parser<TToken>.CurrentPos, Parser<TToken>.CurrentSourcePosDelta);
5454

5555
public static Parser<TToken, T> WithDebug<TToken, T>(this Parser<TToken, T> parser) =>
5656
Parser.Map((u, t, _) =>
5757
{
58-
Console.WriteLine($"({t.Col}) : {u} ");
58+
Console.WriteLine($"[{t.Line},{t.Col}] : {u} ");
5959
return u;
6060
}, parser, Parser<TToken>.CurrentPos, Parser<TToken>.CurrentSourcePosDelta);
6161

0 commit comments

Comments
 (0)