it-swarm.com.de

Was ist der Unterschied zwischen Syntax und Semantik in Programmiersprachen?

Was ist der Unterschied zwischen Syntax und Semantik in Programmiersprachen (wie C, C++)?

93
haccks

Bei der Syntax geht es um die Struktur oder die Grammatik der Sprache. Es beantwortet die Frage: Wie erstelle ich einen gültigen Satz? Alle Sprachen, auch Englisch und andere menschliche (auch "natürliche") Sprachen, haben Grammatiken, dh Regeln, die definieren, ob der Satz richtig aufgebaut ist oder nicht.

Hier sind einige Syntaxregeln für die Sprache C:

  • separate Anweisungen mit einem Semikolon
  • setzen Sie den bedingten Ausdruck einer IF-Anweisung in Klammern
  • gruppieren Sie mehrere Anweisungen in einer einzigen Anweisung, indem Sie sie in geschweifte Klammern setzen
  • datentypen und Variablen müssen vor der ersten ausführbaren Anweisung deklariert werden (diese Funktion wurde in C99 entfernt. C99 und letztere ermöglichen Deklarationen gemischter Typen.)

Die Semantik handelt von der Bedeutung des Satzes. Es beantwortet die Fragen: Ist dieser Satz gültig? Wenn ja, was bedeutet der Satz? Zum Beispiel:

x++;                  // increment
foo(xyz, --b, &qrs);  // call foo

sind syntaktisch gültige C-Anweisungen. Aber was meinen sie? Ist es überhaupt zulässig, diese Anweisungen in eine ausführbare Folge von Anweisungen umzuwandeln? Diese Fragen stehen im Zentrum der Semantik.

Betrachten Sie den ++ - Operator in der ersten Anweisung. Ist es überhaupt gültig, dies zu versuchen?

  • Wenn x ein Gleitkomma-Datentyp ist, hat diese Anweisung (gemäß den C-Sprachregeln) keine Bedeutung und ist daher ein Fehler , obwohl die Anweisung syntaktisch korrekt ist.
  • Wenn x ein Zeiger auf irgendein Datentyp ist, lautet die Bedeutung der Anweisung "sizeof ( irgendein Datentyp) zum Wert an Adresse x und hinzufügen Speichern Sie das Ergebnis an der Stelle mit der Adresse x ".
  • Wenn x ein Skalar ist, lautet die Bedeutung der Anweisung "Addiere eins zum Wert an Adresse x und speichere das Ergebnis an der Stelle an Adresse x".

Beachten Sie schließlich, dass einige Semantiken zur Kompilierungszeit nicht bestimmt werden können und daher zur Laufzeit ausgewertet werden müssen. Wenn im ++ - Operatorbeispiel x bereits den Maximalwert für seinen Datentyp aufweist, was passiert, wenn Sie versuchen, 1 hinzuzufügen? Ein weiteres Beispiel: Was passiert, wenn Ihr Programm versucht, einen Zeiger zu dereferenzieren, dessen Wert NULL ist?

Zusammenfassend ist Syntax das Konzept, das sich nur darum kümmert, ob der Satz für die Grammatik der Sprache gültig ist oder nicht. Bei der Semantik geht es darum, ob der Satz eine gültige Bedeutung hat oder nicht.

170
Jeff N

Die Syntax bezieht sich auf die Struktur einer Sprache und zeigt anhand des Etymologie , wie die Dinge zusammengesetzt sind.
Zum Beispiel könnten Sie verlangen, dass der Code zusammengesetzt wird, indem Sie einen Typ, dann einen Namen und dann ein Semikolon deklarieren, um syntaktisch korrekt zu sein.

Type token;

Auf der anderen Seite geht es bei der Semantik um Bedeutung. Ein Compiler oder Interpreter könnte sich über Syntaxfehler beschweren. Ihre Mitarbeiter werden sich über die Semantik beschweren.

18
doctorlove

Wikipedia hat die Antwort. Lesen Sie Syntax (Programmiersprachen) & Semantik (Informatik) Wikipages.

Oder denken Sie an die Arbeit eines Compiler oder Interpreter . Der erste Schritt ist lexikalische Analyse wobei Token durch Teilen des Strings in Lexeme und Parsen generiert werden, die einen abstrakten Syntaxbaum (der eine Repräsentation darstellt) bilden der Syntax). Die nächsten Schritte umfassen die Transformation oder Auswertung dieser AST (Semantik).

Beachten Sie auch, dass, wenn Sie eine Variante von C definiert haben, bei der jedes Schlüsselwort in sein französisches Äquivalent umgewandelt wurde (also if wird si, do wird faire, else wird sinon etc etc ...) Sie würden definitiv die Syntax Ihrer Sprache ändern, aber Sie werden nicht viel an der Semantik ändern: Das Programmieren in diesem Französisch-C wird nicht einfacher sein !

Semantik ist, was Ihr Code bedeutet - was Sie in Pseudo-Code beschreiben könnten. Die Syntax ist die eigentliche Struktur - von Variablennamen bis zu Semikolons.

6
thumbtackthief

Syntax ist die Struktur oder Form von Ausdrücken, Anweisungen und Programmeinheiten, Semantik ist die Bedeutung dieser Ausdrücke, Anweisungen und Programmeinheiten. Semantik folgt direkt aus Syntax. Syntax bezieht sich auf die Struktur/Form des Codes, den eine bestimmte Programmiersprache angibt, Semantik behandelt jedoch die Bedeutung, die den Symbolen, Zeichen und Wörtern zugewiesen ist.

2
Kobina Ebo

Syntax: Es bezieht sich auf die grammatische Struktur der Sprache. Wenn Sie die Sprache c schreiben. Sie müssen sehr darauf achten, Datentypen, Token [es kann ein Literal oder ein Symbol wie "printf ()" sein. Es hat 3 Zeichen, "printf, (,)"]. Ebenso müssen Sie sehr vorsichtig sein, wie Sie Funktion, Funktionssyntax, Funktionsdeklaration, Definition, Initialisierung und Aufruf verwenden.

Während der Semantik handelt es sich um Logik oder Konzept von Sätzen oder Aussagen. Wenn Sie etwas aus dem Konzept oder der Logik heraus sagen oder schreiben. Dann hast du semantisch Unrecht.

1