Exemple #1
0
 public static Predicate <TokenMarker> Keyword(TokenMarker currentMarker)
 {
     return(x =>
     {
         return IsKeyword(x.Token);
     });
 }
Exemple #2
0
        /// <summary>   Reads the body of a lambda expression. </summary>
        ///
        /// <remarks>   Vasko, 25-Dec-17. </remarks>
        ///
        /// <returns>   The lambda. </returns>

        public LambdaExpression ReadLambda(Predicate <TokenMarker> predicate = null)
        {
            var         parameters     = new List <ParameterExpression>();
            var         crToken        = Reader.Current;
            TokenMarker marker         = null;
            bool        hasParenthesis = false;

            if (crToken.TokenType == TokenType.OpenParenthesis)
            {
                hasParenthesis = true;
                Reader.DiscardToken(TokenType.OpenParenthesis);
                marker = Reader.Marker.Clone();
                var fnEndPredicate = DonutSyntaxReader.Filters.FunctionCallEnd(marker);
                while (!Reader.IsComplete && !fnEndPredicate(Reader.Marker))
                {
                    ParameterExpression fnParameter = ReadFunctionParameter();
                    parameters.Add(fnParameter);
                    if (Reader.Current.TokenType == TokenType.Comma)
                    {
                        Reader.DiscardToken();
                    }
                }
            }
            if (hasParenthesis && Reader.Current.TokenType == TokenType.CloseParenthesis)
            {
                Reader.DiscardToken(TokenType.CloseParenthesis);
            }
            Reader.DiscardToken(TokenType.Lambda);
            var fBody  = ReadExpressions(predicate);
            var lambda = new LambdaExpression(fBody);

            lambda.Parameters = parameters;
            return(lambda);
        }
Exemple #3
0
        public TokenMarker Clone()
        {
            var c = new TokenMarker();

            c.Depth = Depth;
            c.Token = Token;
            return(c);
        }
Exemple #4
0
 public static Predicate <TokenMarker> BlockEnd(TokenMarker marker)
 {
     return(x =>
     {
         return x.Depth == marker.Depth &&
         x.Token != null &&
         (x.Token.TokenType == TokenType.CloseCurlyBracket);
     });
 }
Exemple #5
0
 public static Predicate <TokenMarker> IndexParameterEnd(TokenMarker currentMarker)
 {
     return(x =>
     {
         return x.Depth == currentMarker.Depth &&
         x.Token != null &&
         (x.Token.TokenType == TokenType.Comma || x.Token.TokenType == TokenType.CloseBracket);
     });
 }
Exemple #6
0
 public static Predicate <TokenMarker> FunctionParameterEnd(TokenMarker currentMarker)
 {
     return(x =>
     {
         return x.Depth == currentMarker.Depth &&
         x.Token != null &&
         (x.Token.TokenType == TokenType.Comma || x.Token.TokenType == TokenType.CloseParenthesis);
     });
 }
Exemple #7
0
 public static Predicate <TokenMarker> ExpressionTermination(TokenMarker currentMarker)
 {
     return(x =>
     {
         return x.Depth == currentMarker.Depth &&
         (x.Token.TokenType == TokenType.Semicolon ||
          x.Token.TokenType == TokenType.NewLine);
     });
 }
Exemple #8
0
            /// <summary>   Returns a predicate for a cursor with a token on the same level as the given one. </summary>
            ///
            /// <remarks>   Vasko, 05-Dec-17. </remarks>
            ///
            /// <param name="currentMarker">    The current cursor. </param>
            /// <param name="tokenType">        Type of the token. </param>
            ///
            /// <returns>   A Predicate&lt;TokenCursor&gt; </returns>

            public static Predicate <TokenMarker> SameLevel(TokenMarker currentMarker, TokenType tokenType)
            {
                return(x =>
                {
                    return x.Depth == currentMarker.Depth &&
                    x.Token != null &&
                    x.Token.TokenType == tokenType;
                });
            }
Exemple #9
0
        /// <summary>
        /// Seeks untill a predicate matches.
        /// </summary>
        /// <param name="filter"></param>
        /// <returns></returns>
        public TokenMarker SeekTo(Predicate <TokenMarker> filter)
        {
            if (Marker.Token != null && filter(Marker))
            {
                return(Marker.Clone());
            }
            TokenMarker matchingMarker = null;

            foreach (var item in this.AsEnumerable())
            {
                if (filter(item))
                {
                    return(item);
                }
            }
            return(matchingMarker);
        }
Exemple #10
0
 public TokenReader(IEnumerable <DslToken> tokens)
 {
     Marker = new TokenMarker();
     Load(tokens);
 }