Beispiel #1
0
        private static string ParseDictionaryKey(ExpressionReader reader)
        {
            reader.Read(); //Skip {

            var key = new StringBuilder();

            while (reader.Peek() != -1 && reader.PeekChar() != '}')
            {
                key.Append(reader.ReadChar());
            }

            if (key.Length == 0)
            {
                throw reader.UnexpectedCharacterException();
            }

            if (reader.Read() != '}')
            {
                throw reader.UnexpectedCharacterException();
            }

            reader.SkipWhitespace();

            return(key.ToString());
        }
Beispiel #2
0
 public static char ReadChar(this ExpressionReader reader)
 {
     if (reader == null)
     {
         throw new ArgumentNullException(nameof(reader));
     }
     return((char)reader.Read());
 }
Beispiel #3
0
        public static void SkipWhitespace(this ExpressionReader reader)
        {
            if (reader == null)
            {
                throw new ArgumentNullException(nameof(reader));
            }

            while (char.IsWhiteSpace(reader.PeekChar()))
            {
                reader.Read();
            }
        }
Beispiel #4
0
        private static ComparisonOperator ParseOperator(ExpressionReader reader)
        {
            var c = reader.ReadChar();

            if (c == '=' && reader.PeekChar() == '=')
            {
                reader.Read();
                return(ComparisonOperator.Equal);
            }

            if (c == '!' && reader.PeekChar() == '=')
            {
                reader.Read();
                return(ComparisonOperator.NotEqual);
            }

            if (c == '>' && reader.PeekChar() == '=')
            {
                reader.Read();
                return(ComparisonOperator.GreaterThanOrEqual);
            }

            if (c == '<' && reader.PeekChar() == '=')
            {
                reader.Read();
                return(ComparisonOperator.LessThanOrEqual);
            }

            if (c == '>')
            {
                return(ComparisonOperator.GreaterThan);
            }

            if (c == '<')
            {
                return(ComparisonOperator.LessThan);
            }

            throw reader.UnexpectedCharacterException();
        }
Beispiel #5
0
        private static IReadOnlyCollection <IBooleanExpression> ParseGroup(ExpressionReader reader)
        {
            reader.Read(); //Skip (
            reader.SkipWhitespace();

            var result = ParseBooleanExpressions(reader, BooleanOperator.And).ToArray();

            reader.SkipWhitespace();

            var c = reader.ReadChar();

            if (c != ')')
            {
                throw reader.UnexpectedCharacterException();
            }

            return(result);
        }
Beispiel #6
0
        private static string ParseDefaultValue(ExpressionReader reader)
        {
            if (reader.PeekChar() != '|')
            {
                return(null);
            }

            reader.Read();

            if (reader.PeekChar() == '\'')
            {
                return(ConstantParser.Parse(reader));
            }

            var value = new StringBuilder();

            while (IsValidDefaultChar(reader.PeekChar()))
            {
                value.Append(reader.ReadChar());
            }

            return(value.ToString());
        }