@@ -8,86 +8,48 @@ namespace SimpleStateMachine.StructuralSearch.Parsers;
88
99internal static class Parsers
1010{
11- public static Parser < char , string > String ( string value , bool ignoreCase )
12- => ignoreCase ? Parser . CIString ( value ) : Parser . String ( value ) ;
13-
14- public static Parser < char , TEnum > After < TEnum > ( TEnum value , bool ignoreCase = false )
15- where TEnum : struct , Enum
16- => String ( value . ToString ( ) , ignoreCase ) . AsEnum < TEnum > ( ignoreCase ) ;
17-
18- private static Parser < TToken , IEnumerable < T > > MapToMany < TToken , T > ( Parser < TToken , T > parser1 ,
19- Parser < TToken , T > parser2 , Parser < TToken , T > parser3 )
11+ // private static Parser<TToken, IEnumerable<T>> MapToMany<TToken, T>(Parser<TToken, T> parser1,
12+ // Parser<TToken, T> parser2, Parser<TToken, T> parser3)
13+ // {
14+ // ArgumentNullException.ThrowIfNull(parser1);
15+ // ArgumentNullException.ThrowIfNull(parser2);
16+ // ArgumentNullException.ThrowIfNull(parser3);
17+ //
18+ // return Parser.Map((arg1, arg2, arg3) => (IEnumerable<T>)new List<T> { arg1, arg2, arg3 }, parser1, parser2, parser3);
19+ // }
20+ //
21+ // private static Parser<TToken, IEnumerable<T>> MapToMany<TToken, T>(Parser<TToken, T> parser1,
22+ // Parser<TToken, IEnumerable<T>> parser2, Parser<TToken, T> parser3)
23+ // {
24+ // ArgumentNullException.ThrowIfNull(parser1);
25+ // ArgumentNullException.ThrowIfNull(parser2);
26+ // ArgumentNullException.ThrowIfNull(parser3);
27+ //
28+ // return Parser.Map((arg1, arg2, arg3) =>
29+ // {
30+ // var result = arg2.ToList();
31+ // result.Insert(0, arg1);
32+ // result.Add(arg3);
33+ // return (IEnumerable<T>)result;
34+ // }, parser1, parser2, parser3);
35+ // }
36+
37+ public static Parser < char , TResult > BetweenParentheses < T , TResult > ( Parser < char , T > expr , Func < char , T , char , TResult > mapFunc )
2038 {
21- ArgumentNullException . ThrowIfNull ( parser1 ) ;
22- ArgumentNullException . ThrowIfNull ( parser2 ) ;
23- ArgumentNullException . ThrowIfNull ( parser3 ) ;
24-
25- return Parser . Map ( ( arg1 , arg2 , arg3 ) => ( IEnumerable < T > ) new List < T > { arg1 , arg2 , arg3 } , parser1 , parser2 , parser3 ) ;
39+ var parsers = Constant . AllParentheses . Select ( pair => Parser . Map ( mapFunc , Parser . Char ( pair . Item1 ) , expr , Parser . Char ( pair . Item1 ) ) ) ;
40+ return Parser . OneOf ( parsers ) ;
2641 }
2742
28- private static Parser < TToken , IEnumerable < T > > MapToMany < TToken , T > ( Parser < TToken , T > parser1 ,
29- Parser < TToken , IEnumerable < T > > parser2 , Parser < TToken , T > parser3 )
30- {
31- ArgumentNullException . ThrowIfNull ( parser1 ) ;
32- ArgumentNullException . ThrowIfNull ( parser2 ) ;
33- ArgumentNullException . ThrowIfNull ( parser3 ) ;
34-
35- return Parser . Map ( ( arg1 , arg2 , arg3 ) =>
36- {
37- var result = arg2 . ToList ( ) ;
38- result . Insert ( 0 , arg1 ) ;
39- result . Add ( arg3 ) ;
40- return ( IEnumerable < T > ) result ;
41- } , parser1 , parser2 , parser3 ) ;
42- }
43-
44- public static Parser < TToken , IEnumerable < T > > MapToMany < TToken , T > ( Parser < TToken , T > parser1 ,
45- Parser < TToken , T > parser2 )
46- {
47- if ( parser1 == null )
48- throw new ArgumentNullException ( nameof ( parser1 ) ) ;
49- if ( parser2 == null )
50- throw new ArgumentNullException ( nameof ( parser2 ) ) ;
43+ // public static Parser<char, IEnumerable<T>> BetweenOneOfChars<T>(Func<char, Parser<char, T>> leftRight, Parser<char, IEnumerable<T>> expr, params (char, char)[] values)
44+ // => Parser.OneOf(values.Select(x => MapToMany(leftRight(x.Item1), expr, leftRight(x.Item2))));
45+ //
46+ // public static Parser<char, IEnumerable<T>> BetweenOneOfChars<T>(Func<char, Parser<char, T>> leftRight, Parser<char, T> expr, params (char, char)[] values)
47+ // => Parser.OneOf(values.Select(x => MapToMany(leftRight(x.Item1), expr, leftRight(x.Item2))));
48+ //
49+ // public static Parser<char, (TResult, T)> BetweenOneOfChars<T, TResult>(Func<char, char, TResult> resultFunc, Parser<char, T> expr, params (char, char)[] values)
50+ // => Parser.OneOf(values.Select(x => Parser.Map((c1, res, c2) => (resultFunc(c1, c2), res), Parser.Char(x.Item1).Try(), expr, Parser.Char(x.Item2).Try())));
5151
52- return Parser . Map ( ( arg1 , arg2 ) =>
53- {
54- var result = new List < T > { arg1 , arg2 } ;
55- return ( IEnumerable < T > ) result ;
56- } , parser1 , parser2 ) ;
57- }
58-
59- public static Parser < char , IEnumerable < T > > BetweenChars < T > ( char left , char right ,
60- Func < char , Parser < char , T > > leftRight ,
61- Parser < char , IEnumerable < T > > expr )
62- => MapToMany ( leftRight ( left ) , expr , leftRight ( right ) ) ;
63-
64- public static Parser < char , IEnumerable < T > > BetweenOneOfChars < T > ( Func < char , Parser < char , T > > leftRight , Parser < char , IEnumerable < T > > expr , params ( char , char ) [ ] values )
65- => Parser . OneOf ( values . Select ( x => MapToMany ( leftRight ( x . Item1 ) , expr , leftRight ( x . Item2 ) ) ) ) ;
66-
67- public static Parser < char , IEnumerable < T > > BetweenOneOfChars < T > ( Func < char , Parser < char , T > > leftRight , Parser < char , T > expr , params ( char , char ) [ ] values )
68- => Parser . OneOf ( values . Select ( x => MapToMany ( leftRight ( x . Item1 ) , expr , leftRight ( x . Item2 ) ) ) ) ;
69-
70- public static Parser < char , ( TResult , T ) > BetweenOneOfChars < T , TResult > ( Func < char , char , TResult > resultFunc , Parser < char , T > expr , params ( char , char ) [ ] values )
71- => Parser . OneOf ( values . Select ( x => Parser . Map ( ( c1 , res , c2 ) => ( resultFunc ( c1 , c2 ) , res ) , Parser . Char ( x . Item1 ) . Try ( ) , expr , Parser . Char ( x . Item2 ) . Try ( ) ) ) ) ;
72-
73- public static Parser < char , TEnum > EnumExcept < TEnum > ( bool ignoreCase = false , params TEnum [ ] excluded )
74- where TEnum : struct , Enum
75- => new EnumParser < TEnum > ( ignoreCase , excluded ) ;
76-
77- public static Parser < char , TEnum > EnumValue < TEnum > ( TEnum value , bool ignoreCase = false )
52+ public static Parser < char , TEnum > EnumValue < TEnum > ( TEnum value )
7853 where TEnum : struct , Enum
79- => String ( value . ToString ( ) , ignoreCase ) . AsEnum < TEnum > ( ignoreCase ) ;
80-
81- public static Parser < char , Match < T > > Match < T > ( Parser < char , T > parser )
82- => Parser . Map ( ( oldPos , oldOffset , result , newPos , newOffset ) =>
83- {
84- var line = new LinePosition ( oldPos . Line , newPos . Line ) ;
85- var column = new ColumnPosition ( oldPos . Col , newPos . Col ) ;
86- var offset = new OffsetPosition ( oldOffset , newOffset ) ;
87- var lenght = newOffset - oldOffset ;
88- return new Match < T > ( result , lenght , column , line , offset ) ;
89- } ,
90- Parser < char > . CurrentPos , Parser < char > . CurrentOffset ,
91- parser ,
92- Parser < char > . CurrentPos , Parser < char > . CurrentOffset ) ;
54+ => Parser . CIString ( value . ToString ( ) ) . AsEnum < TEnum > ( true ) ;
9355}
0 commit comments