1111
1212namespace SimpleStateMachine . StructuralSearch . Sandbox
1313{
14+ // var spaces = Char(' ').AtLeastOnceString();
15+ // var endOfLines = EndOfLine.AtLeastOnceString();
16+ // var whitespaces = OneOf(spaces, endOfLines);
17+ // var anyCharExcept = AnyCharExcept('(', ')', '[', ']', '{', '}', '$', ' ', '\n').AtLeastOnceString().Try()
18+ // .WithDebug("anyCharExcept");
19+ // Parser<char, IEnumerable<string>> expr = null;
20+ //
21+ //
22+ // var placeholder = PlaceholderParser.Identifier.Between(Char('$')).Try()
23+ // .WithDebug("placeholder");
24+ //
25+ // // var parenthesised1 = Rec(() => expr).Between(Char('('), Char(')')).WithDebug("parenthesised1");
26+ // var parenthesised1 = MapToMany(Stringc('('), Rec(() => expr), Stringc(')'))
27+ // .WithDebug("parenthesised1");
28+ // // var parenthesised2 = Rec(() => expr).Between(Char('['), Char(']')).WithDebug("parenthesised1");
29+ // var parenthesised2 = MapToMany(Stringc('['), Rec(() => expr), Stringc(']'))
30+ // .WithDebug("parenthesised2");
31+ // // var parenthesised3 = Rec(() => expr).Between(Char('{'), Char('}')).WithDebug("parenthesised1");
32+ // var parenthesised3 = MapToMany(Stringc('{'), Rec(() => expr), Stringc('}'))
33+ // .WithDebug("parenthesised3");
34+ //
35+ // var parenthesised = OneOf(parenthesised1, parenthesised2, parenthesised3);
36+ //
37+ //
38+ // //don't work
39+ // var tokens = OneOf(anyCharExcept, placeholder, whitespaces).AtLeastOnce();
40+ // expr = tokens.Or(parenthesised).AtLeastOnce().MergerMany();
1441 internal static class Program
1542 {
1643 private static Parser < char , T > Parenthesised < T > ( Parser < char , T > parser )
@@ -32,76 +59,112 @@ static void Main(string[] args)
3259 {
3360 var spaces = Char ( ' ' ) . AtLeastOnceString ( ) ;
3461 var endOfLines = EndOfLine . AtLeastOnceString ( ) ;
35- var whitespaces = OneOf ( spaces , endOfLines ) ;
36- var anyCharExcept = AnyCharExcept ( '(' , ')' , '[' , ']' , '{' , '}' , '$' , ' ' , '\n ' ) . AtLeastOnceString ( ) . Try ( )
62+ var _whitespaces = OneOf ( spaces , endOfLines ) ;
63+ var _anyCharExcept = AnyCharExcept ( '(' , ')' , '[' , ']' , '{' , '}' , '$' , ' ' , '\n ' ) . AtLeastOnceString ( ) . Try ( )
3764 . WithDebug ( "anyCharExcept" ) ;
38- Parser < char , IEnumerable < string > > expr = null ;
39-
4065
41- var placeholder = PlaceholderParser . Identifier . Between ( Char ( '$' ) ) . Try ( )
66+ Parser < char , IEnumerable < string > > _expr = null ;
67+
68+
69+ var _placeholder = PlaceholderParser . Identifier . Between ( Char ( '$' ) ) . Try ( )
4270 . WithDebug ( "placeholder" ) ;
43-
71+
4472 // var parenthesised1 = Rec(() => expr).Between(Char('('), Char(')')).WithDebug("parenthesised1");
45- var parenthesised1 = MapToMany ( Stringc ( '(' ) , Rec ( ( ) => expr ) , Stringc ( ')' ) )
73+ var _parenthesised1 = MapToMany ( Stringc ( '(' ) , Rec ( ( ) => _expr ) , Stringc ( ')' ) )
4674 . WithDebug ( "parenthesised1" ) ;
4775 // var parenthesised2 = Rec(() => expr).Between(Char('['), Char(']')).WithDebug("parenthesised1");
48- var parenthesised2 = MapToMany ( Stringc ( '[' ) , Rec ( ( ) => expr ) , Stringc ( ']' ) )
76+ var _parenthesised2 = MapToMany ( Stringc ( '[' ) , Rec ( ( ) => _expr ) , Stringc ( ']' ) )
4977 . WithDebug ( "parenthesised2" ) ;
5078 // var parenthesised3 = Rec(() => expr).Between(Char('{'), Char('}')).WithDebug("parenthesised1");
51- var parenthesised3 = MapToMany ( Stringc ( '{' ) , Rec ( ( ) => expr ) , Stringc ( '}' ) )
79+ var _parenthesised3 = MapToMany ( Stringc ( '{' ) , Rec ( ( ) => _expr ) , Stringc ( '}' ) )
5280 . WithDebug ( "parenthesised3" ) ;
5381
54- var parenthesised = OneOf ( parenthesised1 , parenthesised2 , parenthesised3 ) ;
55-
56-
5782 //don't work
58- var tokens = OneOf ( anyCharExcept , placeholder , whitespaces ) . AtLeastOnce ( ) ;
59- expr = tokens . Or ( parenthesised ) . AtLeastOnce ( ) . MergerMany ( ) ;
60-
61- //work
62- // var parser = OneOf(anyCharExcept, placeholder).AtLeastOnce();
63- // expr = parser.Or(parenthesised).Separated(Whitespaces).MergerMany();
64-
65-
66- var t = "((test > 25) && (test < 50))" ;
67- var t2 = "([test > 25] && {test < 50})" ;
68-
83+ var _token = OneOf ( _anyCharExcept , _placeholder , _whitespaces ) ;
84+ var _tokens = _token . AtLeastOnce ( ) ;
85+ var _parenthesised = OneOf ( _parenthesised1 , _parenthesised2 , _parenthesised3 ) ;
86+
87+ _expr = _tokens . Or ( _parenthesised ) . AtLeastOnce ( ) . MergerMany ( ) ;
88+
89+ Parser < char , IEnumerable < Parser < char , string > > > expr = null ;
90+
91+
92+ var parenthesised1 = MapToMany ( ParserToParser . Stringc ( '(' ) , Rec ( ( ) => expr ) , ParserToParser . Stringc ( ')' ) ) ;
93+ var parenthesised2 = MapToMany ( ParserToParser . Stringc ( '[' ) , Rec ( ( ) => expr ) , ParserToParser . Stringc ( ']' ) ) ;
94+ var parenthesised3 = MapToMany ( ParserToParser . Stringc ( '{' ) , Rec ( ( ) => expr ) , ParserToParser . Stringc ( '}' ) ) ;
95+ var parenthesised = OneOf ( parenthesised1 , parenthesised2 , parenthesised3 ) ;
96+ var anyCharExcept = _anyCharExcept . Select ( x => String ( x ) ) ;
97+ var whitespaces = _whitespaces . Select ( _ => WhitespaceString ) ;
98+ var placeholder = _placeholder . Select ( x => _expr . Select ( x => string . Join ( "" , x ) ) ) ;
99+ var token = OneOf ( anyCharExcept , placeholder , whitespaces ) ;
100+ var tokens = token . AtLeastOnce ( ) ;
101+
102+ expr = OneOf ( tokens , parenthesised ) . AtLeastOnce ( ) . MergerMany ( ) ;
103+ var parser = expr . Select ( x => Series ( x , enumerable => string . Join ( "" , enumerable ) ) ) ;
104+
105+ //
106+ //
107+ //
108+ // _expr = _tokens.Or(_parenthesised).AtLeastOnce().MergerMany();
109+ //
110+ // var t = "((test > 25) && (test < 50))";
111+ // var t2 = "([test > 25] && {test < 50})";
112+
113+
69114 //template parser
70- var separator = Whitespaces . AsString ( ) . Or ( EndOfLine ) ;
71- var any = AnyCharExcept ( '$' , ' ' , '\n ' ) . AtLeastOnceString ( ) ;
72- var token = PlaceholderParser . Identifier . Between ( Char ( '$' ) ) . Try ( ) ;
73- var templateParser = token . Or ( any ) . Separated ( separator ) ;
115+ // var separator = Whitespaces.AsString().Or(EndOfLine);
116+ // var any = AnyCharExcept('$', ' ', '\n').AtLeastOnceString();
117+ // var token = PlaceholderParser.Identifier.Between(Char('$')).Try();
118+ // var templateParser = token.Or(any).Separated(separator);
74119
75120 //if with lookahead parser
76- var test341 = String ( "if" )
77- . Then ( Char ( '(' ) )
78- . Then ( Any . Until ( Lookahead ( Char ( ')' ) . Then ( End ) . Try ( ) ) ) )
79- . AsString ( ) ;
121+ // var test341 = String("if")
122+ // .Then(Char('('))
123+ // .Then(Any.Until(Lookahead(Char(')').Then(End).Try())))
124+ // .AsString();
80125
81126 var template1 =
82127 "if(($condition$) = ($test$))\n " +
83128 "return $value1$;\n " +
84129 "else\n " +
85130 "return $value2$;" ;
86-
131+
132+
133+ var example1 =
134+ "if(value == 5)\n " +
135+ "return \" Result1\" ;\n " +
136+ "else\n " +
137+ "return \" Result2\" ;" ;
138+
87139 var template2 =
88- "if($var$ $sign$ null)\n " +
89- "{\n " +
90- "$var$ = $value$;\n " +
91- "}" ;
92-
93- var template3 =
94- "if($value1$ $sign$ null)\n " +
95- "{\n " +
140+ "if($var$ $sign$ null)\n " +
141+ "{\n " +
142+ "$var$ = $value$;\n " +
143+ "}" ;
144+
145+ var template3 =
146+ "if($value1$ $sign$ null)\n " +
147+ "{\n " +
96148 "$var$ = $value1$;\n " +
97- "}\n " +
98- "else\n " +
99- "{\n " +
149+ "}\n " +
150+ "else\n " +
151+ "{\n " +
100152 "$var$ = $value2$;\n " +
101- "}" ;
102- // var template2 = "((test)=(test2))";
103- // var template3 = "$test1$ test test34";
104- var test = expr . ParseOrThrow ( template3 ) ;
153+ "}" ;
154+
155+
156+
157+ var testTempalte = "if($test$)" ;
158+ var testText = "if((value1) && (value2))" ;
159+
160+ var test = _expr . ParseOrThrow ( testTempalte ) ;
161+
162+ var resParser = parser . ParseOrThrow ( testTempalte ) ;
163+ var res = resParser . ParseOrThrow ( testText ) ;
164+
165+
166+
167+ // var templateResult = test.ParseOrThrow("test");
105168 }
106169 }
107170}
0 commit comments