void main() { try { std::stack<PNode<XMLValue>*> *nStack = new std::stack<PNode<XMLValue>*>; PNode<XMLValue>* rootnode = new PNode<XMLValue>(XMLValue(XMLValue::TAG,"Document")); XMLTree* xtree = new XMLTree(rootnode); ParserState* ps = new ParserState; Toker* pToker = new Toker; pToker->setMode(Toker::xml); //XML parser mode XmlParts* pSemi = new XmlParts(pToker); Parser* pParser = new Parser(pSemi); ElementEnd* pElementendrule = new ElementEnd(nStack,ps); ElementStart* pElementstartrule = new ElementStart(nStack,ps); ElementSelfClosed* pElementselfcrule = new ElementSelfClosed(nStack,ps); Text* ptextrule = new Text(nStack,ps); Comment* pCommentrule = new Comment(nStack,ps); ProcInstr* pIinstrrule = new ProcInstr(nStack,ps); EndFound* pEndact = new EndFound(nStack,xtree); StartFound* pStartact = new StartFound(nStack,xtree); SelfClosedFound* pSelfClosedact = new SelfClosedFound(nStack,xtree); TextFound* pTextact = new TextFound(nStack,xtree); CommentFound* pCommentact = new CommentFound(nStack,xtree); ProcInstrFound* pInstract = new ProcInstrFound(nStack,xtree); pElementendrule->addAction(pEndact); pElementstartrule->addAction(pStartact); pElementselfcrule->addAction(pSelfClosedact); ptextrule->addAction(pTextact); pCommentrule->addAction(pCommentact); pIinstrrule->addAction(pInstract); pParser->addRule(pElementendrule); pParser->addRule(pElementstartrule); pParser->addRule(pElementselfcrule); pParser->addRule(ptextrule); pParser->addRule(pCommentrule); pParser->addRule(pIinstrrule); nStack->push(rootnode); if(pParser) { if(! pToker->attach("..\\LectureNote.xml")) { std::cout << "\n could not open file " << std::endl; return; } } while(pParser->next()) pParser->parse(); //display the tree and the rebuilt xml XMLDisplay disply(xtree); //generate the string of tree and rebuilt xml disply.buildTreeDisplay(); disply.rebuildXML(); //attach the output file to the display object disply.AttachFile("..\\output.txt"); //display them std::cout<<"=======================Parser Tree====================="<<std::endl; std::cout<<disply.OutputTree(); std::cout << "\n\n"; std::cout<<"=====================Rebuild XML====================="<<std::endl; std::cout<<disply.OutputXML(); delete pEndact; delete pStartact; delete pSelfClosedact; delete pTextact; delete pCommentact; delete pInstract; delete pElementendrule; delete pElementstartrule; delete pElementselfcrule; delete ptextrule; delete pCommentrule; delete pIinstrrule; delete pToker; delete pSemi; delete pParser; delete ps; delete nStack; xtree->remove(xtree->getroot()); std::vector< PNode<XMLValue>* > deletednodes = xtree->getdeletednodes(); for(size_t i = 0; i < deletednodes.size(); ++i) delete deletednodes[i]; delete xtree; } catch(std::exception& ex) { std::cout << "\n\n " << ex.what() << "\n\n"; } ::system("pause"); }