Was ist Semantik?

13

Es gibt viele beliebte Sprachen. Informatiker sagen uns jedoch, dass wir, um das Verhalten von Programmen in diesen Sprachen definitiv und eindeutig verstehen zu können, diese in eine andere, gut verstandene Sprache übersetzen müssen (z. B. um ihre Identität zu beweisen). Sie nennen solche Sprache "eine Semantik". Autoren schlagen eine von vielen Semantiken vor. Sie erklären die Bedeutung ihrer Konstruktionen und wie Sie Ihre Sprache in ihre übersetzen können. Sobald Sie das tun, wird jeder Ihr Programm sicher verstehen, sagen sie.

Sieht gut aus, aber ich verstehe etwas nicht. Sagen sie uns, dass sie eine andere Sprache einführen, um die erste zu verstehen? Warum verstehen wir es besser als das Original? Warum ist diese Semantik besser als das? Warum nicht gleich die Semantik von C lernen, anstatt eine andere Sprache zu erfinden, um die Semantik von C zu beschreiben? Gleiches gilt für die Syntax. Warum stelle ich nicht die gleiche Frage zur Syntax?

PS In den Kommentaren höre ich, dass Semantik keine andere Sprache oder Übersetzung bedeutet. Die formale Semantik für VHDL besagt jedoch, dass Sie etwas nicht verstehen, wenn Sie es nur auf eine Weise verstehen, und dass die "Bedeutung der Bedeutung" angegeben werden kann, wenn wir eine Sprache mit einem Mechanismus bereitstellen, der es in eine andere (bekannte) Sprache übersetzt. Das heißt, "Semantik ist eine Beziehung zwischen formalen Systemen". Hennessy in der Semantik der Programmiersprachen sagt, dass die Semantik die formale Verarbeitung der "Bedeutung" des Programms ermöglicht, wenn die Semantik als BNF- oder Syntaxdiagramm geliefert wird. Was ist ein formales System, wenn nicht eine Sprache?

PS2 Kann ich sagen, dass die HW-Synthese eines bestimmten HDL-Programms zu einer Verknüpfung von Gattern ein Prozess der Semantikextraktion ist? Wir übersetzen (High-Level-) Beschreibungen in die (Low-Level-) Sprache, die wir später verstehen.

Val
quelle
Welche Art von Diagrammen meinen Sie? Ich arbeite mit Semantik, benutze aber so gut wie nie Diagramme.
Dave Clarke
1
Ich würde die Semantik nicht als "Sprache" bezeichnen. Die Semantik definiert die Bedeutung von Sprachen. Zum Beispiel ist die Syntax von Binärzahlen . Nur mit der Semantik wir tatsächliche Zahlen; Beachten Sie, dass dies nicht die einzig mögliche Semantik ist, es gibt auch BCD, 2-Komplement und viele mehr. Wert ( w ) = | w | i = 1 w i 2 n - i + 1{0,1}+Wert(w)=ich=1|w|wich2n-ich+1
Raphael
@ Dave Entschuldigung, ich habe meine Frage unter Eindruck von Zuweisungsentscheidungsdiagrammen erstellt. Ich habe auch nur die formale Semantik für VHDL, ein Buch, in dem Autoren verschiedene Semantiken vorschlagen, jede Menge Diagramme. Ich dachte, dass dies eine Sprache ist, auf die wir abbilden.
Val
Das klingt weniger nach Semantik als vielmehr nach einem Zwischenschritt auf dem Weg zur Hardware-Kompilierung.
Dave Clarke
Ja, aber sie extrahieren die "Bedeutung" aus der Beschreibung.
Val

Antworten:

15

Warum nicht gleich die Semantik von C lernen, anstatt eine andere Sprache zu erfinden, um die Semantik von C zu beschreiben?

Denn um die Semantik von C zu definieren, braucht man eine Sprache, zum Beispiel Englisch. Englisch kann mehrdeutig sein, insbesondere die C99-Semantik.

Der Begriff der Semantik in der Informatik ist im Allgemeinen eine mathematische Beschreibung eines Programms, und diese Beschreibung ist nicht genau eine Übersetzung. Es gibt verschiedene Arten von Semantiken, die sich auf verschiedene Dinge beziehen können:

  1. über welche mathematische Funktion das Programm berechnet ( Denotationssemantik ),
    Lambda x: x + x =(x2x)
  2. über Eigenschaften, die vor und nach dem Programm gelten sollen ( axiomatische Semantik ),
    {ein>0} x = a; y = 0; während (1 <x) {x = x / 2; y ++; } {y=Log(ein)}
  3. darüber, wie sich das Programm reduzieren wird ( operative Semantik ). wobei dein Gedächtnis davor und danach darstellt. In diesem Fall ist und wenn und die Speicherzellen fürundund wenn .
    (σ, while (x) {x -; y ++;})σ
    σ,σσ=(xein,yb)σ=(xein+b,y0)xyxyein

Ein wenig traurig für den Moment, ein Programm durch seine Semantik allgemein zu verstehen, ist weder einfach noch die Absicht von allem. Es ist nicht das erstere, denn diese Mathematik kann chaotisch sein. Letzteres ist nicht der Fall, da die Semantik zwar eine gemeinsame und eindeutige Beschreibung liefert, aber nicht zum Verständnis eines Programms verwendet wird.

Wenn das Lesen der Semantik nicht so aussagekräftig ist, ist es sehr wichtig, die Semantik der Grundelemente der Sprache zu lesen und zu vereinbaren, um beispielsweise eindeutig zu erklären, wie Cprimitive Werke.fortsetzen

Abschließend:

Sagen sie uns, dass sie eine andere Sprache einführen, um die erste zu verstehen?

Technisch gesehen ist die Sprache Mathe. Außerdem ist es im Grunde für alle Programmiersprachen gleich, so dass die Einführung einer neuen Sprache, wenn sie für alle gleich ist, ziemlich in Ordnung wäre.

Warum verstehen wir es besser als das Original?

Weil es Mathe ist, ist es vielleicht schwieriger zu verstehen, aber es ist viel präziser und vollständiger.

Gleiches gilt für die Syntax.

Es gibt Arbeiten zu verifizierten Parsern, aber die Frage, was eine Semantik eines Parsers bedeuten würde, ist nicht trivial.

jmad
quelle
2
"Mathe [...] ist viel genauer und vollständiger." - was natürlich die Frage nach der formalen Syntax und Semantik der Mathematik selbst aufwirft. ;)
Raphael