Semantik – Die Bedeutung, was der Programmcode bewirkt
Semantik in einer Programmiersprache beschreibt die Bedeutung und das Verhalten von Anweisungen und Strukturen, unabhängig von seiner Syntax. Sie legt fest, was ein Programm tut, wenn es ausgeführt wird.
Unterschied zwischen Syntax und Semantik:
- Syntax → Die Regeln, wie Code geschrieben werden muss (z. B. richtige Schlüsselwörter, Klammern, Semikolons).
- ❌ Fehler:
if (x = 5):
(Syntaxfehler, weil=
kein Vergleichsoperator ist) - Syntax sorgt für formale Korrektheit.
- ❌ Fehler:
- Semantik → Die Bedeutung dessen, was der Code bewirkt.
- ❌ Fehler:
x = "Hallo" + 5
(semantischer Fehler, weil man eine Zeichenkette nicht mit einer Zahl addieren kann) - Semantik stellt sicher, dass das, was gesagt wird, auch Sinn ergibt.
- ❌ Fehler:
Ein gutes Beispiel für den Unterschied zwischen Syntax und Semantik ist der folgende Satz:
👉 „Grüne Ideen schlafen wütend.“
Syntax (Grammatikalische Korrektheit)
- Der Satz ist syntaktisch korrekt, weil die Wortreihenfolge und die grammatikalischen Regeln des Deutschen eingehalten werden:
- „Grüne“ ist ein Adjektiv und beschreibt „Ideen“ (ein Nomen).
- „schlafen“ ist ein Verb und passt grammatikalisch zu „Ideen“.
- „wütend“ ist ein Adverb und beschreibt das Verb „schlafen“.
Semantik (Bedeutung und Sinn)
- Semantisch ist der Satz unsinnig, weil:
- „Ideen“ sind abstrakte Konzepte und können nicht „schlafen“.
- „Grüne Ideen“ ist eine unübliche Kombination – Ideen haben keine Farbe.
- „Schlafen“ und „wütend“ widersprechen sich, weil Schlafen normalerweise einen Zustand der Ruhe beschreibt.
Arten von Semantik in der Programmierung:
Operationale Semantik
Diese beschreibt, wie ein Programm schrittweise ausgeführt wird. Ein kurzes Beispiel:
# Python-Code
x = 5
x = x + 1
Denotationale Semantik
Beschreibt die Bedeutung eines Programms in einer mathematischen Form.
Beispiel: Eine while
-Schleife kann mathematisch als wiederholte Anwendung einer Funktion betrachtet werden.
Axiomatische Semantik
Wird in der formalen Verifikation genutzt, um zu beweisen, dass ein Programm korrekt arbeitet.
Beispiel: Logische Aussagen wie { x > 0 } x = x + 1 { x > 1 }
beschreiben, dass x
nach der Anweisung immer größer als 1
sein wird.
Beispiel für einen semantischen Fehler:
# Python-Code
a = 10
b = 0
print(a / b) # Laufzeitfehler: Division durch Null!
Syntax ist korrekt, aber die Semantik ist falsch, weil eine Division durch 0
nicht definiert ist.
✅ Fazit: Die Semantik bestimmt, was der Code tut und ob er das tut, was der Entwickler erwartet.
Semantische Fehler sind oft schwieriger zu finden als Syntaxfehler, da sie zu unerwartetem Verhalten führen, aber der Code trotzdem gültig ist.