Rückgabewerte

Top  Previous  Next

Beispiele > Rechner > Rückgabewerte

 

Die Zwischenresultate des Rechners wurden bisher über Referenzvariablen aus den aufgerufenen Produktionen erhalten. Referenzvariablen haben den Vorteil, dass sie in beliebiger Zahl verwendet werden können. Beim Rechnerbeispiel gibt es jedoch  jeweils nur einzelne Zwischenresultate.

 

Das Rechner-Beispiel mit Verwendung von Rückgabewerten befindet sich in dem Verzeichnis:

 

\TextTransformer\Beispiele\Rechner2

 

Die Startregel ist kürzer:

 

{{out << }} Expression

{{out << endl;}}

 

Die Ausgabeanweisung der ersten Zeile hat hier die Besonderheit, dass sie gemäß der reinen Syntax von C++ unvollständig wäre. Im TextTransformer ist diese Schreibweise erlaubt, wenn unmittelbar hinter dem Shift-Operator "<<" die schließende Klammer der semantischen Aktion und der Aufruf einer Produktion folgen. Die Produktion muss einen Wert zurückgeben (s.u.), der in die Ausgabe geschrieben werden kann.

 

Die abschließende Aktion ist:

 

out << endl;

 

endl eine andere Schreibweise für "\n", d.h. für einen Zeilenumbruch.

 

 

Die Expression-Produktion hat nun keinen Parameter mehr, dafür aber den Rückgabetyp: double

 

Examples_Calc_Return

 

Eine Produktion (oder Token) mit Rückgabetyp, muss auch einen Wert dieses Typs zurückgeben. Dies geschieht in der letzten Zeile:

 

{{return e;}}

 

Die double-Variable e ist am Beginn der Produktion auf die nun schon bekannte Weise deklariert worden. Den Wert erhält die Variable ihrerseits als Rückgabe der Term-Produktion. Dies geschieht in den drei Zeilen, die ebenso wie die obige Ausgabeanweisung, verkürzte C++-Anweisungen sind:

 

{{e = }} Term

{{e += }} Term    

{{e -= }} Term

 

Die Term- und die Factor-Produktion sind entsprechend der Expression-Produktion so umgeschrieben worden, dass sie statt mit einem Referenz-Parameter mit einem Rückgabewert arbeiten.

 

In der Number-Produktion kann die Deklaration einer temporären Variablen eingespart werden, indem der Rückgabewert der stod-Funktion direkt weitergereicht wird:

 

number

{{ return stod(xState.str()); }}

 

 



Diese Seite gehört zur TextTransformer Dokumentation

Home  Inhalt  English