Syntaktische Rekursion in Programmiersprachen (Syntaktische Rekursion in Programmiersprachen), Lektion, Seite 722515
https://www.purl.org/stefan_ram/pub/syntaktische_rekursion_java (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
C#-Kurs
C++-Kurs
JavaScript-Kurs
Java-Kurs
C-Kurs

Diese Lektion enthält derzeit noch einige Beispiele, die nur für die Programmiersprache Java  zutreffen; sie soll im Laufe der Zeit für andere Programmiersprachen angepaßt werden. (Stand 2019)

Syntaktische Rekursion in Java 

Bisherige Syntax (Syntaxdiagramm)

Vorzeichenausdruck
.----------.
--->.------------>| Literal |----.---->
| '----------' ^
| .-. .----------. |
'--->( - )--->| Literal |----'
| '-' '----------' |
| .-. .----------. |
'--->( + )--->| Literal |----'
'-' '----------'

Ausdruck
.---------------------.
--->| Vorzeichenausdruck |--->
'---------------------'

Ein Operand eines Operators muß nicht unbedingt immer ein Literal  sein, sondern kann auch seinerseits wiederum ein Operatorausdruck  sein. Das folgende Syntaxdiagramm für einen Ausdruck bringt dies dadurch zum Ausdruck, daß es einen Verweis auf sich selbst  enthält. Ein solcher Selbstbezug wird auch als Rekursion  bezeichnet.

Neue, erweiterte Syntax (Syntaxdiagramm)

Vorzeichenausdruck
.--------------------.
--->.------------>| Literal |----.---->
| '--------------------' ^
| .-. .--------------------. |
'--->( - )--->| Vorzeichenausdruck |----'
| '-' '--------------------' |
| .-. .--------------------. |
'--->( + )--->| Vorzeichenausdruck |----'
'-' '--------------------'

Ausdruck
.---------------------.
--->| Vorzeichenausdruck |--->
'---------------------'

Zum Vergleich: die Definitionen aus der JLS 13 (leicht gekürzt)
UnaryExpression:
UnaryExpressionNotPlusMinus
- UnaryExpression
+ UnaryExpression

Dies bedeutet, daß es erlaubt ist, ein Literal in einem Vorzeichenausdruck durch einen weiteren  Vorzeichenausdruck zu ersetzen – dadurch entsteht dann im allgemeinen wieder ein erlaubter Ausdruck, der aber einen anderen Wert haben kann.

Das voranstehende Diagramm „Neue, erweiterte Syntax“ umfaßt das vorhergehende „Bisherige Syntax“, weil dort die speziellere syntaktische Kategorie ›Literal‹ durch die allgemeinere ›Vorzeichenausdruck‹ ersetzt wurde.

Die frühere Regel

Ein Vorzeichen akzeptiert ein Literal  als Operanden, und bildet mit ihm zusammen einen neuen Vorzeichenausdruck.

lautet ab jetzt allgemeiner:

Ein Vorzeichen akzeptiert einen Vorzeichenausdruck  als Operanden, und bildet mit ihm zusammen einen neuen Vorzeichenausdruck.

Herleitungen

»5«

»5« ist ein Vorzeichenausdruck, weil es ein Literal ist.

»-5«

»-5« ist ein Vorzeichenausdruck, weil es dem Aufbauschema „-Vorzeichenausdruck “ mit dem Vorzeichenausdruck »5« entspricht (wir hatten schon im vorigen Abschnitt begründet, warum »5« ein Vorzeichenausdruck ist).

»- -5«

»- -5« ist ein Vorzeichenausdruck, weil es dem Aufbauschema „-Vorzeichenausdruck “ mit dem Vorzeichenausdruck »-5« entspricht (wir hatten schon im vorigen Abschnitt begründet, warum »-5« ein Vorzeichenausdruck ist).

Im Falle von »- -5« muß ein Leerraum zwischen die beiden Vorzeichenoperatoren gesetzt werden, damit nicht der Doppelminusoperator »--« entsteht. – Diese Information kann nicht  dem Syntaxdiagramm entnommen werden, sondern muß noch zusätzlich erlernt werden.

Nach diesem Herleitungsprinzip kann also man begründen, warum ein Folge von endlich vielen Vorzeichen, denen ein Literal folgt, ein Vorzeichenausdruck ist.

Programme müssen stets endlich  lang sein. Stünden vor einer »5« unendlich viele  negative Vorzeichen, wäre es nicht klar, welchen Wert dieser Ausdruck haben soll.

Zum Begriff „Vorzeichenausdruck“

Es ist merkwürdig, daß auch das Literal »4« als „Vorzeichenausdruck“ gilt, obwohl es gar kein Vorzeichen enthält.

Man kann sich dies nun auch so vorstellen: Ein Vorzeichenausdruck  ist ein Ausdruck mit beliebig vielen Vorzeichen. Dazu zählen auch null  Vorzeichen. Entsprechen sind »- - -4«, »- -4«, »-4« und »4« alles Vorzeichenausdrücke, da sie in diesem Sinne alle Vorzeichen enthalten (der letzte enthält „null Vorzeichen“ – was hier auch als eine Art des Enthaltens gilt!).

Die Einbeziehung der Null ist typisch für das Programmieren: So hatten wir schon bemerkt, daß auch eine Folge von null  Zeichen als Zeichenfolge gilt (die leere Zeichenfolge »«, welche durch »""« ausgedrückt wird). Es ist ebenfalls gewöhnungsbedürftig, daß etwas als eine Folge von Zeichen  gelten soll, das kein einziges Zeichen enthält !

Zur Unterscheidung von den Literalen nennen wir einen wirklich mit einem Vorzeichen beginnenden Ausdruck auch einen echten Vorzeichenausdruck.

Übungsfragen

?   Übungsfrage

Neue, erweiterte Syntax (Syntaxdiagramm)

Vorzeichenausdruck
.--------------------.
--->.------------>| Literal |----.---->
| '--------------------' ^
| .-. .--------------------. |
'--->( - )--->| Vorzeichenausdruck |----'
| '-' '--------------------' |
| .-. .--------------------. |
'--->( + )--->| Vorzeichenausdruck |----'
'-' '--------------------'

Ausdruck
.---------------------.
--->| Vorzeichenausdruck |--->
'---------------------'

Welcher der folgenden Texte ist ein Vorzeichenausdruck  gemäß dem voranstehenden Syntaxdiagramm?

»- 2«      Anton
»2-2«      Berta
»-   - 2«  Cäsar
»-2«       Dora
»2«        Emil
»2 - 2«    Friedrich

?   Übungsfrage _

Eine lexikalische Einheit ist ein Literal  oder ein Operator.

Wie viele lexikalische Einheiten hat der folgende Ausdruck?

Ausdruck
- -2

?   Übungsfrage _

Wie viele lexikalische Einheiten hat der folgende Ausdruck?

Ausdruck
--2

Anwendungen ⃗

Wenn ein bestimmter Operator eines Ausdrucks nicht  in einem Operanden steht, so nennen wir jenen Ausdruck auch eine Anwendung  dieses Operators. Beispielsweise ist der Ausdruck »- -65« eine Anwendung  des ersten  Vorzeichenoperators (der zweite Vorzeichenoperator steht ja in einem Operanden des ersten). Betrachtet man den Operanden »-65« jedoch isoliert, so ist er eine Anwendung des in ihm ganz am Anfang vorkommenden Vorzeichenoperators »-«.

Äquivalenztransformationen ⃗

Die Bedeutung eines Operanden liegt nur in seinem Wert, nicht in seiner speziellen Schreibweise.

Daher bedeuten »- -2« und »2« als Operanden genau dasselbe, denn beide haben den gleichen Wert «2». Der Austausch von »- -2« durch »2« ist also eine Äquivalenztransformationen  (eine Änderung an einem Programm, welche die Bedeutung des Programms nicht verändert).

Dies gilt allgemein immer, wenn Ausdrücke verwendet werden: Die Bedeutung eines Ausdrucks liegt in seinem Wert, so daß ein Austausch gegen einen anders geschriebenen aber wertgleichen Ausdruck die Bedeutung eines Programms nicht  verändert.

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram722515 stefan_ram:722515 Syntaktische Rekursion in Programmiersprachen Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd722515, slrprddef722515, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/syntaktische_rekursion_java