Syntax und Semantik: Unterschied zwischen den Versionen
(um neues Beispiel ergänzt) |
|||
(Eine dazwischenliegende Version von einem anderen Benutzer wird nicht angezeigt) | |||
Zeile 32: | Zeile 32: | ||
Ob eine Funktion, die ausschließlich den Text "bar: 10" ausgibt (Semantik), nützlich ist, ist jedoch eine andere Frage. | Ob eine Funktion, die ausschließlich den Text "bar: 10" ausgibt (Semantik), nützlich ist, ist jedoch eine andere Frage. | ||
− | Typische '''Syntaxfehler''' sind im folgenden Beispielcodefragment aufgelistet | + | Typische '''Syntaxfehler''' sind im folgenden Beispielcodefragment aufgelistet: |
<source lang="java"> | <source lang="java"> | ||
Zeile 49: | Zeile 49: | ||
− | // Rechtschreibfehler, unterschiedliche | + | // Rechtschreibfehler, unterschiedliche Variablennamen |
int ergebnis; | int ergebnis; | ||
System.out.println(ergebis); | System.out.println(ergebis); | ||
System.out.pintln ("fertig"); | System.out.pintln ("fertig"); | ||
+ | </source> | ||
+ | |||
+ | |||
+ | Das folgende Beispiel illustriert einen typischen '''Semantikfehler''': | ||
+ | <source lang="java"> | ||
+ | |||
+ | public static void main(String[] args){ | ||
+ | //Gewünschtes Ergebnis: 1.25 | ||
+ | //Erhaltenes Ergebnis:1 | ||
+ | |||
+ | System.out.println(5 / 4); | ||
+ | |||
+ | //Fehler: Hier findet ganzzahlige Division statt. | ||
+ | |||
+ | |||
+ | // Richtig: | ||
+ | System.out.println(5 / 4.0); | ||
+ | System.out.println(5.0 / 4); | ||
+ | System.out.println(5.0 / 4.0); | ||
+ | } | ||
</source> | </source> |
Aktuelle Version vom 8. November 2017, 11:14 Uhr
Die Begriffe Syntax und Semantik bezeichnen in unserer Veranstaltung den Zusammenhang zwischen dem notierten Quellcode und dem daraus resultierenden Verhalten des Programms.
Syntax
Syntax bezeichnet die Struktur oder Grammatik des Programms. Die erste Herausforderung beim Lernen einer neuen Programmiersprache ist es, syntaktisch korrekte Programme zu formulieren. Zu einer Programmiersprache gehören viele Funktionalitäten. Für die Veranstaltung und das grundlegende Verständnis der Syntax ist jedoch nur die Basis relevant.
Eine Darstellungsmöglichkeit von Syntax sind die hier im Wiki häufig verwendeten Syntaxdiagramme.
Semantik
Semantik meint die Bedeutung oder Ausführung eines Programms. Es ist einfacher, ein syntaktisch korrektes Programm zu schreiben, als eines, das exakt das macht, was man möchte. Dazu muss man verstanden haben, welche syntaktischen Elemente eines Programms welchen Effekt auf den Programmzustand haben. Dann kann man aus den verschiedenen syntaktischen Elementen die gewünschte Semantik zusammensetzen.
Es gibt drei Techniken, um die Semantik eines Programms zu beschreiben:
Bei der operationalen Semantik wird ein Programm in Elementaroperationen und Programmzustände unterteilt. Dann wird schrittweise beschrieben, welche Auswirkungen die Elementaroperationen auf den Zustand haben und in welcher Situation welche Elementaroperation ausgeführt wird. Es geht also um die Beziehung zwischen Operation und Zustand. Diese Technik wird zum Beispiel für das Herstellen von Compilern verwendet.
Bei der denotationalen Semantik werden mathematische Funktionen verwendet. Der Fokus liegt darauf, wie eine Eingabe einen Zustand verändert. Diese Semantik eignet sich besonders gut dazu, um herauszufinden, ob ein Programm wirklich genau das tut, was es machen soll.
Bei der verbalen Semantik wird ein Programm, wie der Name schon sagt, mit Worten beschrieben. Dabei sollten die einzelnen Konzepte und Funktionalitäten einer Programmiersprache möglichst präzise erklärt werden. Diese Art der Beschreibung eignet sich vor allem dafür, den Umgang mit einer Programmiersprache zu lernen.
Beispiele
Eine syntaktisch korrekt formulierte Funktion wäre:
public static void foo(){ int bar = 10; System.out.println("bar: "+bar); }
Ob eine Funktion, die ausschließlich den Text "bar: 10" ausgibt (Semantik), nützlich ist, ist jedoch eine andere Frage.
Typische Syntaxfehler sind im folgenden Beispielcodefragment aufgelistet:
//fehlendes Semikolon int a = 4 //Falscher Operator, vgl. Syntaxdiagramm if_statement if (a = 5) { ... } // Schlüsselworte als Variablennamen\ Funktionsnamen verwenden int return; // Rechtschreibfehler, unterschiedliche Variablennamen int ergebnis; System.out.println(ergebis); System.out.pintln ("fertig");
Das folgende Beispiel illustriert einen typischen Semantikfehler:
public static void main(String[] args){ //Gewünschtes Ergebnis: 1.25 //Erhaltenes Ergebnis:1 System.out.println(5 / 4); //Fehler: Hier findet ganzzahlige Division statt. // Richtig: System.out.println(5 / 4.0); System.out.println(5.0 / 4); System.out.println(5.0 / 4.0); }