Skip to content

Commit 04db2c1

Browse files
committed
template parser
1 parent d5ac8ff commit 04db2c1

File tree

4 files changed

+39
-42
lines changed

4 files changed

+39
-42
lines changed

src/SimpleStateMachine.StructuralSearch.Sandbox/Extensions/EnumerableCharExtensions.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,17 @@ public static Parser<Ttoken, string> AsString<Ttoken>(this Parser<Ttoken, IEnume
1313
{
1414
return parser.Select(x => new string(x.ToArray()));
1515
}
16+
17+
public static Parser<Ttoken, IEnumerable<T>> MergerMany<Ttoken, T>(
18+
this Parser<Ttoken, IEnumerable<IEnumerable<T>>> parser)
19+
{
20+
return parser.Select(x => x.SelectMany(y => y));
21+
}
22+
23+
public static Parser<Ttoken, IEnumerable<T>> MergerMany<Ttoken, T>(
24+
this Parser<Ttoken, IEnumerable<List<T>>> parser)
25+
{
26+
return parser.Select(x => x.SelectMany(y => y));
27+
}
1628
}
1729
}

src/SimpleStateMachine.StructuralSearch.Sandbox/Extensions/StringParserExtensions.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,13 @@ public static Parser<TToken, string> BetweenAsThen<TToken>(this Parser<TToken, s
3434
parser1, parser, parser2);
3535
}
3636

37-
// public static Parser<TToken, IEnumerable<string>> ToMany<TToken>(this Parser<TToken, string> parser)
38-
// {
39-
// return parser.Select(x => new List<string>() { x }).ToIEnumerable();
40-
// }
41-
public static Parser<TToken, List<string>> ToMany<TToken>(this Parser<TToken, string> parser)
37+
public static Parser<TToken, IEnumerable<string>> ToMany<TToken>(this Parser<TToken, string> parser)
4238
{
43-
return parser.Select(x => new List<string>{ x });
39+
return parser.Select(x => new List<string>() { x }).ToIEnumerable();
4440
}
41+
// public static Parser<TToken, List<string>> ToMany<TToken>(this Parser<TToken, string> parser)
42+
// {
43+
// return parser.Select(x => new List<string>{ x });
44+
// }
4545
}
4646
}

src/SimpleStateMachine.StructuralSearch.Sandbox/Parsers.cs

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -22,23 +22,6 @@ public static Parser<TToken, List<T>> MapToMany<TToken, T>(Parser<TToken, T> par
2222
return Map((arg1, arg2, arg3) => new List<T>{arg1, arg2, arg3}, parser1, parser2, parser2);
2323
}
2424

25-
public static Parser<TToken, List<T>> MapToMany<TToken, T>(Parser<TToken, T> parser1, Parser<TToken, List<T>> parser2, Parser<TToken, T> parser3)
26-
{
27-
if (parser1 == null)
28-
throw new ArgumentNullException(nameof(parser1));
29-
if (parser2 == null)
30-
throw new ArgumentNullException(nameof(parser2));
31-
if (parser3 == null)
32-
throw new ArgumentNullException(nameof(parser2));
33-
34-
return Map((arg1, arg2, arg3) =>
35-
{
36-
arg2.Insert(0, arg1);
37-
arg2.Add(arg3);
38-
return arg2;
39-
}, parser1, parser2, parser3);
40-
}
41-
4225
public static Parser<TToken, List<T>> MapToMany<TToken, T>(Parser<TToken, T> parser1, Parser<TToken, IEnumerable<T>> parser2, Parser<TToken, T> parser3)
4326
{
4427
if (parser1 == null)
@@ -56,5 +39,6 @@ public static Parser<TToken, List<T>> MapToMany<TToken, T>(Parser<TToken, T> par
5639
return result;
5740
}, parser1, parser2, parser3);
5841
}
42+
5943
}
6044
}

src/SimpleStateMachine.StructuralSearch.Sandbox/Program.cs

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -30,40 +30,41 @@ public Placeholder(bool isCorrect, string value)
3030

3131
static void Main(string[] args)
3232
{
33-
var whitespaces = WhitespaceString;
34-
var endOfLines = EndOfLine.ManyString();
33+
var whitespaces = Char(' ').AtLeastOnceString();
34+
var endOfLines = EndOfLine.AtLeastOnceString();
3535
var anyCharExcept = AnyCharExcept('(', ')', '[', ']', '{', '}', '$', ' ', '\n').AtLeastOnceString().Try()
3636
.WithDebug("anyCharExcept");
3737
Parser<char, IEnumerable<string>> expr = null;
38+
39+
3840
var placeholder = PlaceholderParser.Identifier.Between(Char('$')).Try()
3941
.WithDebug("placeholder");
42+
43+
// var parenthesised1 = Rec(() => expr).Between(Char('('), Char(')')).WithDebug("parenthesised1");
4044
var parenthesised1 = MapToMany(Stringc('('), Rec(() => expr), Stringc(')'))
4145
.WithDebug("parenthesised1");
46+
// var parenthesised2 = Rec(() => expr).Between(Char('['), Char(']')).WithDebug("parenthesised1");
4247
var parenthesised2 = MapToMany(Stringc('['), Rec(() => expr), Stringc(']'))
4348
.WithDebug("parenthesised2");
49+
// var parenthesised3 = Rec(() => expr).Between(Char('{'), Char('}')).WithDebug("parenthesised1");
4450
var parenthesised3 = MapToMany(Stringc('{'), Rec(() => expr), Stringc('}'))
4551
.WithDebug("parenthesised3");
52+
53+
var parenthesised = OneOf(parenthesised1, parenthesised2, parenthesised3).ToIEnumerable();
54+
55+
56+
//don't work
57+
var parser = OneOf(anyCharExcept, placeholder, whitespaces, endOfLines).AtLeastOnce();
58+
expr = parser.Or(parenthesised).AtLeastOnce().MergerMany();
59+
60+
//work
61+
// var parser = OneOf(anyCharExcept, placeholder).AtLeastOnce();
62+
// expr = parser.Or(parenthesised).Separated(Whitespaces).MergerMany();
4663

47-
// var parenthesised1 = Rec(() => expr)
48-
// .Between(Char('('), Char(')'))
49-
// .WithDebug("parenthesised1");
50-
// var parenthesised2 = Rec(() => expr)
51-
// .Between(Char('['), Char(']'))
52-
// .WithDebug("parenthesised1");
53-
// var parenthesised3 = Rec(() => expr)
54-
// .Between(Char('{'), Char('}'))
55-
// .WithDebug("parenthesised1");
5664

57-
var parenthesised = parenthesised1.Or(parenthesised2).Or(parenthesised3);
58-
59-
// var parser = anyCharExcept.Or(placeholder).Or(whitespaces).Or(endOfLines).Many();
60-
var parser = anyCharExcept.Or(placeholder).Separated(Whitespaces);
61-
62-
expr = parser.Or(parenthesised.ToIEnumerable());
63-
64-
6565
var t = "((test > 25) && (test < 50))";
6666
var t2 = "([test > 25] && {test < 50})";
67+
6768
//template parser
6869
var separator = Whitespaces.AsString().Or(EndOfLine);
6970
var any = AnyCharExcept('$', ' ', '\n').AtLeastOnceString();

0 commit comments

Comments
 (0)