main-Datei-Schablone

Top  Previous  Next

Codeerzeugung > Code-Schablonen > main-Datei-Schablone

 

Standardmäßig wird mit der folgenden main-Datei-Schablone eine main-Funktion für ein Konsoleprogramm erzeugt. 

 

 

//----------------------------------------------------------

//   ttmain_c.frm

//   TextTransformer C++ Support Frame

//   Copyright: Dr. Detlef Meyer-Eltz 

//   http://www.texttransformer.de

//   http://www.texttransformer.com

//   dme@texttransformer.com

//

//   June, 2009  Version 1.7.0

//----------------------------------------------------------

 

 

#ifdef __BORLANDC__

#pragma hdrstop

#endif

 

 

#include "-->ParserHeaderName"

-->XercesInclude

 

 

                            

using namespace std; 

using namespace tetra;

-->XercesUsingNamespace

 

 

typedef -->ParserClassName::string_type string_type;

 

void usage()

{

    cout << "\nParameters:\n"

            "  -s   source file\n"

            "  -t   target file\n"

         << endl;

}

 

int main(int argc, char* argv[])

{

  string_type sTest;

  const char* pSourceName = NULL;

  const char* pTargetName = NULL;

  

  if (argc < 2)

  {

    usage();

    return 1;

  }

    

  int iParam;

  for(iParam = 1; iParam < argc; iParam++)

  {

    if(argv[iParam][0] != '-')

    {

      usage();

      return 2;

    }

 

    if(!strcmp(argv[iParam], "-s"))

    {

      if(++iParam < argc)

        pSourceName = argv[iParam];

    }

 

    if(!strcmp(argv[iParam], "-t"))

    {

      if(++iParam < argc)

         pTargetName = argv[iParam];

    }

  }

  

  if(pSourceName == NULL  )

  {

    usage();

    return 3;

  }

 

  if(pTargetName == NULL  )

  {

    usage();

    return 4;

  }

 

  if( !-->LoadFile )

  {

      cout << "could not load source file: " << pSourceName;

      return 5;

  }

  

  -->Ostream

  if(!fout)

  {

    cout << "could not open target file: " << pTargetName;

    return 6;

  }

  

  -->PluginType plugin(fout);

  InitPluginPaths(plugin, pSourceName, pTargetName);

  plugin.UseExcept(true);

 

  -->XercesInit

  -->ParserClassName Parser;

  

  try

  {

    Parser.-->StartRuleName(sTest.begin(), sTest.end(), &plugin);

  }

  catch(CTT_ErrorExpected& xErr)

  {

      cout << "expected: "

           << xErr.GetWhat()

           << " in "

           << xErr.GetProduction()

           << "\n";

  }

  catch(CTT_ErrorUnexpected& xErr)

  {

      cout << "unexpected token in: "

           << xErr.GetProduction()

           << "\n";

  }

  catch(CTT_ParseError& xErr)

  {

      cout << xErr.GetWhat();

  }

  catch(CTT_Message& xErr)

  {

    cout << xErr.what();

  }

  /*

  catch(boost::system_error& xErr)

  {

     cout << xErr.what();

  }*/

  catch(exception& xErr)

  {

     cout << xErr.what();

  }

  /* xerces catches

  catch (const OutOfMemoryException&)

  {

    cout << ccpXercesOutOfMemory;

  }

  catch (const DOMException& e)

  {

    cout << "xerces error code: " << e.code << endl;

    char *pMsg = XMLString::transcode(e.getMessage());

    cout << pMsg;

    XMLString::release(&pMsg);

  }

  catch (XMLException& e)

  {

    char *pMsg = XMLString::transcode(e.getMessage());

    cout << pMsg;

    XMLString::release(&pMsg);

  }

  */

  

  if( plugin.HasMessage())

  {

    -->PluginType::ctmmsg t, tEnd = plugin.MsgEnd();

    for(t = plugin.MsgBegin(); t != tEnd; ++t)

      cout << (*t).what() << endl << endl;

  }    

  

  return 0;

}

 

 

Das Programm erwartet zwei Parameter: einen für die Quelltextpfad und einen für den Zielpfad.

 

In der Schablone gibt es fünf neue Platzhalter, die in den anderen Schablonen nicht vorkommen.

 

XercesInclude

XercesUsingNamespace

XercesInit

LoadFile

Ostream

 

Die ersten drei Platzhalter werden gelöscht, wenn im Projekt keine dnode's verwendet werden.

 

 

-->LoadFile wird je nach Modus zum Öffnen der Quelldatei ersetzt durch:

 

load_file_binary( sTest, pSourceName)

 

oder

 

load_file( sTest, pSourceName)

 

 

-->Ostream wird entweder durch wofstream oder durch ofstream ersetzt, je nachdem, ob die Wide-Zeichen Option aktiviert ist oder nicht und je nach Modus zum Öffnen der Zieldatei wird das Flag ios::binary gesetzt oder nicht.

 

 

Wenn dnode's verwendet werden, muss als Plugin-Typ CTT_ParseStateDomPlugin gesetzt werden.

 

-->XercesInclude sorgt für den Einschluss von tt_xerces.h

 

->XercesUsingNamespace fügt folgende Zeile ein:

 

using namespace xercesc;

 

-->XercesInit erzeugt eine CTT_Xerces Instanz und übergibt einen Zeiger auf sie an das Plugin:

 

  CTT_Xerces Xerces("root", "UTF-8", false, true, true, true);

  //Xerces.setDTDParams("", "", "");

  plugin.SetXerces(&Xerces);

  Ctranslation_unitParser::dnode::SetDefaultLabel(L"default_label");

 

 

 

 

 

 

 



Diese Seite gehört zur TextTransformer Dokumentation

Home  Inhalt  English