Skip to main content

Lexikalik, Syntax und Semantik in Programmiersprachen

Java ist eine Programmiersprache.
Und wie jede andere Programmiersprache ist auch Java, lediglich eine künstliche Sprache.
 
Normalerweise bieten künstliche Projekte immer jede Menge Spielraum für Eigenkreationen.
Bei der Programmierung ist dies nicht ganz so.
Denn Programmiersprachen sind auch immer sehr exakt.
 
Jede Programmiersprache und auch jede gesprochene Sprache folgt immer einer Abstraktionsreihenfolge, welche unbedingt eingehalten werden muss.
Ansonsten ist die Sprache nicht verständlich.

Die oberste Hierachieebene bei Programmiersprachen, wie Java ist die Lexikalik

Schau dir einmal diesen Satz an.

Ich heiße !TEVF7.

Nicht verständlich, oder?
Doch warum nicht.
Ganz klar, das letzte Wort bzw. die letzte Zeichenkette im Satz ist völlig unbekannt.
 
Eine Sprache muss immer lexikalisch korrekt sein.
Das bedeutet, dass alle Wörter in einem Satz oder Abschnitt – in einer Sprache bekannt sein müssen.
Und das letzte Wort gibt es in der deutschen Sprache nicht.
Somit ist dieser Satz lexikalisch falsch.
 
Hier ein Java Beispiel dazu:

Programmiersprache Lexikalik Java

Auto ist ein Wort, welches du sicher kennst.
Nur Java bzw. der Java Compiler kennt dieses Wort nicht.
Somit ist dieser Baustein und damit auch das Java Programm – lexikalisch falsch.
 
Erst wenn im Zuge einer Variablendeklaration ein fiktiver Name auftaucht, kann Java etwas damit anfangen.
Programmiersprache-Java-Lexikalik
 
Was ist mit Kommentaren?
Falls irgendwelche Wörter in ein Kommentarblock eingeschoben sind, erkennt der Java Compiler dies durch die entsprechende Kennzeichnung (//).
Und dadurch ist es für den Compiler wiederum lexikalisch einwandfrei.
Java Programmiersprachen Lexikalik

 

Die zweite Hierarchieebene in einer Programmiersprache ist die Syntax.

Unter Syntax versteht man die Anordnung der einzelnen Befehle bzw. der Bausteine in einem Java Programm.
 
Du kennst das aus der deutschen Sprache.
Da nennt sich so etwas Satzbau bzw. Grammatik.
Hier das Beispiel:

Mathias ich heiße.

Dieser Satz ist lexikalisch völlig richtig.
Denn jedes dieser Wörter existiert in der deutschen Sprache.
Die Zusammensetzung bzw. die Syntax ist aber völlig falsch.
 
Und auch in Java spielt die Syntax eine sehr wichtige Rolle.
 
Hier das Java Beispiel.
Es soll eine Variable vom Datentyp String deklariert werden.
Und deshalb muss zuerst der Datentyp und dann der Name ins Programm geschrieben werden.
Also String und dann der Name, zum Beispiel auto.

Hier auf dem Bild, ist es verkehrt herum.

Programmiersprachen Syntax Java

Bei jeder Variablendeklaration spielt die Anordnung vom Namen und Datentyp eine wichtige Rolle.
Denn jetzt ist es so, dass nicht eine Variable vom Datentyp String angelegt worde.
Stattdessen wurde eine Variable namens „String“ vom Datentyp „Auto“ angelegt.
Dieser Ausdruck ist nicht nur syntaktisch falsch.
Denn da der Datentyp „Auto“ diesem Java Programm völlig unbekannt ist – ist dieser Ausdruck auch lexikalisch falsch.
 

Die dritte wichtige Hierarchieebene in Java ist die Semantik

Semantik kannst du übersetzen mit inhaltliche Bedeutung oder Deutung.
 
Auch hier ein Beispiel:

Ich heiße Einkaufen.

Blöd , oder ? 🙂
Aber lexikalisch völlig in Ordnung.
Und auch vom Satzbau her gibt, es nichts zu meckern.
 
Der Sinn des Satzes ist aber völlig daneben.
 
Die Semantik beschäftigt sich damit, ob ein Satz oder eine Programmstruktur überhaupt Sinn ergibt.
 
Im folgenden Java Beispiel soll eine For-Schleife die natürlichen Zahlen von 1 bis 10 ausgeben.

public class Semantik {

	public static void main(String[] args) {

		// For-Schleife soll von 1 bis 10 zählen
		for (int i = -5; i < 0; i++) {
			System.out.println(i);
		}
	}
}

Zum echten Ausprobieren, habe ich die main-Methode implementiert.
Die for-Schleife ist lexikalisch und auch syntaktisch völlig in Ordnung.
Nur der Schleifenzähler startet bei – 5 und endet bei Null.
Somit wird die Schleife abrechen, bevor sie bei eins ist.
Und das bedeutet wiederum, dass die Zahlen 1 bis 10 niemals gezählt werden.
 
Der Ausdruck ist somit lexikalisch und syntaktisch richtig.
Und dennoch semantisch falsch.
 
 
Zusammenfassung:

  • Jede Programmiersprache ist äußerst exakt.
    Deshalb musst du beim Programmieren darauf achten, dass deine Programmbausteine lexikalisch, syntaktisch und auch semantisch – einwandfrei sind.
  • Die Lexikalik prüft als Erstes, ob die Wörter in dieser Programmiersprache überhaupt bekannt sind.
  • Die Syntax überprüft dann den ordnungsgemäßen Aufbau einer Anweisung.
  • Und schließlich muss die Anweisung auch einen Sinn für das Programm ergeben.
    Und diese inhaltliche Bedeutung wird durch die Semantik überprüft.

Ähnliche Beiträge

So legst du Utility Klassen in Java an

Java Utility Klassen

Utility Java Klassen – was ist das? Man nennt diese auch Hilfsklassen von Java. Diese Utility Klassen sind Java Klassen, welche lediglich Methoden und Konstanten anbieten. Am Beispiel: Die Klasse Math ist so eine klassische Utility Klasse. Wozu braucht man solche Klassen? Diese Klassen sind so etwas wie ein Werkzeugkoffer für jedes Java Programm. Hier […]

Heap & Stack – Die Speicherverwaltung in Java

Java Speicher

Java nutzt eine interne Speicherverwaltung. Eigentlich sind es mehrere. Uns interessieren lediglich zwei. Da das Thema Speicherverwaltung recht umfangreich ist, habe ich dir im Folgenden einmal die wichtigsten Artikel zusammengestellt. Die zwei Speichersysteme von Java Java Methoden werden auf dem Stack gestapelt. Der Speicher auf dem Java Methoden zu Hause sind, nennt sich Stack Speicher. […]

Java Methoden mit variabler Argumentenanzahl – VarArgs

Java Methoden mit variabler Argumentenanzahl VarArgs

Du kennst das noch. Kopfrechnen und zwar auf Zeit. So etwas ist das Standardprogramm in den Schulklassen 1 bis 5. Irgendwann, in Klasse 6 oder 7, kommt der Taschenrechner ins Spiel und Kopfrechnen ist aus dem Schulalltag gestrichen. Schade eigentlich. Dabei kann man diese Disziplin auch wunderbar in kleinen Spielen unterbringen. Ich erinnere mich noch: […]

So nutzt du Methoden aus der Java String Klasse

Java Strings Methoden

In einen der letzten Beiträge haben wir darüber gesprochen, dass Java Strings – Objekte sind. Dass Strings in allen Programmen äußerst häufig vorkommen Und dass sich deshalb Referenzvariablen String-Objekte im String Pool teilen. Das Konzept hinter dem String-Pool ist die Teilung der Ressourcen. Und das bedeutet: Weniger Objekte – mehr Speicher Mehr Speicher – bessere […]

Ohne Abstraktion ergibt Java Polymorphie wenig Sinn

Java Polymorphie Abstraktionsprinzip

Kennst du den Film Matrix? Denn kennst du vielleicht auch die Botschaft, welche der Protagonist am Anfang des Filmes erhält. „Folge dem weißen Kaninchen.“ Und so ähnlich ist es jetzt auch in diesem Beitrag. „Wir dringen immer tiefer in den Kaninchenbau ein.“ 🙂 Ganz so wie im Film wird es nicht. Aber bevor wir mit […]

So kannst du zweidimensionale Java Arrays anlegen und nutzen

Java Arrays zweidimensional

Eines der bedeutendsten Instrumente in der Mathematik ist das Koordinatensystem. Die gedankliche Grundlage dieses Werkzeuges lieferte der französische Naturwissenschaftler und Philosoph Rene Descartes. Man muss sich einmal verdeutlichen, was dies für die damalige Zeit bedeutete. Bisher wurden mathematische Probleme lediglich durch Berechnungen gelöst. Denke an geometrische Figuren, wie Dreiecke und Vierecke. Der Umfang wurde lediglich […]

Das Java Vererbung Konzept in einem Rollenspiel

Java ist eine objektorientierte Programmiersprache. Und das bedeutet nicht nur, dass du Objekte einer Java Klasse erzeugen kannst. Es bedeutet auch, dass Java Klassen von anderen Klassen erben können. Wieso das Ganze? Stell dir einmal ein Rollenspiel vor. Wie würdest du ein Rollenspiel entwerfen? In einem Rollenspiel gibt es magische Gegenstände. Zauberringe, Zauberstäbe, welche bei […]

Nutze die Fernbedienung für deine Java Objekte

Auf Java Objekte greifst du mit einer Art Fernsteuerung zu. Diese bezeichnet man als Referenz oder als Verweis. Und diese Referenzvariablen möchte ich dir jetzt einmal vorstellen. Doch bevor wir loslegen, lass mich noch ein paar Dinge loswerden. 🙂 Ich habe es ja schon einmal in einem früheren Beitrag erwähnt. Java unterscheidet zwischen primitiven und […]