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()); }
public static char ReadChar(this ExpressionReader reader) { if (reader == null) { throw new ArgumentNullException(nameof(reader)); } return((char)reader.Read()); }
public static void SkipWhitespace(this ExpressionReader reader) { if (reader == null) { throw new ArgumentNullException(nameof(reader)); } while (char.IsWhiteSpace(reader.PeekChar())) { reader.Read(); } }
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(); }
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); }
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()); }