Header-Schablone

Top  Previous  Next

Codeerzeugung > Code-Schablonen > Header-Schablone

 

Die unmodifizierte Schablone für den Header einer TETRA-Parserklasse ist folgende:

 

 

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

//   ttparser_h.frm

//   TextTransformer C++ Support Frame

//   Author: Dr. Detlef Meyer-Eltz

//   http://www.texttransformer.de

//   http://www.texttransformer.com

//   Meyer-Eltz@t-online.de

//

//   March, 2006  Version 1.1.0

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

 

 

#ifndef -->ParserHeaderSentinel

#define -->ParserHeaderSentinel

              

              

#ifndef tt_parserH               

#include "tt_parser.h"

#endif

 

#ifndef tt_symbolentryH

#include "tt_symbolentry.h"

#endif

 

// the following includes and the according typedefs can be removed,

// if you don't use them

 

#include "boost/format.hpp"

 

#ifndef tt_mapH

#include "tt_map.h"

#endif

 

#ifndef tt_vectorH

#include "tt_vector.h"

#endif

 

#ifndef tt_nodeH

#include "tt_node.h"

#endif

 

namespace tetra

{

 

class -->ParserClassName : public CTT_Parser< -->CharType, -->PluginType >

{   

typedef CTT_Parser< -->CharType, -->PluginType >  inherited;                       

public:

 

typedef CTT_Node<char_type>          node;

typedef CTT_Map<str, bool >          mstrbool;

typedef CTT_Map<str, int >           mstrint;

typedef CTT_Map<str, unsigned int >  mstruint;

typedef CTT_Map<str, char >          mstrchar;

typedef CTT_Map<str, str >           mstrstr;

typedef CTT_Map<str, node >          mstrnode;

typedef CTT_Vector< bool >           vbool;

typedef CTT_Vector< int >            vint;

typedef CTT_Vector< unsigned int >   vuint;

typedef CTT_Vector< char >           vchar;

typedef CTT_Vector< str >            vstr;

typedef CTT_Vector< node >           vnode;

 

 

-->ScannerEnum

 

-->ParserClassName(); 

 

-->StartRuleDeclaration

-->InterfaceDeclarations

 

private:

     

-->ParserRuleDeclarations       

-->InitProcDeclaration

 

};

 

} // namespace tetra

 

 

#endif // -->ParserHeaderSentinel

 

 

Mit dem Pfeil "-->" und anschließendem Schlüsselwort sind die Positionen gekennzeichnet, an die TETRA seinen Code schreibt.

 

-->ParserHeaderSentinel wird bei der Codeerzeugung durch einen Ausdruck ersetzt, der aus dem Namen der Startregel des Parser gebildet wird. Ist beispielsweise der Name der Startregel: "Pascal", so wird der gesamte Sentinel folgendermaßen aussehen:

 

#ifndef PascalparserH

#define PascalparserH

...

#endif // PascalparserH

 

 

 

-->ScannerEnum bezeichnet den Ort, an den Enumerationstypen geschrieben werden. Die einzelnen Enumerationswerte sind Indizes für die verschiedenen Mini-Scanner.

 

 

-->ParserClassName steht für den Namen der Parserklasse

 

Das zweite Vorkommen von -->ParserClassName bezeichnet den Konstruktor der Parserklasse. In die anschließende Klammer können evtl. zusätzliche Parameter eingefügt werden.

 

 

StartRuleDeclaration bezeichnet die öffentliche Klassenfunktion zum Aufruf des Parsers, der aus dem Namen der Startregel gebildet ist, z.B.:

 

void Pascal(cts xtBegin, cts xtEnd);

 

ctsr ist ein typedef für std::string::const_iterator.

 

InitProcDeclaration steht für die Deklaration:

 

void Init();

 

Damit wird die Prozedur zur Initialisierung der Klassenvariablen bezeichnet:

 

InterfaceDeclarations steht für die Reihe der Deklarationen von 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. .Die Deklarationen haben die gleiche Form, wie die Deklaration der Startregel.

 

ParserRuleDeclarations schließlich bezeichnet die Position an der die Liste der Deklarationen für die einzelnen Produktionen und für Unterklassen zum Scannen des Inputs eingefügt werden. Jeder Production entspricht so einer gleichnamigen  Klassenfunktion der Parserklasse. Insbesondere die Startregel selbst wird hier deklariert:

 

"void Pascal(tetra::sps& xState);"

 

sps ist ein typedef für CTT_ParserState, eine Klasse die den Zustand, d.h. insbesondere die Positionen des Parseprozesses enthält, und die als Parameter von Regel zu Regel weitergereicht wird, wobei jeweils der Zustand aktualisiert wird.



Diese Seite gehört zur TextTransformer Dokumentation

Home  Inhalt  English