@@ -96,10 +96,22 @@ static void Main(string[] args)
9696 . Select ( x => String ( x ) . AsMatch ( ) ) ;
9797
9898 var whitespaces = _whitespaces
99- . Select ( _ => WhitespaceString . AsMatch ( ) ) ;
99+ . Select ( _ => _whitespaces . AsMatch ( ) ) ;
100100
101101 var placeholder = _placeholder
102- . Select ( name => new Custom . PlaceholderParser ( name , onPlace . JoinToString ( ) . AsMatch ( ) ) )
102+ . Select ( name =>
103+ new Custom . PlaceholderParser ( name , list =>
104+ {
105+ var next = list . First ( ) ;
106+ var nextNext = list . Last ( ) ;
107+ var _anyCharPlace2 = Any . AtLeastOnceUntil ( Lookahead ( next . Then ( nextNext ) . Try ( ) ) ) . AsString ( ) . Try ( ) ;
108+ var placeTokens2 = OneOf ( _anyCharPlace2 , _whitespaces ) . AtLeastOnce ( ) ;
109+ Parser < char , IEnumerable < string > > onPlace2 = null ;
110+ onPlace2 = OneOf ( placeTokens2 , ManyParenthesised ( Stringc , Rec ( ( ) => onPlace2 ) , Constant . AllParenthesised ) )
111+ . AtLeastOnce ( ) . MergerMany ( ) ;
112+
113+ return onPlace2 . JoinToString ( ) . AsMatch ( ) ;
114+ } ) )
103115 . Cast < Parser < char , SourceMatch > > ( ) ;
104116
105117 var token = OneOf ( anyCharExcept , placeholder , whitespaces ) ;
@@ -130,18 +142,17 @@ static void Main(string[] args)
130142 // var templateParser = token.Or(any).Separated(separator);
131143
132144 //if with lookahead parser
133- // var test341 = String("if")
134- // .Then(Char('('))
135- // .Then(Any.Until(Lookahead(Char(')').Then(End).Try())))
136- // .AsString();
145+ var test341 = String ( "if" )
146+ . Then ( Char ( '(' ) )
147+ . Then ( Any . Until ( Lookahead ( Char ( ')' ) . Then ( End ) . Try ( ) ) ) )
148+ . AsString ( ) ;
137149
138150 var template1 =
139151 "if($condition$)\n " +
140152 "return $value1$;\n " +
141153 "else\n " +
142154 "return $value2$;" ;
143-
144-
155+
145156 var example1 =
146157 "if((value) = (5))\n " +
147158 "return \" Result1\" ;\n " +
@@ -176,7 +187,7 @@ static void Main(string[] args)
176187 var testText = "if((value1)&&(value2))" ;
177188 var testTextForMatch = "fdjkfnafdjankfjnafkajndaif((value1)&&(value2))" ;
178189 var testTempalte2 = "return $value$;" ;
179- var testText2 = "return 125;;;;\n " ;
190+ var testText2 = "return 125;;;;" ;
180191
181192
182193 // var test = _expr.ParseOrThrow(template1);
@@ -207,12 +218,39 @@ static void Main(string[] args)
207218 // var match = String("test").Then(AnyCharExcept(';').AtLeastOnceString().AsMatch())
208219 // .ParseOrThrow(str);
209220
210- var parser = templateParser . ParseOrThrow ( testTempalte ) ;
211- var skip = Any . ThenReturn ( SourceMatch . Empty ) ;
212- var result = OneOf ( parser . Try ( ) , skip )
213- . Many ( )
214- . Select ( x => x . Where ( match => ! Equals ( match , SourceMatch . Empty ) ) )
215- . ParseOrThrow ( testTextForMatch ) ;
221+ var _anyCharPlace2 = Any . Until ( Lookahead ( String ( ";" ) . Then ( End ) . Try ( ) ) ) . AsString ( ) ;
222+ //
223+ //
224+ // var placeTokens2 = OneOf(_anyCharPlace2, _whitespaces).AtLeastOnce();
225+ // Parser<char, IEnumerable<string>> onPlace2 = null;
226+ // onPlace2 = placeTokens.Or(ManyParenthesised(Stringc, Rec(() => onPlace2), Constant.AllParenthesised))
227+ // .AtLeastOnce().MergerMany();
228+
229+ // return onPlace2.JoinToString().AsMatch(_anyCharPlace2.As);
230+
231+
232+
233+ // var hm = String("return").Then(_whitespaces).Then(_anyCharPlace2);
234+
235+ // var next = String(";");
236+ // var nextNext = End;
237+ // var anyCharPlace2 = Any.AtLeastOnceUntil(Lookahead(next.Then(nextNext).Try())).AsString().Try();
238+ // var placeTokens2 = OneOf(anyCharPlace2, _whitespaces).AtLeastOnce();
239+ // Parser<char, IEnumerable<string>> onPlace2 = null;
240+ // onPlace2 = OneOf(ManyParenthesised(Stringc, Rec(() => onPlace2),
241+ // Constant.AllParenthesised), placeTokens2)
242+ // .AtLeastOnce().MergerMany();
243+ //
244+ // var hm = onPlace2;
245+ // var result = hm.ParseOrThrow("125;;;;");
246+
247+ var parser = templateParser . ParseOrThrow ( template1 ) ;
248+ var result = parser . ParseOrThrow ( example1 ) ;
249+ // var skip = Any.ThenReturn(SourceMatch.Empty);
250+ // var result = OneOf(parser.Try(), skip)
251+ // .Many()
252+ // .Select(x => x.Where(match => !Equals(match, SourceMatch.Empty)))
253+ // .ParseOrThrow(testTextForMatch);
216254 }
217255 }
218256}
0 commit comments