Syntax und Semantik: Unterschied zwischen den Versionen

Aus EINI
Wechseln zu: Navigation, Suche
(um neues Beispiel ergänzt)
(Beispiele: ergänzt)
Zeile 54: Zeile 54:
 
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>

Version vom 30. Oktober 2017, 15:47 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 Varaiblennamen
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);
	}