Semantik (Informatik)
Im Programmiersprache Theorie, Semantik ist das strenge mathematische Studium der Bedeutung von Programmiersprachen.[1] Semantik zuweist Computer Bedeutung für gültig Saiten in einem Programmiersprache Syntax.
Semantik beschreibt die Prozesse, die einem Computer folgt, wenn Ausführung ein Programm in dieser spezifischen Sprache. Dies kann durch die Beschreibung der Beziehung zwischen Eingabe und Ausgabe eines Programms oder einer Erläuterung der Ausführung eines bestimmten Programms gezeigt werden Plattform, damit ein Schaffung a Berechnungsmodell.
Überblick
Das Gebiet der formalen Semantik umfasst alle folgenden:
- Die Definition von semantischen Modellen
- Die Beziehungen zwischen verschiedenen semantischen Modellen
- Die Beziehungen zwischen verschiedenen Sinnesansätzen
- Die Beziehung zwischen der Berechnung und den zugrunde liegenden mathematischen Strukturen aus Bereichen wie z. Logik, Mengenlehre, Modelltheorie, Kategoriestheorie, etc.
Es hat enge Verbindungen zu anderen Bereichen von Informatik wie zum Beispiel Programmiersprache Design, Typentheorie, Compiler und Dolmetscher, Programmüberprüfung und Modellprüfung.
Ansätze
Es gibt viele Ansätze für formale Semantik; Diese gehören zu drei Hauptklassen:
- Denotationssemantik,[2] wobei jede Phrase in der Sprache als interpretiert wird Bezeichnung, d.h. eine konzeptionelle Bedeutung, an die er abstrakt angesehen werden kann. Solche Bezeichnungen sind oft mathematische Objekte, die in einem mathematischen Raum leben, aber es ist keine Voraussetzung, dass sie so sein sollten. Als praktische Notwendigkeit werden Bezeichnungen unter Verwendung einer Form mathematischer Notation beschrieben, die wiederum als Bezeichnung Metallsprage formalisiert werden kann. Zum Beispiel die Denotationssemantik von Funktionssprachen Oft übersetzen die Sprache in Domain -Theorie. Semantische Bezeichnungsbeschreibungen können auch als kompositorische Übersetzungen aus einer Programmiersprache in die temotationale Metallanguage dienen und als Grundlage für das Entwerfen verwendet werden Compiler.
- Betriebssemantik,[3] wobei die Ausführung der Sprache direkt beschrieben wird (und nicht durch Übersetzung). Die operative Semantik entspricht locker DeutungObwohl wiederum die "Implementierungssprache" des Dolmetschers im Allgemeinen ein mathematischer Formalismus ist. Die operative Semantik kann eine definieren abstrakte Maschine (so wie die SECD -Maschine) und geben Sätzen eine Bedeutung, indem sie die Übergänge beschreiben, die sie für Zustände der Maschine induzieren. Alternativ wie bei den Reinen Lambda -Kalkül, operative Semantik kann durch syntaktische Transformationen zu Phrasen der Sprache selbst definiert werden.
- Axiomatische Semantik,[4] wobei man Phrasen einen Sinn gibt, indem man das beschreibt Axiome das gilt für sie. Die axiomatische Semantik unterscheidet keinen Unterschied zwischen der Bedeutung einer Phrase und den logischen Formeln, die sie beschreiben; es bedeutet ist Was genau in einer Logik beweisen kann. Das kanonische Beispiel der axiomatischen Semantik ist Hoare Logik.
Abgesehen von der Wahl zwischen Denotations-, operativen oder axiomatischen Ansätzen ergeben sich die meisten Variationen in formalen semantischen Systemen aus der Wahl der Unterstützung des mathematischen Formalismus.
Variationen
Einige Variationen der formalen Semantik umfassen die folgenden:
- Aktionssemantik[5] ist ein Ansatz, der versucht, die Semantik der Denotation zu modularisieren, den Formalisierungsprozess in zwei Ebenen (Makro- und Mikrosemantik) aufzuteilen und drei semantische Entitäten (Aktionen, Daten und Ausläufer) vorzulegen, um die Spezifikation zu vereinfachen.
- Algebraische Semantik[4] ist eine Form von Axiomatische Semantik bezogen auf algebraisch Gesetze zur Beschreibung und Begründung darüber Programmsemantik in einem formell Benehmen. Es unterstützt auch Denotationssemantik und Betriebssemantik;
- Grammatiken zuschreiben[6] Systeme definieren, die systematisch berechnen ""Metadaten" (genannt Attribute) für die verschiedenen Fälle von die Syntax der Sprache. Attributgrammatiken können als eine Denotationssemantik verstanden werden, bei der die Zielsprache einfach die Originalsprache ist, die mit Attributanmerkungen angereichert ist. Neben der formalen Semantik wurden Attributgrammatiken auch für die Codegenerierung in verwendet Compilerund um zu erweitern regulär oder Kontextfreie Grammatiken mit Kontextempfindlich Bedingungen;
- Kategorisch (oder "Functorial") Semantik[7] Verwendet Kategoriestheorie als Kernmathematikformalismus. Eine kategoriale Semantik entspricht normalerweise einer axiomatischen Semantik, die eine syntaktische Darstellung der kategorialen Strukturen liefert. Auch die Denotationssemantik sind häufig Fälle einer allgemeinen kategorialen Semantik.[8]
- Parallelitätssemantik[9] ist ein Cat-All-Begriff für alle formalen Semantik, die gleichzeitige Berechnungen beschreibt. Historisch wichtige gleichzeitige Formalismen haben die einbezogen Schauspielermodell und Prozesskalkül;
- Spielsemantik[10] Verwendet eine Metapher, die von inspiriert wurde von Spieltheorie;
- Prädikattransformatorsemantik,[11] entwickelt von Edsger W. Dijkstrabeschreibt die Bedeutung eines Programmfragments als die Funktion transformierend a Postkondition zum Voraussetzung musste es etablieren.
Beziehungen beschreiben
Aus verschiedenen Gründen könnte man die Beziehungen zwischen verschiedenen formalen Semantik beschreiben. Zum Beispiel:
- Um zu beweisen, dass eine bestimmte operative Semantik für eine Sprache die logischen Formeln einer axiomatischen Semantik für diese Sprache erfüllt. Ein solcher Beweis zeigt, dass es "solide" ist, über ein bestimmtes (operativ) zu argumentieren (operativ) Interpretationsstrategie Verwenden eines bestimmten (axiomatischen) Proof -System.
- Um zu beweisen, dass die operative Semantik über eine Maschine auf hoher Ebene durch a verwandt ist Simulation Mit der Semantik über einer Maschine auf niedriger Ebene, wobei die abstrakte Maschine auf niedriger Ebene primitivere Operationen enthält als die hochrangige abstrakte Maschinendefinition einer bestimmten Sprache. Ein solcher Beweis zeigt, dass die Maschine mit niedriger Ebene die hochrangige Maschine "treu impliziert".
Es ist auch möglich, mehrere Semantik durchzusetzen Abstraktionen über die Theorie von Abstrakte Interpretation.
Geschichte
Robert W. Floyd wird der Gründung des Bereichs der Programmiersprache Semantik in der Gründung in der Gründung Floyd (1967).[12]
Siehe auch
- Computersemantik
- Formale Semantik (Logik)
- Formale Semantik (Linguistik)
- Ontologie
- Ontologie (Informationswissenschaft)
- Semantische Äquivalenz
- Semantische Technologie
Verweise
- ^ Joseph A. Goguen (1975). "Semantik der Berechnung". Kategorie -Theorie, die auf Berechnung und Kontrolle angewendet wird. Vorlesungsnotizen in Informatik. Vol. 25. Springer. S. 151–163. doi:10.1007/3-540-07142-3_75. ISBN 978-3-540-07142-6.
- ^ David A. Schmidt (1986). Denotationssemantik: Eine Methodik zur Sprachentwicklung. William C. Brown Publishers. ISBN 9780205104505.
- ^ Gordon D. Plotkin (1981). "Ein struktureller Ansatz zur operativen Semantik". Technischer Bericht Daimi FN-19. Informatikabteilung, Aarhus University.
{{}}
: Journal zitieren erfordert|journal=
(Hilfe) - ^ a b Joseph A. Goguen; James W. Thatcher; Eric G. Wagner; Jesse B. Wright (1977). "Erste Algebra -Semantik und kontinuierliche Algebren". Journal of the ACM. 24 (1): 68–95. doi:10.1145/321992.321997. S2CID 11060837.
- ^ Peter D. Mosses (1996). "Theorie und Praxis der Handlungssemantik". BRICS -Bericht RS9653. Aarhus University.
{{}}
: Journal zitieren erfordert|journal=
(Hilfe) - ^ Pierre Deransart; Martin Jourdan; Bernard Lorho (1988). "Attribut -Grammatiken: Definitionen, Systeme und Bibliographie. Vorlesungen in Informatik 323. Springer-Verlag. ISBN 9780387500560.
- ^ F. William Lawvere (1963). "Funktionsemantik algebraischer Theorien". Verfahren der Nationalen Akademie der Wissenschaften der Vereinigten Staaten von Amerika. 50 (5): 869–872. doi:10.1073/pnas.50.5.869. PMC 221940. PMID 16591125.
- ^ Andrzej Tarlecki; Rod M. Burstall; Joseph A. Goguen (1991). "Einige grundlegende algebraische Instrumente für die Semantik der Berechnung: Teil 3. Indexierte Kategorien". Theoretische Informatik. 91 (2): 239–264. doi:10.1016/0304-3975 (91) 90085-G.
- ^ Mark Batty; Kayvan Memarian; Kyndylan Nienhuis; Jean Pichon-Pharabod; Peter Sewell (2015). "Das Problem der Programmiersprache Parallelitätsemantik". Verfahren des europäischen Symposiums zu Programmiersprachen und -systemen. Springer. S. 283–307. doi:10.1007/978-3-662-46669-8_12.
- ^ Samson Abramsky (2009). "Semantik der Interaktion: Eine Einführung in die Spielsemantik". In Andrew M. Pitts; P. Dybjer (Hrsg.). Semantik und Logik der Berechnung. Cambridge University Press. S. 1–32. doi:10.1017/CBO9780511526619.002. ISBN 9780521580571.
- ^ Edsger W. Dijkstra (1975). "Schutzbefehle, Nichtdeterminalität und formale Ableitung von Programmen". Kommunikation der ACM. 18 (8): 453–457. doi:10.1145/360933.360975. S2CID 1679242.
- ^ Donald E. Knuth. "Memorial Resolution: Robert W. Floyd (1936–2001)" (PDF). Fakultätsemorials der Stanford University. Stanford Historical Society.
Weitere Lektüre
- Lehrbücher
- Floyd, Robert W. (1967). "Zuweisen von Programmen" Bedeutungen " (PDF). In Schwartz, J.T. (ed.). Mathematische Aspekte der Informatik. Proceedings of Symposium über angewandte Mathematik. Vol. 19. American Mathematical Society. S. 19–32. ISBN 0821867288.
- Hennessy, M. (1990). Die Semantik der Programmiersprachen: Eine elementare Einführung unter Verwendung der strukturellen operativen Semantik. Wiley. ISBN 978-0-471-92772-3.
- Tennent, Robert D. (1991). Semantik der Programmiersprachen. Prentice Hall. ISBN 978-0-13-805599-8.
- Gunter, Carl (1992). Semantik der Programmiersprachen. MIT Press. ISBN 0-262-07143-6.
- Nielson, H. R.; Nielson, Flemming (1992). Semantik mit Anwendungen: eine formale Einführung (PDF). Wiley. ISBN 978-0-471-92980-2.
- Winkel, Glynn (1993). Die formale Semantik der Programmiersprachen: Eine Einführung. MIT Press. ISBN 0-262-73103-7.
- Mitchell, John C. (1995). Grundlagen für Programmiersprachen (PostScript).
- Slonneger, Kenneth; Kurtz, Barry L. (1995). Formale Syntax und Semantik von Programmiersprachen. Addison-Wesley. ISBN 0-201-65697-3.
- Reynolds, John C. (1998). Theorien der Programmiersprachen. Cambridge University Press. ISBN 0-521-59414-6.
- Harper, Robert (2006). Praktische Grundlagen für Programmiersprachen (PDF). Archiviert von das Original (PDF) am 2007-06-27. (Arbeitsentwurf)
- Nielson, H. R.; Nielson, Flemming (2007). Semantik mit Anwendungen: eine Vorspeise. Springer. ISBN 978-1-84628-692-6.
- Stumpf, Aaron (2014). Programmiersprach -Grundlagen. Wiley. ISBN 978-1-118-00747-1.
- Krishnamurthi, Shriram (2012). "Programmiersprachen: Anwendung und Interpretation" (2. Aufl.).
- Vorlesungsnotizen
- Winkel, Glynn. "Denotational Semantics" (PDF). Universität von Cambridge.
Externe Links
- Aaby, Anthony (2004). Einführung in Programmiersprachen. Archiviert vom Original am 2015-06-19.
{{}}
: CS1 Wartung: Bot: Original -URL -Status unbekannt (Link) Semantik.