@@ -10,14 +10,14 @@ namespace SimpleStateMachine.StructuralSearch.CustomParsers;
1010
1111internal class PlaceholderParser : ParserWithLookahead < char , string > , IContextDependent
1212{
13- private static readonly IReadOnlySet < char > InvalidStringLiteralChars = new HashSet < char > ( Constant . AllParenthesis )
13+ internal static readonly IReadOnlySet < char > InvalidStringLiteralChars = new HashSet < char > ( Constant . AllParenthesis )
1414 {
1515 Constant . CarriageReturn ,
1616 Constant . LineFeed ,
1717 Constant . Space
1818 } ;
1919
20- private static readonly Parser < char , char > StringLiteralChar = Parser . AnyCharExcept ( InvalidStringLiteralChars ) ;
20+ internal static readonly Parser < char , char > StringLiteralChar = Parser . AnyCharExcept ( InvalidStringLiteralChars ) ;
2121
2222 private readonly string _name ;
2323 private IParsingContext ? _context ;
@@ -62,13 +62,46 @@ protected override Parser<char, string> BuildParser(Func<Parser<char, string>?>
6262 } ) . Try ( ) ) ;
6363 }
6464
65- var anyString = StringLiteralChar . AtLeastOnceAsStringUntil ( lookahead ) ;
66- var simpleString = StringLiteralChar . AtLeastOnceString ( ) ;
65+ return CreateParser ( lookahead ) ;
66+
67+
68+ //parenthesised and tokens and whiteSpaces
69+ // var prdsAndTokens = Parser.OneOf(parenthesised, token)
70+ // .AtLeastOnceUntil(lookahead)
71+ // .JoinToString()
72+ // .Try();
73+
74+ // var parser = prdsAndTokens.Or(anyString);
75+ }
76+
77+ // internal static Parser<char, string> CreateParser(Parser<char, Unit> terminator)
78+ // {
79+ // var simpleString = StringLiteralChar.AtLeastOnceAsStringUntil(terminator).Select(x => x);
80+ // var whitespaces = Parser.OneOf(Constant.WhitespaceChars).AtLeastOnceAsStringUntil(terminator).Select(x => x);
81+ // var token = Parser.OneOf(simpleString.Try(), whitespaces).Select(x => x);
82+ //
83+ // Parser<char, string>? parser = null;
84+ //
85+ // // var parserBetweenParentheses = Parser.Rec(() => parser ?? throw new ArgumentNullException(nameof(parser)))
86+ // // .BetweenAnyParentheses((c1, s, c2) => $"{c1}{s}{c2}");
87+ //
88+ // // parser = Parser.OneOf(token, parserBetweenParentheses).AtLeastOnceUntil(terminator).JoinToString();
89+ // parser = token.Try().Many().JoinToString();
90+ // return parser;
91+ // }
92+
93+ internal static Parser < char , string > CreateParser ( Parser < char , Unit > terminator )
94+ {
95+ var anyString = InvalidStringLiteralChars . AnyCharWithPlshd
96+ . AtLeastOnceAsStringUntil ( lookahead ) ;
97+
98+ var simpleString = CommonTemplateParser . StringWithPlshd ;
6799 var token = Parser . OneOf ( simpleString , Grammar . WhiteSpaces ) . Try ( ) ;
68100 Parser < char , string > ? term = null ;
69101
70- var parenthesised = Parser . Rec ( ( ) => term ?? throw new ArgumentNullException ( nameof ( term ) ) )
71- . BetweenAnyParentheses ( ( c1 , s , c2 ) => $ "{ c1 } { s } { c2 } ") ;
102+ var parenthesised = Parsers . BetweenOneOfChars ( x => Parser . Char ( x ) . AsString ( ) ,
103+ expr : Parser . Rec ( ( ) => term ?? throw new ArgumentNullException ( nameof ( term ) ) ) ,
104+ Constant . AllParenthesised ) . JoinToString ( ) ;
72105
73106 term = Parser . OneOf ( parenthesised , token ) . Many ( ) . JoinToString ( ) ;
74107
@@ -81,7 +114,7 @@ protected override Parser<char, string> BuildParser(Func<Parser<char, string>?>
81114 var parser = prdsAndTokens . Or ( anyString ) ;
82115 return parser ;
83116 }
84-
117+
85118 public override bool TryParse ( ref ParseState < char > state , ref PooledList < Expected < char > > expected ,
86119 out string result )
87120 {
0 commit comments