public void ThrowParsingException(string s) { _reader.ThrowParsingException(s); }
/// Parse multi-expression, like ${a|b|=2+3} public IOperation ParseMulti(ParsingReader reader) { Operations.OperationVariableAccess va = new Operations.OperationVariableAccess(); StringBuilder sb = new StringBuilder(); bool orMet = true; int n; while ((n = reader.Peek()) != -1) { var q = (char)n; if (q == '}' || q == ')' || q == ']') { break; } switch (q) { case '|': reader.Read(); va.AddName(sb.ToString()); sb.Length = 0; orMet = true; break; case '\'': case '\"': case '`': orMet = false; if (sb.Length != 0) { reader.ThrowParsingException("Quote must be a first character"); } va.AddValue(reader.ReadQuote()); reader.SkipWhiteSpaceAndComments(); if (reader.Peek() != '}' && reader.Peek() != '|') { reader.ThrowParsingException("Unexpected character '" + (char)reader.Peek() + "'"); } sb.Length = 0; break; case '=': orMet = false; reader.Read(); var v = Parse(reader); if (v != null) { va.AddExpression(v); } else { va.AddValue(null); } break; default: orMet = false; sb.Append(q); reader.Read(); break; } } if (sb.Length > 0 || orMet) { va.AddName(sb.ToString()); } return(va); }