Syntax und Semantik: Unterschied zwischen den Versionen

Aus EINI
Wechseln zu: Navigation, Suche
 
(10 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
Die Begriffe '''Syntax''' und '''Semantik''' bezeichnen in unserer Veranstaltung des Zusammenhang zwischen dem notierten Quellcode und dem daraus resultierenden Verhalten des Programms.
+
Die Begriffe '''Syntax''' und '''Semantik''' bezeichnen in unserer Veranstaltung den Zusammenhang zwischen dem notierten [[Quellcode]] und dem daraus resultierenden Verhalten des [[Programm]]s.
  
'''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.
+
=Syntax=
  
'''Semantik'' bezeichnet die Bedeutung oder Ausführung eines Programms. Es ist einfacher ein syntaktisch korrektes Programm zu schreiben, als eines, das genau das macht, was man will. 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.
+
'''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.
  
= Beispiel =
+
Eine Darstellungsmöglichkeit von Syntax sind die hier im Wiki häufig verwendeten '''[[Syntaxdiagramm]]e'''.
  
Eine syntaktisch korrekt formulierte Funktion wäre:
+
=Semantik=
 +
 
 +
'''Semantik''' meint die '''Bedeutung''' oder Ausführung eines [[Programm]]s. 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 [[Compiler]]n 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:
  
 
<source lang="java">
 
<source lang="java">
Zeile 17: Zeile 31:
  
 
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:
 +
 +
<source lang="java">
 +
 +
//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");
 +
 +
</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>

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);
	}