@@ -8,13 +8,15 @@ namespace SimpleStateMachine.StructuralSearch
88 public class PlaceholderParser : ParserWithLookahead < char , string > , IContextDependent
99 {
1010 private readonly string _name ;
11- private IParsingContext _context ;
11+ private IParsingContext ? _context ;
12+ private IParsingContext Context => _context ?? throw new ArgumentNullException ( nameof ( _context ) ) ;
13+
1214 public PlaceholderParser ( string name )
1315 {
1416 _name = name ;
1517 }
1618
17- public override Parser < char , string > BuildParser ( Func < Parser < char , string > ? > next ,
19+ protected override Parser < char , string > BuildParser ( Func < Parser < char , string > ? > next ,
1820 Func < Parser < char , string > ? > nextNext )
1921 {
2022 var nextParser = next ( ) ;
@@ -58,7 +60,7 @@ public override Parser<char, string> BuildParser(Func<Parser<char, string>?> nex
5860 Parser < char , string > ? term = null ;
5961
6062 var parenthesised = Parsers . BetweenOneOfChars ( x => Parser . Char ( x ) . AsString ( ) ,
61- expr : Parser . Rec ( ( ) => term ) ,
63+ expr : Parser . Rec ( ( ) => term ! ) ,
6264 Constant . AllParenthesised ) . JoinToString ( ) ;
6365
6466 term = Parser . OneOf ( parenthesised , token ) . Many ( ) . JoinToString ( ) ;
@@ -73,24 +75,23 @@ public override Parser<char, string> BuildParser(Func<Parser<char, string>?> nex
7375 return parser ;
7476 }
7577
76- public override bool TryParse ( ref ParseState < char > state , ref PooledList < Expected < char > > expected ,
77- out string result )
78+ public override bool TryParse ( ref ParseState < char > state , ref PooledList < Expected < char > > expected , out string result )
7879 {
7980 bool res ;
8081
8182 // No use look-ahead if placeholder is already defined
82- if ( _context . TryGetPlaceholder ( _name , out var placeholder ) )
83+ if ( Context . TryGetPlaceholder ( _name , out var placeholder ) )
8384 {
84- res = Parser . String ( placeholder . Value ) . TryParse ( ref state , ref expected , out result ) ;
85+ res = Parser . String ( placeholder . Value ) . TryParse ( ref state , ref expected , out result ! ) ;
8586 }
8687 else
8788 {
88- res = parser . Value . Match ( ) . TryParse ( ref state , ref expected , out var match ) ;
89+ res = LookaheadParser . Value . Match ( ) . TryParse ( ref state , ref expected , out var match ) ;
8990 result = match . Value ;
9091 if ( res )
9192 {
92- _context . AddPlaceholder ( new Placeholder (
93- context : ref _context ,
93+ Context . AddPlaceholder ( new Placeholder (
94+ context : ref _context ! ,
9495 name : _name ,
9596 match : match ) ) ;
9697 }
0 commit comments