@@ -11,7 +11,7 @@ namespace ExpressionEngine
1111 public class ExpressionGrammar
1212 {
1313 private readonly Parser < IRule > _method ;
14- private readonly Parser < ValueTask < ValueContainer > > _input ;
14+ private readonly Parser < Task < ValueContainer > > _input ;
1515
1616 public ExpressionGrammar ( IEnumerable < IFunction > functions )
1717 {
@@ -66,14 +66,7 @@ from index in _method.Or(stringLiteral).Or(integer).Contained(lBracket, rBracket
6666 from nll in nullConditional
6767 from dot in Parse . Char ( '.' )
6868 from index in Parse . AnyChar . Except (
69- lBracket
70- . Or ( rBracket )
71- . Or ( lParenthesis )
72- . Or ( rParenthesis )
73- . Or ( Parse . Char ( '@' ) )
74- . Or ( Parse . Char ( ',' ) )
75- . Or ( Parse . Char ( '.' ) )
76- . Or ( Parse . Char ( '?' ) )
69+ Parse . Chars ( '[' , ']' , '{' , '}' , '(' , ')' , '@' , ',' , '.' , '?' )
7770 ) . Many ( ) . Text ( )
7871 select new IndexRule ( new StringLiteralRule ( new ValueContainer ( index ) ) , nll ) ;
7972
@@ -106,29 +99,22 @@ from indexes in bracketIndices.Or(dotIndices).Many()
10699 Parse . Char ( '}' ) )
107100 . Select ( x => x . Evaluate ( ) ) ;
108101
109- Parser < ValueTask < ValueContainer > > expression =
110- from at in Parse . Char ( '@' )
111- from method in _method
112- select method . Evaluate ( ) ;
102+ Parser < Task < ValueContainer > > expression =
103+ Parse . Char ( '@' ) . SelectMany ( at => _method , async ( at , method ) => await method . Evaluate ( ) ) ;
113104
114105 Parser < string > allowedString =
115106 from t in simpleString . Or ( allowedCharacters ) . Many ( )
116107 select string . Concat ( t ) ;
117108
118- Parser < ValueTask < ValueContainer > > joinedString =
109+ Parser < Task < ValueContainer > > joinedString =
119110 from e in (
120111 from preFix in allowedString
121112 from exp in enclosedExpression . Optional ( )
122113 select exp . IsEmpty ? preFix : preFix + exp . Get ( ) )
123114 . Many ( )
124- select new ValueTask < ValueContainer > ( new ValueContainer ( string . Concat ( e ) ) ) ;
115+ select Task . FromResult ( new ValueContainer ( string . Concat ( e ) ) ) ;
125116
126- Parser < ValueTask < ValueContainer > > charPrefixedString =
127- from at in Parse . Char ( '@' )
128- from str in Parse . LetterOrDigit . Many ( ) . Text ( ) . Except ( Parse . Chars ( '{' , '@' ) )
129- select new ValueTask < ValueContainer > ( new ValueContainer ( str ) ) ;
130-
131- _input = expression . Or ( charPrefixedString ) . Or ( joinedString ) ;
117+ _input = expression . Or ( joinedString ) ;
132118 }
133119
134120 public async ValueTask < string > EvaluateToString ( string input )
0 commit comments