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"); }
int main(int argc, char* argv[]) { std::cout << "\n Testing Tokenizer class\n " << std::string(25, '=') << std::endl; std::cout << "\n Note that comments and quotes are returned as single tokens\n\n"; // collecting tokens from a string Toker t_fromStr("tokens from a string: -> int x; /* a comment */", false); std::string tok; do { tok = t_fromStr.getTok(); std::cout << " " << tok; } while (tok != ""); std::cout << "\n\n"; // collecting tokens from files, named on the command line if (argc < 2) { std::cout << "\n please enter name of file to process on command line\n\n"; return 1; } for (int i = 1; i<argc; ++i) { std::cout << "\n Processing file " << argv[i]; std::cout << "\n " << std::string(16 + strlen(argv[i]), '-') << "\n"; try { Toker t; t.setMode(Toker::xml); // comment out to show tokenizing for code // t.setSingleCharTokens("<>"); // will return same results as above for XML if (!t.attach(argv[i])) { std::cout << "\n can't open file " << argv[i] << "\n\n"; continue; } t.returnComments(); // remove this statement to discard comment tokens std::string temp; do { temp = t.getTok(); std::cout << " ln: " << t.lines() << ", br lev: " << t.braceLevel() << ", tok size: " << std::setw(3) << temp.length() << " -- "; if (temp != "\n") std::cout << temp << std::endl; else std::cout << "newline\n"; } while (temp != ""); } catch (std::exception& ex) { std::cout << " " << ex.what() << "\n\n"; } } }