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 string Parse(ExpressionReader reader) { if (reader == null) { throw new ArgumentNullException(nameof(reader)); } if (reader.ReadChar() != '\'') { throw reader.UnexpectedCharacterException(); } var value = new StringBuilder(); while (reader.Peek() != -1) { var c = reader.ReadChar(); switch (c) { case '\\': value.Append(ParseEscapedCharacter(reader)); break; case '\'': return(value.ToString()); default: value.Append(c); break; } } throw reader.UnexpectedCharacterException(); }
public static char PeekChar(this ExpressionReader reader) { if (reader == null) { throw new ArgumentNullException(nameof(reader)); } return((char)reader.Peek()); }
private static IEnumerable <IBooleanExpression> ParseBooleanExpressions( ExpressionReader reader, BooleanOperator booleanOperator) { reader.SkipWhitespace(); yield return(ParseExpressionPart(reader, booleanOperator)); reader.SkipWhitespace(); if (reader.Peek() == -1) { yield break; } while (reader.Peek() != -1) { switch (reader.PeekChar()) { case '|': case '&': var @operator = ParseBooleanOperator(reader); reader.SkipWhitespace(); yield return(ParseExpressionPart(reader, @operator)); reader.SkipWhitespace(); break; case ')': yield break; default: throw reader.UnexpectedCharacterException(); } } if (reader.Peek() != -1) { throw reader.UnexpectedCharacterException(); } }
private static IBooleanExpression ParseExpression(ExpressionReader reader, BooleanOperator booleanOperator) { var expressions = ParseBooleanExpressions(reader, booleanOperator).ToArray(); if (reader.Peek() != -1) { throw reader.UnexpectedCharacterException(); } return(expressions.Length == 1 ? expressions.Single() : new GroupExpression(expressions, booleanOperator)); }
public static VariableString Parse(string text) { if (text == null) { throw new ArgumentNullException(nameof(text)); } var result = new List <object>(); var basicString = new StringBuilder(); using (var reader = new ExpressionReader(text)) { while (reader.Peek() != -1) { switch (reader.PeekChar()) { case '$': FlushString(); result.Add(VariableParser.ParseVariable(reader)); break; default: var c = reader.ReadChar(); basicString.Append(c); break; } } } FlushString(); return(new VariableString(result)); void FlushString() { if (basicString.Length <= 0) { return; } result.Add(basicString.ToString()); basicString.Clear(); } }