Syntax und Symantic
-
Syntax und Symantic
Wo ist da genau der Unterschied.
und wofür macht meine ein Syntax Diagram.
Habe ich schon gegooglet aber werde nicht schlau raus.
Danke schon maUnd fröhliche Weinachten
:xmas1: :xmas1: :xmas2:
-
Meinst Du Semantik? Syntax ist der Quellcode, Semantik ist der Bezug, die Beziehung zu etwas, etc.
-
Syntax ist der technische Aufbau eines Programm oder -fragments, Semantik seine Bedeutung/Aufgabe.
z.B:
Die Syntax der if()-Anweisung beschreibt, daß sie aus "if", einer Bedingung B und einer Anweisung A1 sowie optional aus "else" und einer weiteren Anweisung A2 besteht. Die Semantik der if()-Anweisung ist "werte B aus und führe je nach Ergebnis entweder A1 oder A2 (bzw. nichts) aus".
-
Es gibt da immer so eine schöne Analogie zur deutschen Sprache. Der Satz "Die Sonne ist rosa." ist syntaktisch korrekt - keine Rechtschreibfehler und Grammatikfehler - semantisch aber nicht: Er ergibt keinen Sinn.
Das zeigt auch gleich eine weitere Eigenschaft der Semantik: Ohne Kontext kann man nicht feststellen ob ein Ausdruck semantisch korrekt ist oder nicht. Auf unserer Erde ist der Satz semantisch nicht korrekt, auf einem anderen Planeten kann er aber semantisch korrekt sein. Genau so ist es auch mit Anweisungen in Programmen.
-
Semantiken fragen nach der Bedeutung. Was kann das wohl heißen? Sie sind Übersetzungsanweisungen.
Bei Programmiersprachen erwartet dabei man sowas, wie "i++" -> "INC DWORD PTR i". Jede Sprache (Sprachkombination) hat natürlich ihre eigene Semantik.
Traditionell trennt man in der Homecomputerliteratur Syntax, Semantik und Pragmatik. Und dort wird immer nur die Einzahl verwandt, weil man sich nur um den vorliegenden Rechner kümmert. Und ich greife die Homecomputer auf, weil man sich zu deren Zeit als Computerfreak damit herumschlug. (Heute ist das anders, aber das ist eine andere Geschichte.) Dabei soll die Syntax feststellen, ob eine Eingabe auf relativ niedriger Ebene fehlerfrei ist. Zum Beispiel ist auf dem C-64
prant 5+"A"
syntaktisch nicht korrekt. Der Rechner führt die Anweinung nicht aus, sondern sagt nur "Syntax Error". Das war eine schöne Zeit: Die Reaktionen des Rechners waren klar definiert und überschaubar. Das ist heute gelegentlich (in C und C++ sehr oft) nicht mehr so (siehe nasal demons.
Wenn es damals anders war, dann wegen eines Programmierfehlers im Kernel und die waren sauselten. So zeigtprint 5+"A"+-5
ein durchaus überraschendes Verhalten. Welches?
Ein Basic-Programm auf dem 64-er ist syntaktisch korrekt, wenn es keine Syntax-Fehler auswirft (genauer: wenn kein Befehl des Programms bei Direkteingabe einen Syntax-Fehler auswirft). Und nicht anders will ich die Syntax auf dem C64 definieren. Grob gesagt waren Syntax-Fehler nur die Tippfehler.
Über der Syntax steht die Semantik. Sie bestimmt, was die Eingabe "bedeutet". Also was der Rechner aus der Eingabe machen soll. Bei Interpretersprachen wie dem Basic v2 kann man darunter nur verstehen, was die Seiteneffekte sein sollen, also Ausgaben, Variablenwertänderungen und so. Bei Compilersprachen ist es vielleicht keine Dumme Idee, das Compilat zu nehmen.
Und dann gibt es noch die Pragmatik, von der der C-64 keine Ahnung hat.
Ich wechsle in die Analogie der deutschen Sprache. Das tun auch alle Homecomputerbücher, die etwas von Semantik sagen.
"Ben Hund Maus." ist syntaktisch nicht korrekt. Am '.' am Ende erkenne ich, daß ein Aussagesatz kommen soll. Der muss der Aufbauregel "Subjekt - Prädikat - Objekt" folgen. Nein, muss er gar nicht. Das habe ich so in der Schule gelernt und es ist mal eine gute erste Näherung. Aber ohne Prädikat gehts nicht. Syntaktisch falsch. Die Pragmatik wird erst gar nicht befragt.
(Der Aufmerksame Leser bemerkt, daß der vorvorangegangene Satz kein Prädikat hat und dennoch ist er weder unverständlich noch stört er den Lesefluss. Tun wir einfach im Folgenden mal so, als sei die deutsche Sprache festen Regeln unterworfen, und die Notwendigkeit eines Prädikats in Aussagesätzen gehöre dazu.)
Der Satz "Ben schlägt den Hund." wäre syntaktisch korrekt. Ich erkenne am '.', daß es ein Aussagesatz ist. Das Verb (methode) "schlägt" nimmt zwei Objekte (parameter). Eines steht im Nominativ und bekommt den Ehrennamen Subjekt (self oder *this), und eines steht im Akkusativ.
Also ist "Ben.schlagen(Hund)" eigentlich gemeint. Das war nur semantisch. Naja, bei neuen Sprachen wars syntaktisch. Bei älteren semantisch, bei uralten pragmatisch. Mist.
Im deutschen ist ein lustigerweise auch erlaubt, "Den Hund schlägt Ben." zu sagen. An den Fällen, in denen die Objekte stehen (und ein wenig Beiwerk), kann der Hörer erkennen, welche Rollen die Objekte übernehmen.
Übrigens muss jeder Aussagesatz ein Subjekt haben. Ein Verb und ein Subjekt. Und das Verb (welche functions genau dann passen, besimmt ja das *this (Subjekt (Objekt im Nominativ)) mit polymorphie-zeugs) greift sich schon die anderen Objekte. (Ausnahme: Passiv-Sätze. Die haben kein Subjekt. Und das genau ist auch deren Lebensberechtigung in Zeiten und Kreisen wo selbst Artikel wegfallen.)
Was ist mit dem Satz "Ben schlägt." los?
Gibt es eine Überladung von schlagen, die nur ein Subjekt nimmt und kein Objekt? Ja! Wenn wir großzügig annehmen, daß Ben eine Glocke ist, und das mag ich nicht in Abrede stellen."Ben schlägt." wird also zu "Ben.schlagen()" und das frisst der Compiler sogar, wenn Bens Klasse eine Methode "schlagen()" hat. (Ich drücke mich weiterhin vor der Pragmatik.)
Das ist Semantik: Das Übersetzen von einer Sprache ("Volkard schläft." (Deutsch)) in eine andere ("volkard.schlafen();" (C++)). Hat schlafen() weitere Überladungen im deutschen?
Echte Programmierer laufen in dieser Beziehung oft wie Compiler. Sie verstehen keine noch so gut gemeinten Sätze, wenn die Syntax nicht stimmt. Eine "Frage" wie
Willst Du mit mir?
wird nicht verstanden. Nachdem der Satz syntaktisch falsch ist (das Modalverb "wollen" ist ohne ohne Partner), erübrigt sich jede weitere Analyse.
Die Pragmatik (weit jenseits von Homecomputern aber stets aufgeführt) will die Bedeutung der Eingabe feststellen. Uups, Déjà-vu? Mist. Nicht die Bedeutung.
Die Pragmatik (weit jenseits von Homecomputern aber stets aufgeführt) will die Absicht der Eingabe feststellen.Der Satz des Arbeitskollegen "Mir ist kalt." wird syntaktisch als korrekt erklärt; die Bedeutung (Semantik) wird erkannt. Ihm ist es wohl kalt. Es stecken keine Schlüsselwörter oder -phrasen darin, die eine Antwort erfordern (Pragmatik). Es ist eine rein wissenschaflich zu sehende Aussage. Sie betrifft sein subjektives Empfinden. Das hat man nicht zu bewerten. Oft genug ist man auf die Schnauze gefallen, bei sowas zu widersprechen. Also schweigt man.
Der Satz des Arbeitskollegen "Mir ist zu kalt." wird syntaktisch als korrekt erklärt; die Bedeutung (Semantik) wird erkannt. Es stecken diesmal Schlüsselwörter oder -phrasen darin, die eine Antwort erfordern (Pragmatik).
AHA! Das ist wohl das Geheimnis der Pragmatik.
Vermutlich sucht er nach Mitgefühl. Man sagt "Jup.", und drückt damit aus, daß man sich wirklich in seine Lage hineingedacht hat. Und das hat man. Jeder hat vermutlich schonmal gefroren (Das ist, wenn die Temperatur des den eigenen Körper umgebenden Mediums so gering ist, daß jener sich mit so fiesen Mitteln bemerkbar macht wie z.B unwillentlichen Muskelkontraktionen (die sind ja nicht schlimm, aber die ausgelösten Bewegungen leiten alle miteinander Bewegungsempfindungen zurück (und wenn's ganz böse kommt, treffen die unwillentlichen Kontraktionen die Eigenfrequenz der betroffenen Glieder: dann ist der Geist fast wehrlos gegen den Körper)) oder Hormonausschüttungen in einem Maße, daß man, um weiterhacken zu können, einen Pullover anziehen oder den Heizkörper aufdrehen muss). Mit "Jup" drückt man treffend aus, daß man sich ob seiner Qualen daran erinnert.
Der folgende Satz des Arbeitskollegen "Das Fenster neben Dir steht offen." ist viel einfacher. Das ist einfach so, das Fenster neben mir steht offen. Das sehe ich genauso. Und er kennt mich: ich würde schon widersprechen, wenn es nicht so wäre.
In den Büchern steht zur Pragmatik, daß der Satz "Es zieht." eine Aufforderung sei, eine Tür zu oder ein Fenster schließen. Aber das kann ich nicht durch Deduktion erschließen. Dennoch ergaben Rückfragen über Messverlauf von über 20 Jahren, daß in weit mehr als 70% der Fälle der Sprecher diesen Satz sagte, um auszudrücken, daß ich jenes(Fenster/Tür) schließen sollte. In keinem Fall hat mir der Aufforderer schlüssig erklären können, weshalb er nicht etwas eher Verständliches wie "Bitte schließen Sie das Fenster!" sagte.
Also, was es mit der Pragmatik genau auf sich hat, steht in den Büchern nicht, sorry. Es steht immer nur anhand von Beispielen da und alle sind unlogisch.
Eine Sprache ist eine Menge (von möglichen Eingaben).
Eine Semantik ist eine Übersetzungsvorschrift von einer Sprache in eine andere (ausgabe(semantik(eingabe)).Die Syntax ist auch nur eine Semantik. Sie bildet Eingaben ab auf die Menge {true;false}.
Es wird vermutet: Die Pragmatik ist auch nur eine Semantik.
-
Cool danke Volkard ^^ Jetzt kann ich endlich sogar mal was mit dem wort "Pragmatik" anfangen
BR,
Vinzenz
-
Danke volkard.
-
dEUs schrieb:
Es gibt da immer so eine schöne Analogie zur deutschen Sprache. Der Satz "Die Sonne ist rosa." ist syntaktisch korrekt - keine Rechtschreibfehler und Grammatikfehler - semantisch aber nicht: Er ergibt keinen Sinn.
Nein, auch semantisch ist dieser Satz korrekt, er ist einfach nur falsch. Ein semantisch falscher Satz wäre folgender:
Noam Chomsky schrieb:
„Farblos grüne Ideen schlafen wütend.“