Syntaktik und Semantik

Benutzeravatar
SophiaLi1
Kernelcompilierer
Kernelcompilierer
Beiträge: 542
Registriert: 5. Jan 2014 11:48

Syntaktik und Semantik

Beitrag von SophiaLi1 » 10. Feb 2014 19:54

Hallo, könnte jemand mir bitte ein Bespiel für einen syntaktischen Fehler und ein Bespiel für einen semantischen Fehler geben? Wäre dafür sehr dankbar (:

Benutzeravatar
mmi1991
Computerversteher
Computerversteher
Beiträge: 349
Registriert: 20. Okt 2011 18:46
Wohnort: Hattersheim

Re: Syntaktik und Semantik

Beitrag von mmi1991 » 10. Feb 2014 20:07

Syntaxfehler: Semikolon vergessen.

Semantikfehler:

Code: Alles auswählen

String a = "Test";
int b = a;
Ophasentutor SoSe 2014, WiSe 2015/16
Alle Angaben wie immer ohne Gewähr

Benutzeravatar
SophiaLi1
Kernelcompilierer
Kernelcompilierer
Beiträge: 542
Registriert: 5. Jan 2014 11:48

Re: Syntaktik und Semantik

Beitrag von SophiaLi1 » 10. Feb 2014 20:09

Danke!

Also sind Syntaxfehler auch z.B. eine Klammer vergessen?

Benutzeravatar
mmi1991
Computerversteher
Computerversteher
Beiträge: 349
Registriert: 20. Okt 2011 18:46
Wohnort: Hattersheim

Re: Syntaktik und Semantik

Beitrag von mmi1991 » 10. Feb 2014 20:13

SophiaLi1 hat geschrieben:Danke!

Also sind Syntaxfehler auch z.B. eine Klammer vergessen?
Ja, zu viele/wenige/an der falschen Stelle geschweifte/normale Klammern gehören da auch dazu.

Es gibt eine so genannte Grammatik, die genau spezifiziert, wie ein syntaktisch gültiges Javaprogramm auszusehen hat. http://docs.oracle.com/javase/specs/jls ... ls-18.html

Der Compiler versucht, den Quelltext in eine Baumstruktur zu bringen, die sich an dieser Grammatik orientiert. Sollten dabei Probleme auftreten, ist entweder der Compiler der Eimer oder der Quelltext syntaktisch nicht korrekt.

Sollte alles geklappt haben, geht die semantische Analyse hinterher und prüft, ob das auch semantisch Sinn macht. Dazu gehört, ob die Variablentypen zueinander passen, etc. Man sagt: Er dekoriert den Baum. Dazu auch mein "Witz": viewtopic.php?f=34&t=27499&p=151522#p151522
Zuletzt geändert von mmi1991 am 10. Feb 2014 20:15, insgesamt 1-mal geändert.
Ophasentutor SoSe 2014, WiSe 2015/16
Alle Angaben wie immer ohne Gewähr

Benutzeravatar
SophiaLi1
Kernelcompilierer
Kernelcompilierer
Beiträge: 542
Registriert: 5. Jan 2014 11:48

Re: Syntaktik und Semantik

Beitrag von SophiaLi1 » 10. Feb 2014 20:14

Vielen Dank für deine Antwort!

Prof. Karsten Weihe
Dozentin/Dozent
Beiträge: 1824
Registriert: 21. Feb 2005 16:33

Re: Syntaktik und Semantik

Beitrag von Prof. Karsten Weihe » 13. Feb 2014 07:41

SophiaLi1 hat geschrieben:Hallo, könnte jemand mir bitte ein Bespiel für einen syntaktischen Fehler und ein Bespiel für einen semantischen Fehler geben? Wäre dafür sehr dankbar (:
Siehe das Video zu Abstraktionsebenen.

KW

Gast
Gast

Re: Syntaktik und Semantik

Beitrag von Gast » 14. Feb 2014 14:31

Hallo,

auch ich habe dazu eine Frage, nämlich wie es sich mit dem oben genannten Beispiel verhält.

Bei

String a = "Hallo";

int b=a;

handelt es sich doch um einen Syntaxfehler, da man einem int-Objekt syntaktisch gesehen kein String-Literal zuweisen kann, oder?!

Benutzeravatar
mmi1991
Computerversteher
Computerversteher
Beiträge: 349
Registriert: 20. Okt 2011 18:46
Wohnort: Hattersheim

Re: Syntaktik und Semantik

Beitrag von mmi1991 » 14. Feb 2014 15:02

Gast hat geschrieben:
Bei

Code: Alles auswählen

String a = "Hallo"; 
int b=a;
handelt es sich doch um einen Syntaxfehler, da man einem int-Objekt syntaktisch gesehen kein String-Literal zuweisen kann, oder?!
Syntaktisch ist das völlig in Ordnung; semantisch ist es Unsinn.
Ich zitiere hier jetzt mal aus https://de.wikipedia.org/wiki/Syntaxfehler (ist ja kein Paper hier :D)
Da sich nicht alle Eigenschaften einer Programmiersprache durch kontextfreie Grammatiken beschreiben lassen, werden manche Fehler, z. B. Verstöße gegen die Typregeln der Programmiersprache, auch erst in der semantischen Analyse vom Compiler erkannt.
Entspricht letztlich dem, was ich oben geschrieben habe.

Nicht jeder syntaktisch gültiges Java-Code ist auch tatsächlich gültiger Java-Code, den der Compiler so akzeptiert.

Edit: Von Prof. Weihes Definition von Syntax/Semantik wusste ich nichts (habe mit AI1 eigentlich nichts am Hut). Für die Klausur gelten natürlich seine Aussagen.
Zuletzt geändert von mmi1991 am 14. Feb 2014 15:05, insgesamt 2-mal geändert.
Ophasentutor SoSe 2014, WiSe 2015/16
Alle Angaben wie immer ohne Gewähr

Prof. Karsten Weihe
Dozentin/Dozent
Beiträge: 1824
Registriert: 21. Feb 2005 16:33

Re: Syntaktik und Semantik

Beitrag von Prof. Karsten Weihe » 14. Feb 2014 15:02

Gast hat geschrieben: Bei
String a = "Hallo";
int b=a;
handelt es sich doch um einen Syntaxfehler, da man einem int-Objekt syntaktisch gesehen kein String-Literal zuweisen kann, oder?!
Ich habe im Video zu Abstraktionsebenen eine pragmatische Unterscheidung zwischen Syntax und Semantik getroffen und auch explizit formuliert (siehe Drehbuch): "Syntaxfehler findet und moniert der Compiler. Semantikfehler findet der Compiler nicht, sondern sie wirken sich zur Laufzeit durch Programmabbruch aus."

Nach dieser Definition lautet die Antwort auf Ihre Frage also: ja.

Sie werden in Lehrbüchern aber möglicherweise finden, dass Ihr Beispiel als semantischer Fehler eingeordnet wird. Das wäre konform zur Unterscheidung in den Sprachwissenschaften, zum Beispiel: "Die Uhrzeit ist grün" ist syntaktisch korrekt, semantisch aber nicht.

Aber für die Klausur ist natürlich unsere Definition allein maßgeblich. Da diese Definition aber besser (neudeutsch:) operationalisierbar als alternative Definitionen sein dürfte, denke ich, das ist auch in Ihrem Sinne. :)

Übrigens: Ich bin mir sicher, dass alle Fehler, die Sie in der Klausur zu finden haben, unter allen gängigen Unterscheidungen zwischen Syntax ud Semantik identisch einzuordnen wären. 8)

KW

Gast
Gast

Re: Syntaktik und Semantik

Beitrag von Gast » 14. Feb 2014 15:10

Übrigens: Ich bin mir sicher, dass alle Fehler, die Sie in der Klausur zu finden haben, unter allen gängigen Unterscheidungen zwischen Syntax ud Semantik identisch einzuordnen wären. 8)
Tut mir leid aber ich glaube ich verstehe den Satz nicht. :oops:

Wollen Sie damit sagen, dass je nachdem welcher Definition ich folge, jeden Fehler als Syntax- und Semantikfehler klassifizieren kann?

Prof. Karsten Weihe
Dozentin/Dozent
Beiträge: 1824
Registriert: 21. Feb 2005 16:33

Re: Syntaktik und Semantik

Beitrag von Prof. Karsten Weihe » 14. Feb 2014 15:17

Gast hat geschrieben:
Übrigens: Ich bin mir sicher, dass alle Fehler, die Sie in der Klausur zu finden haben, unter allen gängigen Unterscheidungen zwischen Syntax ud Semantik identisch einzuordnen wären. 8)
Wollen Sie damit sagen, dass je nachdem welcher Definition ich folge, jeden Fehler als Syntax- und Semantikfehler klassifizieren kann?
Ich will damit sagen, dass Sie in der Klausur auf jeden Fall zum richtigen Ergebnis kommen werden, egal welche der gängigen Unterscheidungen Sie anwenden. Andersherum gesagt: Beispiele, bei denen sich verschiedene gängige Definitionen unterscheiden, kommen in der Klausur nicht vor.

Klarer geworden?

KW

Gast
Gast

Re: Syntaktik und Semantik

Beitrag von Gast » 14. Feb 2014 15:30

Das ist ein Semantischer fehler. Jede Programiersprache hat eine Grammatik. Wenn ein Ausdruck die Regeln dieser grammatik verletzt ist es ein Syntaktischer fehler.
Ein Semantischer fehler ist, wenn der Ausdruck Syntaktisch korrekt (also die Regeln der Grammatik einhällt), aber gegebene Semantische Regeln missachtet.


So ich versuch des mal durch nen allgemeinsprachliches beispiel zu verdäutlichen.

"Ich gehe mir blaue Schuhe kaufen, denn gelbe habe ich noch nicht."

Dieser Satz ist Grammatisch vollkommen in Ordnung, also auch Syntaktisch korrekt.

Das dieser Satz absolut keinen Sinn ergibt sollte denke ich jeder erkennen. Und genau das ist ein Semantischer Fehler.
Wenn man etwas hinschreibt, was gramatisch in Ordnung, aber keinen Sinn ergibt oder sogar wie in dem Beispiel wiedersprüchlich ist.

Genau das gleiche gilt auch bei einer Programmiersprache. Auch die hat eine Grammatik.
Einmal ein Link zur Grammatik von Java: http://docs.oracle.com/javase/specs/jls ... ls-18.html

Und wie in jeder Sprache kann man ausdrücke erzeugen die korrekt, aber wiedersprüchlich sind.

Ps. Ob ein Semantischer Fehler auch als Semantishcer Fehler annerkannt wird hängt auch sehr stark von der Programiersprache ab!

Mal ein beispiel:

int c = 3;

if(c) {
...
}

in java und c, syntaktisch korrekt. in c erlaubt er das und führt das auch aus. Java würde dich dafür köpfen....

Prof. Karsten Weihe
Dozentin/Dozent
Beiträge: 1824
Registriert: 21. Feb 2005 16:33

Re: Syntaktik und Semantik

Beitrag von Prof. Karsten Weihe » 14. Feb 2014 18:58

Gast hat geschrieben:Das ist ein Semantischer fehler. Jede Programiersprache hat eine Grammatik.
Man kann für ein und dieselbe Programmiersprache verschieden umfassende Grammatiken definieren (die dann nicht unbedingt mehr kontextfrei sind). Daher ist der Unterschied zwischen Syntax und Semantik abhängig davon, welche Grammatik man zugrundelegt.

KW

Gast
Gast

Re: Syntaktik und Semantik

Beitrag von Gast » 9. Mär 2014 11:28

Zählen Fehler in der Einrückung a la

Code: Alles auswählen

boolean a = true;
while(a){
a = false;
}
auch zu den syntaktischen Fehlern?

Studentin
Gast

Re: Syntaktik und Semantik

Beitrag von Studentin » 9. Mär 2014 11:45

Eine Einrückung ist ja eigentlich nur eine Vielzahl von Leerzeichen und somit für die fehlerfreie ausführung des Programmcodes unerheblich, d.h. kein Syntaxfehler. Durch fehlende Einrückungen leidet die Übersichtlichkeit, mehr nicht.

Antworten

Zurück zu „Archiv“