Typ Gleichheit
Die Bedeutung von Grundoperationen wie Zuweisung (= in durch C bezeichnet) in einer Sprachdefinition spezifiziert. So zum Beispiel die Bedeutung von Aussagen wie
x = y;
hier den Wert des Objekts y
wird für variable x
in den Speicherplätzen kopiert.
Bevor jedoch eine Operation wie eine Zuweisung vom Übersetzer akzeptiert werden kann, müssen die Typen der beiden Operanden normalerweise identisch sein (oder möglicherweise auf eine andere spezifizierte Weise kompatibel sein).
So muss ein Sprachübersetzer entscheiden, ob zwei Typen in einigen Fällen gleich sind. Wir betrachten nun, was es bedeutet zu sagen, dass zwei Arten "gleich" (oder gleichwertig) sind.
Es gibt zwei Standardmethoden, um zu bestimmen, ob zwei Arten betrachtet werden, um das gleiche: Name Äquivalenz und strukturelle Äquivalenz.
Name Äquivalenz ist die einfachste: zwei Arten sind gleich, wenn und nur wenn sie den gleichen Namen haben. So wird beispielsweise in dem Code (unter Verwendung von C-Syntax)
typedef struct {
int data[100];
int count;
} Stack;
typedef struct {
int data[100];
int count;
} Set;
Stack x, y;
Set r, s;
wenn Name Äquivalenz in der Sprache verwendet wird, dann x
und y
würden von der gleichen Art sein und r
und s
wäre die gleichen Typ, aber der Typ x
oder y
wäre nicht gleich dem Typ r
oder s
. Dies bedeutet, dass Aussagen wie
x = y;
r = s;
gültig sein würde, aber Aussagen wie
x = r;
nicht gültig sein (das heißt, nicht von einem Übersetzer akzeptiert).
Mit strukturelle Äquivalenz: sind zwei Arten gleich, wenn, und nur dann, wenn sie die gleiche „Struktur“, die auf unterschiedliche Weise interpretiert werden können.
Eine strenge Interpretation wäre, dass die Namen und Typen jeder Komponente der beiden Typen identisch sein müssen und in der Typdefinition in derselben Reihenfolge aufgeführt sein müssen.
Eine weniger strenge Anforderung wäre, dass die Komponententypen in beiden Typen gleich und in der gleichen Reihenfolge sein müssen, aber die Namen der Komponenten könnten unterschiedlich sein.
Wieder am Beispiel oben suchen, strukturelle Äquivalenz die beiden Typen Stack
und Set
gleichwertig angesehen werden würden verwenden, was bedeutet, dass ein Übersetzer Aussagen wie
x = r;
(Beachten Sie, dass C
doesn akzeptieren würde‘ t unterstützen strukturelle Äquivalenz und geben Fehler für obige Zuordnung.)
Sehr nützliche Informationen, aber der Link ist kaputt, können Sie es bitte beheben? Vielen Dank. – LearningMath
Entschuldigung, dieser Link ist nicht mehr gültig. – JerryGoyal