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
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 |