String QueryParseError::lexicalError(bool EOFSeen, int32_t lexState, int32_t errorLine, int32_t errorColumn, 
                                      const String& errorAfter, wchar_t curChar)
 {
     StringStream buffer;
     buffer << L"Lexical error at line " << errorLine << L", column " << errorColumn + L".  Encountered:";
     if (EOFSeen)
         buffer << L"<EOF>";
     else
         buffer << L"\"" << addEscapes(String(1, curChar)) << L"\"";
     buffer << L" (" + (int32_t)curChar << L"), after : \"" << addEscapes(errorAfter) + L"\"";
     return buffer.str();
 }
Beispiel #2
0
String quoteIfNeeded(const String& str, bool forceQuote)
{
  static String specialChars(" \"\\'");
  for (unsigned i = 0; !forceQuote && i < str.length(); i++)
    forceQuote |= (specialChars.find_first_of(str[i]) != string::npos);

  if (forceQuote)
    return "\"" + addEscapes(str, "\"") + "\"";
  else
    return str;
}
 String QueryParseError::parseError(QueryParserTokenPtr currentToken, Collection< Collection<int32_t> > expectedTokenSequences,
                                    Collection<String> tokenImage)
 {
     StringStream expected;
     int32_t maxSize = 0;
     for (int32_t i = 0; i < expectedTokenSequences.size(); ++i)
     {
         if (maxSize < expectedTokenSequences[i].size())
             maxSize = expectedTokenSequences[i].size();
         for (int32_t j = 0; j < expectedTokenSequences[i].size(); ++j)
             expected << tokenImage[expectedTokenSequences[i][j]] << L" ";
         if (expectedTokenSequences[i][expectedTokenSequences[i].size() - 1] != 0)
             expected << L"...";
         expected << L"\n    ";
     }
     StringStream retval;
     retval << L"Encountered \"";
     QueryParserTokenPtr token(currentToken->next);
     for (int32_t i = 0; i < maxSize; ++i)
     {
         if (i != 0)
             retval << L" ";
         if (token->kind == 0)
         {
             retval << tokenImage[0];
             break;
         }
         retval << L" " << tokenImage[token->kind] << L" \"" << addEscapes(token->image) << L" \"";
         token = token->next;
     }
     retval << L"\" at line " << currentToken->next->beginLine << L", column " << currentToken->next->beginColumn;
     retval << L".\n";
     if (expectedTokenSequences.size() == 1)
         retval << L"Was expecting:\n    ";
     else
         retval << L"Was expecting one of:\n    ";
     retval << expected.str();
     return retval.str();
 }