@@ -42,32 +42,22 @@ public static bool TryParse(this Parser<char, string> parser, string value, out
4242 result = res . Success ? res . Value : default ;
4343 return res . Success ;
4444 }
45+
46+ public static Parser < TToken , T > ThenInvoke < TToken , T > ( this Parser < TToken , T > parser , Action < T > action )
47+ {
48+ return parser . Select ( x =>
49+ {
50+ action . Invoke ( x ) ;
51+ return x ;
52+ } ) ;
53+ }
54+
4555 public static Parser < TToken , bool > Contains < TToken , T > ( this Parser < TToken , T > parser )
4656 {
4757 return parser != null
4858 ? parser . Optional ( ) . Select ( x => x . HasValue )
4959 : throw new ArgumentNullException ( nameof ( parser ) ) ;
5060 }
51-
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- // }
7161
7262 public static Parser < char , Match < T > > Match < T > ( this Parser < char , T > parser )
7363 {
@@ -83,37 +73,7 @@ public static Parser<char, Match<T>> Match<T>(this Parser<char, T> parser)
8373 parser ,
8474 Parser < char > . CurrentPos , Parser < char > . CurrentOffset ) ;
8575 }
86-
87-
88-
89-
90- // public static Parser<TToken, TOut> WithResult<TToken, TOut>(this Parser<TToken, TOut> parser, Func<TToken, SourcePos, TOut> transformResult)
91- // {
92- // = Parser<TToken>.CurrentSourcePosDelta.Select<SourcePos>((Func<SourcePosDelta, SourcePos>) (d => new SourcePos(1, 1) + d));
93- // parser.Select()
94- // return this.Select<U>((Func<T, U>)(_ => result));
95- // }
96-
97- // public static Parser<TToken, T> BetweenWithLookahead<TToken, T, U, V>(this Parser<TToken, T> parser, Parser<TToken, U> parser1, Parser<TToken, V> parser2)
98- // {
99- // if (parser1 == null)
100- // throw new ArgumentNullException(nameof (parser1));
101- // if (parser2 == null)
102- // throw new ArgumentNullException(nameof (parser2));
103- //
104- // return Parser.Map((Func<U, T, V, T>) ((_, t, _) => t), parser1, parser, parser2);
105- // }
10676
107- // public Parser<TToken, T> Between<U, V>(
108- // Parser<TToken, U> parser1,
109- // Parser<TToken, V> parser2)
110- // {
111- // if (parser1 == null)
112- // throw new ArgumentNullException(nameof (parser1));
113- // if (parser2 == null)
114- // throw new ArgumentNullException(nameof (parser2));
115- // return Parser.Map<TToken, U, T, V, T>((Func<U, T, V, T>) ((u, t, v) => t), parser1, this, parser2);
116- // }
11777 public static Parser < TToken , T > WithDebug < TToken , T > ( this Parser < TToken , T > parser , string label )
11878 {
11979 return Map ( ( u , t , v ) =>
@@ -153,33 +113,5 @@ public static Parser<TToken, T> After<TToken, T, U>(this Parser<TToken, T> parse
153113 {
154114 return parserAfter . Then ( parser , ( u , t ) => t ) ;
155115 }
156-
157- // public static Parser<TToken, T> BetweenAsThen<TToken, T, U, V>(this Parser<TToken, T> parser, Parser<TToken, U> parser1, Parser<TToken, V> parser2, Func<U, T, V, T> func)
158- // {
159- // if (parser1 == null)
160- // throw new ArgumentNullException(nameof (parser1));
161- // if (parser2 == null)
162- // throw new ArgumentNullException(nameof (parser2));
163- //
164- // return Parser.Map<TToken, T, T, T, T>(func, parser1, this, parser2);
165- // }
166-
167- // public static Parser<TToken, T> Between<TToken, T, U,V>(this Parser<TToken, T> parser,
168- // Parser<TToken, U> parser1,
169- // Parser<TToken, V> parser2)
170- // {
171- // if (parser1 == null)
172- // throw new ArgumentNullException(nameof (parser1));
173- // if (parser2 == null)
174- // throw new ArgumentNullException(nameof (parser2));
175- // return Parser.Map<TToken, U, T, V, T>((Func<U, T, V, T>) ((u, t, v) => t), parser1, this, parser2);
176- // }
177-
178- // public static T ParseOrThrow<T>(this Parser<char, T> parser,
179- // string input,
180- // IConfiguration<char>? configuration = null)
181- // {
182- // return ParserExtensions.GetValueOrThrow<char, T>(parser.Parse<T>(input, configuration));
183- // }
184116 }
185117}
0 commit comments