Programmiersprachen und Ubersetzer - Skript zur Vorlesung Sommersemester 2011 c Prof. Dr. R. Parchmann
←
→
Transkription von Seiteninhalten
Wenn Ihr Browser die Seite nicht korrekt rendert, bitte, lesen Sie den Inhalt der Seite unten
Skript zur Vorlesung Programmiersprachen und Übersetzer Sommersemester 2011 c Prof. Dr. R. Parchmann Institut für Praktische Informatik FG Programmiersprachen und Übersetzer Universität Hannover
Vorwort Dieses Skript entstand aus Notizen zur Vorlesung Programmiersprachen und Übersetzer“ die ” erstmalig im Wintersemester 1994/95 für Studierende der Elektrotechnik angeboten wurde. Ziel der Vorlesung ist es, einen Einblick in den Aufbau von Übersetzern zu geben, um die Studie- renden mit den wichtigsten Konzepten und Techniken dieses Teilgebiets der Informatik vertraut zu machen. Dies schließt auch den Umgang mit Werkzeugen zur automatischen Erstellung von Komponenten eines Übersetzers wie lex oder yacc ein, so dass die Arbeitsweise dieser Programme bei späterer Anwendungsprogrammierung bekannt ist. Ein zweites Ziel dieser Vorlesung ist es, verschiedene Programmierparadigmen vorzustellen, um den Studierenden Ausblicke in andere Strukturen der Programmierung und Problemlösung zu geben. Dazu werden beispielhaft die Prinzipien der funktionalen, der logischen und der objekt- orientierten Programmierung vorgestellt. Danken möchte ich an dieser Stelle besonders Herrn Dr. Bernhard Baehr, der die Übungsstunden für diese Vorlesung maßgeblich konzipiert und durchgeführt hat. Ohne seinen Einsatz hätten die begleitenden Beispiele, speziell die Beispielprogrammiersprache BPS mit den zugehörigen Über- setzern und allen Unterstützungsprogrammen, den Studierenden nicht zur Verfügung gestanden. Weiterhin danke ich Herrn Marc Janecki, der meine teilweise etwas kryptischen Vorlesungsno- tizen in dieses Manuskript übertrug und wesentlich dazu beigetragen hat, dass dieses Skript im nächsten Semester den Studierenden zur Verfügung steht. Hannover, August 1996 R. Parchmann Durch Einbeziehung dieser Vorlesung als Pflicht- bzw. Wahlvorlesung in die Studiengänge Ma- ” thematik mit Studienrichtung Informatik“ und in den Bachelor/Master Studiengang Informa- ” tik“, sind einige Umstellungen und Änderungen des Skriptes notwendig geworden. Um dem größeren Hörerkreis gerecht zu werden, sind die Definition der Beispielprogrammiersprache BPS und die zugehörigen Übersetzer nicht mehr Teil dieses Skripts. Eingefügt wurde ein zusätzlicher Abschnitt über das Problem der Typ-Prüfung im Compiler. In diesem Kontext wird in einem kurzen Einschub die Unifikation als wichtige Grundlage zur Typ- Prüfung polymorpher Funktionen, für Typ-Inferenzsysteme und zur logischen Programmierung behandelt. Die Notation der Unifikation wurde gegenüber der vorigen Version verändert. Das Kapitel über die Programmierparadigmen wurde neu geschrieben. Als Beispiel einer funktio- nalen Programmiersprache wird jetzt ML verwendet, um eine Sprache mit einem Typ-Inferenz- system vorstellen zu können. Hannover, März 2007 R. Parchmann Einige kleinere Korrekturen sind in die aktuelle Version des Skripts eingeflossen. Hannover, März 2011 R. Parchmann
136 LITERATUR Literatur allgemeine Literatur zur Vorlesung: [1] K.C. Louden, Programming Languages Principles and Practice, PWS-Kent Publishing, 1993. Deutsche Übersetzung: Programmiersprachen - Grundlagen, Konzepte, Entwurf, Thomson Publishing, 1994. [2] B.J. MacLennan, Principles of Programming Languages (sec. Edition), Holt, Rinehart and Winston, 1987. [3] J.C. Mitchell, Concepts in Programming Languages, Cambridge University Press, 2003. [4] R. Sethi, Programming Languages - Concepts and Constructs, Addison Wesley, 1990. [5] P. van Roy und S. Haridi, Concepts, Techniques, and Models of Computer Programming, MIT Press, 2004. [6] R. W. Sebesta, Concepts of Programming Languages, 7. ed, Pearson International, 2006. [7] D.A. Watt, Programmiersprachen, Konzepte und Paradigmen, Hanser, 1996. zu Kapitel 1 – Historische Entwicklung der Programmiersprachen [8] J. Backus, The History of FORTRAN I, II and III, Annals of the History of Computing 1 (1979), 21–37. [9] F.L. Bauer und H. Wössner, The Plankalkül“ of Konrad Zuse, A Forerunner of Today’s ” Programming Languages, Comm. ACM 15 (1972), 678–685. [10] W. de Beauclair, Rechnen mit Maschinen, Vieweg Verlag, 1968. [11] T.J. Bergin, R.G. Gibson (Eds.), History of Programming Languages, ACM Press. 1996. [12] P.E. Ceruzzi, A History of Modern Computing, The MIT Press, 1998. [13] D.E. Knuth, Ancient Babylonian Algorithms, Comm. ACM 15 (1972), 671–677. [14] D.E. Knuth und L.T. Pardo, The Early Development of Programming Languages, in A History of Computing in the Twentieth Century, N. Metropolis, J. Howlett und G.-C. Rota (Eds), 197–273. [15] J. McCarthy, History of Lisp, in R.L. Wexelblet (Ed.), History of Programming Languages, Academic Press, 1981. [16] D.D. Swade, Der mechanische Computer des Charles Babbage, Spektrum der Wissenschaft No. 4 (1993), 78–84.
LITERATUR 137 zu Kapitel 2 – Compiler und Interpreter [17] A.V. Aho, M.S. Lam, R. Sethi und J.D. Ullman, Compilers - Principles, Techniques, and Tools, Pearson-Addison Wesley, 2007. Deutsche Übersetzung: Compiler - Prinzipien, Tech- niken und Werkzeuge, Pearson Studium, 2008. [18] H. Albas, A. Nymeyer, Practice and Principles of Compiler Building with C, Prentice Hall, 1996. [19] A.A. Appel, Modern Compiler Implementation in Java, Cambridge University Press, 2002 (zweite Auflage). (Das Buch gibt es auch in einer C– und einer ML–Version!) [20] B. Bauer und R. Höllerer, Übersetzung objektorientierter Programmiersprachen, Springer, 1998. [21] Ch.N. Fischer und R.J. LeBlanc Jr., Crafting a Compiler, The Benjamin/Cummings Publishing Company, 1988. [22] C. Fraser und D. Hanson, A retargetable C Compiler: Design and Implementation, The Benjamin/Cummings Publishing Company, 1995. [23] D. Grune, H.E. Bal, C.J.H. Jacobs und K.G. Langendoen, Modern Compiler Design, Wiley, 2000. [24] T. Mason und D. Brown, lex & yacc, O’Reilly & Associates Inc., 1991. [25] T.W. Parsons, Introduction to Compiler Construction, Computer Science Press, 1992. [26] T. Pittman und J. Peters, The Art of Compiler Design, Prentice Hall, 1992. [27] J. A. Robinson. A machine-oriented logic based on the resolution principle, J. ACM, 12 (1965), p 23–41. [28] P. Ruzicka und I. Privara, An almost linear robinson unification algorithm, Acta Inf., 27(1989), p 61–71. [29] F.J. Schmitt, Praxis des Compilerbaus, Hanser, 1992. [30] B. Teufel, S. Schmidt und T. Teufel, C2 Compiler Concepts, Springer 1993. zu Kapitel 3 – Programmierparadigmen [31] M.C. Bücker, J. Geidel und M.F. Lachmann, Objectworks(R) \Smalltalk für Anfänger, Springer, 1993. [32] P. Coad und J. Nicola, Object-Oriented Programming, Yourdon Press, 1993. Deutsche Übersetzung: Objekt-orientierte Programmierung, Prentice Hall, München, 1994. [33] B. Meyer, Object-oriented Software Construction, Prentice-Hall, 1988. Deutsche Übersetzung: Objektorientierte Softwareentwicklung, Hanser, 1990. [34] B. Stroustrup, The C++ Programming Language (second Edition), Addison Wesley, 1993. [35] H. Abelson, und G.J. Sussman, Structure and Interpretation of Computer Programs, MIT Press / McGraw-Hill Book Company, Cambridge, 1990. Deutsche Übersetzung: Struktur und Interpretation von Computerprogrammen, Springer, 1991.
138 LITERATUR [36] J.D. Ullman, Elements of ML Programming, Prentice-Hall, 1994. [37] T.W. Pratt und M.V. Zelkowitz, Programming Languages - Design and Implementation, Prentice-Hall, 2001. [38] D.P. Friedman, M. Wand und C.T. Haynes, Essentials of Programming Languages, MIT Press / McGraw-Hill Book Company, Cambridge, 1992. [39] W.F. Clocksin und C.S. Mellish, Programming in Prolog, Springer, 1987. [40] L. Sterling und E. Shapiro, The Art of Prolog, MIT Press, Cambridge, 1986.
Sie können auch lesen