Token* RegxParser::processParen() { processNext(); int num = fNoGroups++; Token* tok = fTokenFactory->createParenthesis(parseRegx(true),num); if (fState != REGX_T_RPAREN) ThrowXMLwithMemMgr(ParseException,XMLExcepts::Parser_Factor1, fMemoryManager); processNext(); return tok; }
Token* ParserForXMLSchema::processParen() { // XML Schema doesn't support back references processNext(); Token* retTok = getTokenFactory()->createParenthesis(parseRegx(true), 0); if (getState() != REGX_T_RPAREN) { ThrowXMLwithMemMgr(ParseException, XMLExcepts::Parser_Factor1, getMemoryManager()); } processNext(); return retTok; }
// --------------------------------------------------------------------------- // RegxParser: Parsing methods // --------------------------------------------------------------------------- Token* RegxParser::parse(const XMLCh* const regxStr, const int options) { // if TokenFactory is not set do nothing. // REVISIT - should we throw an exception if (fTokenFactory == 0) { return 0; } fOptions = options; fOffset = 0; fNoGroups = 1; fHasBackReferences = false; setParseContext(regexParserStateNormal); if (fString) fMemoryManager->deallocate(fString);//delete [] fString; fString = XMLString::replicate(regxStr, fMemoryManager); if (isSet(RegularExpression::EXTENDED_COMMENT)) { if (fString) fMemoryManager->deallocate(fString);//delete [] fString; fString = RegxUtil::stripExtendedComment(regxStr, fMemoryManager); } fStringLen = XMLString::stringLen(fString); processNext(); Token* retTok = parseRegx(); if (fOffset != fStringLen) { XMLCh value1[65]; XMLString::sizeToText(fOffset, value1, 64, 10, fMemoryManager); ThrowXMLwithMemMgr2(ParseException,XMLExcepts::Parser_Parse1, value1, fString, fMemoryManager); } if (fReferences != 0) { XMLSize_t refSize = fReferences->size(); for (XMLSize_t i = 0; i < refSize; i++) { if (fNoGroups <= fReferences->elementAt(i)->fReferenceNo) { ThrowXMLwithMemMgr(ParseException,XMLExcepts::Parser_Parse2, fMemoryManager); } } fReferences->removeAllElements(); } return retTok; }