it-swarm.dev

Was ist der Unterschied zwischen Syntax und Semantik?

Ich habe immer gedacht, dass das Verweisen auf die Syntax einer Sprache dasselbe ist wie das Verweisen auf die Semantik einer Sprache. Aber ich wurde informiert, dass dies anscheinend nicht der Fall ist. Was ist der Unterschied?

89
gsingh2011

Semantik ~ Bedeutung

Syntax ~ Symbolische Darstellung

Zwei in verschiedenen Sprachen geschriebene Programme könnten also dasselbe tun (Semantik), aber die zum Schreiben des Programms verwendeten Symbole wären unterschiedlich (Syntax).

Ein Compiler überprüft Ihre Syntax für Sie (Fehler zur Kompilierungszeit) und leitet die Semantik aus den Sprachregeln ab (z. B. Zuordnung der Syntax zu Maschinenanweisungen), findet jedoch nicht alle semantischen Fehler (Laufzeitfehler, z. B. Berechnung) das falsche Ergebnis, weil der Code add 1 statt add 2 sagt).

106
Chris Card

Eigentlich gibt es nicht zwei Ebenen, sondern drei:

  • lexikalische Ebene: Wie Zeichen kombiniert werden, um Sprachelemente zu erzeugen (i und f erzeugen if)
  • syntaktische Ebene: Wie Sprachelemente kombiniert werden, um Sprachausdrücke zu erzeugen (if, (, 42, ==, answer und ) erzeugt eine bedingte Anweisung)
  • semantische Ebene: Wie Sprachausdrücke in CPU-Anweisungen konvertiert werden, um eine Bedeutung zu bilden (eine bedingte Anweisung ermöglicht die Ausführung des einen oder anderen Zweigs abhängig vom Ergebnis des booleschen Ausdrucks).
35
mouviciel

Ich werde es Ihnen anhand eines einfachen Beispiels in der Sprache ENGLISH erklären:

The glass drank Ben

Ist eine syntaktisch korrekte Aussage. Es hat ein Substantiv, ein Verb usw.

Aber semantisch ist es falsch, weil diese Aussage keine denkbare oder korrekte Bedeutung hat.

18
IcyFlame

Semantik beschreiben die logischen Entitäten einer Programmiersprache und ihre Interaktionen. Syntax definiert, wie diese in Zeichen ausgedrückt werden.

Zum Beispiel ist das Konzept der Zeigerarithmetik Teil der Semantik von C; die Art und Weise, wie die + und - Operatoren können verwendet werden, um Zeigeroperationen auszudrücken, die Teil der Syntax sind.

Manchmal teilen zwei Sprachen einen Teil ihrer Semantik, aber die Syntax unterscheidet sich stark (z. B. C # und VB.NET - beide verwenden Werttypen und Referenztypen, aber die Zeichen, die Sie zum Definieren eingeben, sind unterschiedlich). In anderen Fällen sind zwei Sprachen syntaktisch ähnlich, aber die Semantik stimmt nicht überein (siehe Java vs. JavaScript, wo die Ähnlichkeiten Anfänger oft verwirren).

15
tdammers

Mit der Syntax ordnen Sie die Token einer Sprache an. Semantik ist das, was diese Token bedeuten (normalerweise, was eine bestimmte Anordnung von Token bedeutet).

Sie haben nicht angegeben, ob Sie sich nur auf Programmiersprachen oder auf allgemeine Programmiersprachen beziehen, also meine Antwort bezieht sich auf Datensprachen (wie XML, RDF, Datentypsysteme usw.):

Brian L. Meek schreibt in seinen sieben goldenen Regeln für die Erstellung sprachunabhängiger Standards (1995), dass "eine Sprache" Syntax kann die Semantik eines anderen sein ". Er bezieht sich auf die Wörter "Syntax" und "Semantik", die in der Datenbeschreibung verwendet werden. Wenn Sie also in einer Spezifikation eines Datenformats auf diese Wörter stoßen, sollten Sie beide Wörter besser durch "Potrzebie" ersetzen " um klar zu machen, dass Sie die Bedeutung für sich selbst herausfinden müssen.

Die Beziehung zwischen Syntax und Semantik, zumindest in genau angegebenen Daten, kann besser durch den Begriff "Kodierung" beschrieben werden. Die Semantik ist in der Syntax codiert. Da Aufzeichnungen verschachtelt werden können, entspricht die Syntax einer Sprache der Semantik einer anderen Sprache. Wenn man über den Bereich der Daten hinausgeht, kann diese Verschachtelung praktisch unendlich sein, wie von Umberto Eco als "unbegrenzte Semiose" beschrieben.

Um ein Beispiel zu geben:

  • XML-Syntax (das Zeug mit all diesen Klammern) ist Syntax mit einem XML-Infoset (einem abstrakten Baum) als Semantik.
  • Ein XML-Infoset als Syntax kann einen Datensatz in einem XML-Datenformat als semantisch ausdrücken, z. B. ein RDF/XML-Dokument, das ein RDF - Diagramm) codiert.
  • Ein RDF - Diagramm (das Material mit URI-Referenzen) als Syntax codiert ein Diagramm abstrakter Ressourcen als semantisch.
  • Ein Graph abstrakter Ressourcen als Syntax codiert ein konzeptionelles Modell als semantisch.

Menschen hören normalerweise auf einer bestimmten Ebene auf und nehmen es als semantisch, aber am Ende gibt es keine endgültige Semantik, es sei denn, ein Mensch interpretiert die Daten in seinem Kopf. Sobald man versucht, Semantik in Form von Daten auszudrücken, wird sie zur Syntax.

5
Jakob

Wenn es in BNF (Backus-Naur Form) oder ähnlich beschrieben werden kann, ist es Syntax. Wenn es nicht kann, ist es nicht.

In der Semantik geht es dagegen um die Bedeutung eines Programms (oder eines anderen Teils des Quellcodes).

Und manchmal kann die Grenze zwischen den beiden verschwommen sein.

Eine Möglichkeit, die Unterscheidung zu verstehen, besteht darin, die Arten von Fehlern zu untersuchen, die auftreten, wenn die Syntax oder Semantik Ihres Programms falsch ist.

Ein Syntaxfehler ist ein Fehler des Quellcodes, der mit der Sprachgrammatik übereinstimmt, z. B. wenn kein Semikolon vorhanden ist.

Ein semantischer Fehler ist ein Fehler bei der Erfüllung anderer Sprachanforderungen (was C beispielsweise als "Einschränkungen" bezeichnet). Ein Beispiel könnte das Schreiben von x + y sein, wobei x und y nicht kompatible Typen sind. Die Sprachgrammatik sagt Ihnen, dass ein Zusatz wie something + something Aussieht, aber nicht leistungsfähig genug ist, um die Anforderungen an die Typen der linken und rechten Operanden auszudrücken.

(Logische Fehler, wie die Verwendung von 1, wobei 2 korrekt wäre, können vom Compiler im Allgemeinen nicht erkannt werden. In einigen Fällen kann ein Compiler jedoch vor fragwürdigem Code warnen.)

4
Keith Thompson

Syntax ist das, was die (lexikalischen) Symbole sagen. Semantik ist das, was sie bedeuten.

Erwägen:

C #: condition ? true_value : false_value
VB.NET: If(condition, true_value, false_value)
- Unterschiedliche Syntax, gleiche Semantik.

C #: left_value / right_value
VB.NET: left_value / right_value
- Gleiche Syntax, unterschiedliche Semantik (für ganze Zahlen).

0
Mark Hurd

Syntax ist die grammatikalische Anordnung von Wörtern in einem Satz, d. H. Der Wortreihenfolge.

(Englisch) ' Katzenhund ' und (Programmierung) ' hi.5 'ist syntaktisch nicht korrekt .

(Englisch) " Katze umarmt Jungen " und (Programmierung) "* 3.2 * 5 *" ist syntaktisch gültig.

Statische Semantik ist, ob syntaktisch gültige Anweisungen eine Bedeutung haben.

(Englisch) ' Ich bin groß ' (Programmierung) (Python) ' 3 +' hi ' 'ist syntaktisch korrekt, weist jedoch einen statischen semantischen Fehler auf.

Semantik ist die Bedeutung, die mit einer syntaktisch korrekten Zeichenfolge ohne statischen semantischen Fehler verbunden ist, d. H. Der Satz ist syntaktisch und semantisch korrekt, aber seine Bedeutung entspricht möglicherweise nicht der beabsichtigten.

(Englisch) " Fliegende Flugzeuge können gefährlich sein " kann zwei Bedeutungen haben, d. H. Das Fliegen von Flugzeugen kann gefährlich sein oder die fliegenden Flugzeuge können gefährlich sein.

(Programmierung) „Der Computer generiert keine Fehlermeldungen, tut jedoch nicht das, was Sie ihm gesagt haben. es wird etwas anderes tun. "

Quelle : MIT 6.00.1

0
kHarshit