Пример #1
0
int main()
{
    
	Node* AppleCo = BuildAppleCo();
	PrintVisitor* pVisitor = new PrintVisitor();
	AppleCo->Accept(pVisitor);
	cout<<"______________________"<<endl << endl;
        SearchVisitor* sVisitor = new SearchVisitor();
        
        string craigQuery="Craig Federighi";
        sVisitor->setQuery(craigQuery);
        AppleCo->Accept(sVisitor);
        sVisitor->PrintResults();
        sVisitor->Reset();
        
        string ipadQuery="iPhone";
        sVisitor->setQuery(ipadQuery);
        AppleCo->Accept(sVisitor);
        sVisitor->PrintResults();
        sVisitor->Reset();
        
        string philQuery="Phillip";
        sVisitor->setQuery(philQuery);
        AppleCo->Accept(sVisitor);
        sVisitor->PrintResults();
        sVisitor->Reset();

        string cookQuery="Cook";
        sVisitor->setQuery(cookQuery);
        AppleCo->Accept(sVisitor);
        sVisitor->PrintResults();
        sVisitor->Reset();

        string DNEQuery="DNE";
        sVisitor->setQuery(DNEQuery);
        AppleCo->Accept(sVisitor);
        sVisitor->PrintResults();
        sVisitor->Reset();

	cout<<"______________________"<<endl << endl;
        CountVisitor* cVisitor = new CountVisitor();
	AppleCo->Accept(cVisitor);
        cVisitor->PrintResults();
        cVisitor->Reset();

	delete AppleCo;
        delete cVisitor;
        delete sVisitor;
        delete pVisitor;
        
	return 0;
}
std::string NodeToPosixString(const Node &node) {
    PosixWordsPrinter printer;
    node.Accept(printer);
    return printer.GetString();
}
std::string NodeToRawString(const Node &node) {
  std::stringstream ss;
  StringPrinter printer{ss};
  node.Accept(printer);
  return ss.str();
}