Implementations-Schablone

Top  Previous  Next

Codeerzeugung > Code-Schablonen > Implementations-Schablone

 

Die unmodifizierte Schablone für die Implementation einer TETRA-Parserklasse ist folgende:

 

 

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

//   ttparser_cpp.frm

//   TextTransformer C++ Support Frame

//   Copyright: Dr. Detlef Meyer-Eltz

//   http://www.texttransformer.de

//   http://www.texttransformer.com

//   Meyer-Eltz@t-online.de

//

//   March, 2006  Version 1.1.0

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

 

 

#ifdef __BORLANDC__

#pragma hdrstop

#endif

 

 

#include "-->ParserHeaderName"

#include <iostream>

#include "tt_exception.h"

#include "tt_guard.h"

#include "tt_localscanner.h"

#include "tt_parsestateplugin.h"

#include "tt_scanner.h"

 

#define indent xState.GetPlugin()->GetIndentPtr()                          

                                                  

using namespace std;

using namespace tetra;

 

// return types

typedef -->ParserClassName::node node;

typedef -->ParserClassName::str str;

 

-->TokenList

                               

             

-->ParserClassName::-->ParserClassName()

-->MemberInitialization

{

try

{

   CreateScannerArray(eScannerLast);

   Init();

}

catch(boost::regex_error& xErr)

{

   cleanup();

   throw CTT_Message(xErr.what());

}

catch(CTT_Message& eMsg)

{

   cleanup();

   // did you use the actual token file?

   throw eMsg;

}

catch(...)   // std::bad_alloc

{

   cleanup();

   // did you use the actual token file?

   throw CTT_Message("parser creation failed");

}

}

 

-->StartRuleHeading

{

-->StartRule

}

 

-->InitProcImplementation

         

-->InterfaceImplementations

  

-->ParserRules

 

 

 

-->ParserHeaderName wird zu Pascalparser.h, um bei dem Beispiel aus dem vorherigen Abschnitt zu bleiben

 

 

-->TokenList wird durch eine auskommentiert Liste der Namen und Definitionen der Token ersetzt. Diese Liste dient lediglich dem besseren Verständnis des nachfolgenden Codes.

 

-->ParserClassName hat dieselbe Bedeutung wie im vorherigen Abschnitt beschrieben. In den Klammerausdruck hinter dem zweiten Vorkommen von ParserClassName können die der Deklaration entsprechenden Parameter geschrieben werden, falls auch die Header-Schablone entsprechend modifiziert ist.

 

 

-->MemberInitialization, hier werden Klassenvariablen - z.B. Funktionstabellen -initialisiert.

 

-->StartRuleHeading entspricht der ParserCallDeclaration der Header-Schablone. Dies ist der Kopf der Aufruffunktion des Parsers.

 

-->StartRule reserviert den Platz für den Funktionsblock der Aufruffunktion des Parsers.Er kann bei Bedarf von einem try-catch-Block eingeschlossen werden.

 

-->InitProcImplementation ist der Ort an dem die Prozedur zur Initialisierung der Klassenvariablen eingefügt wird.

 

-->InterfaceImplementations steht für die Reihe der Funktionen zur direkten Ausführung von anderen als der Startregel. In den lokalen Optionen muss "Interfacemethode erzeugen" aktiviert werden, um die Erzeugung dieser Interface-methoden zu veranlassen. .

 

-->ParserRules schließlich ist die Position an die die Implementierungen der Parserregeln geschrieben werden.



Diese Seite gehört zur TextTransformer Dokumentation

Home  Inhalt  English