Programmiersprachen und ihre Übersetzer
|
|
- Fritzi Adenauer
- vor 5 Jahren
- Abrufe
Transkript
1 Folien zur Vorlesung Programmiersprachen und ihre Übersetzer Kapitel 5 Übersetzung imperativer Sprachen Faculty of Technology robert@techfak.uni-bielefeld.de June 18, 2013
2 Prozedurmechanismus Seit ALGOL und Pascal enthalten imperative (und dann auch alle objekt-orientierten) Sprachen die Konzepte Prozeduren / Funktionen / Methoden Prozedur-Parameter verschiedener Art, insbesondere wiederum Prozeduren globale und lokale Definitionen verschachtelte Sichtbarkeitsbereiche Rekursion Wie bildet man diese Konzepte auf eine Zielmaschine ab? Das ist Thema dieses Kapitels.
3 Statisch und dynamisch Zwei Grundbegriffe, die immer wieder auftauchen: Statische Größe: Zur Compilezeit bekannt und vom Compiler ermittelt Beispiel: Typ einer Variablen Dynamische Größe: Hängt ab vom Programmablauf Kann nicht vom Compiler bestimmt werden Compiler legt fest, WO diese Größe zur Laufzeit zu finden ist Compiler erzeugt Code, der zur Laufzeit diese Größe bestimmt Speicherbedarf für Felder (arrays)
4 Speicherabbildung Prozeduren sind statisch geschachtelt und ggf. dynamisch rekursiv Variablen werden im Hauptprogramm bzw. in den Prozeduren deklariert, ebenso formale Prozedurparameter. In inneren Prozeduren kann auf globale, d.h. in umfassenden Prozeduren deklarierte Variablen zugegriffen werden. (Das Hauptprogramm sehen wir als umfassende Prozedur, die vom Betriebssystem aufgerufen wird.)
5 Instanzen Wenn Prozeduren lokale Variable haben und rekursiv sind gibt es mehrere Instanzen dieser Variablen gleichzeitig, und sie können globale Variable für andere Prozeduren sein...
6 Instanzen Wenn Prozeduren lokale Variable haben und rekursiv sind gibt es mehrere Instanzen dieser Variablen gleichzeitig, und sie können globale Variable für andere Prozeduren sein... In diesem Kapitel geht es um die Speicherverteilung für Variablen unter den Gesichtspunkten: korrekte Implementierung der Gültigkeitsbereiche Speicherökonomie effiziente Adressierung der Variablen
7 Prozedur-Deklarationen, Objekte, Aufrufe Bei Pascal-Prozeduren müssen wir drei Aspekte unterscheiden : der Text P einer Prozedurdeklaration ein Prozedurobjekt O P, welches durch Auswertung einer Prozedurdeklaration entsteht, und schließlich der Aufruf A OP eines Prozedurobjektes O P. Wenn wir bei Aufrufen A OP nicht am spezifischen Exemplar O P von P interessiert sind, so sprechen wir auch einfach von einer Inkarnation I P von P.
8 Variablen- Deklarationen und Exemplare Entsprechend unterscheiden wir bei Variablen die Variablendeklaration von dem Exemplar der Variablen, das durch Auswertung der Deklaration zur Programmlaufzeit entsteht.
9 Semantische Festlegungen (1) Festlegung, was in Pascal (wie auch ähnlichen Sprachen) die Wirkung eines Prozeduraufrufs, einer Prozedur-Rueckkehr etc. ist Der Prozeduraufruf setzt die Existenz einer Prozedurobjektes voraus. (Initial ist dies nur das Hauptprogramm.) Beim Aufruf A OP eines Prozedurobjektes O P entsteht eine neue Inkarnation von P. Es werden neue Exemplare E x der lokalen Variablen x (einschließlich formale Parameter) und neue Prozedurobjekte O Q entsprechend dem Deklarationsteil der Prozedurdeklaration P erzeugt. A OP heißt dann der statische Vorgänger dieser O Q und aller ihrer Aufrufe A OQ.
10 Semantische Festlegungen (2) Benutzung einer Variablen setzt voraus, dass ihre Deklaration sichtbar ist. Die Bindung von Namen zu Deklarationen ist statisch und hierarchisch, d.h. ist x ein angewandtes Auftreten eines Namens im Text der Prozedur P, so gibt es eine kleinste textuell umfassende Prozedurdeklaration P (einschließlich P), die eine Deklaration D x für x enthält. Andernfalls ist das Programm statisch-semantisch inkorrekt. D x in P heißt die am Auftreten von x in P sichtbare Deklaration von x.
11 Semantische Festlegungen (2) Benutzung einer Variablen setzt voraus, dass ihre Deklaration sichtbar ist. Die Bindung von Namen zu Deklarationen ist statisch und hierarchisch, d.h. ist x ein angewandtes Auftreten eines Namens im Text der Prozedur P, so gibt es eine kleinste textuell umfassende Prozedurdeklaration P (einschließlich P), die eine Deklaration D x für x enthält. Andernfalls ist das Programm statisch-semantisch inkorrekt. D x in P heißt die am Auftreten von x in P sichtbare Deklaration von x. Deklaration ist auch die Einführung eines formalen Prozedurparameters im Kopf von P.
12 Semantische Festlegungen (3) Statische Verweiskette Gemäß (1) hat jede Inkarnation I P (abgesehen vom Hauptprogramm) einen statischen Vorgänger I Q. Letzterer ist in jedem Fall eine Inkarnation der P textuell unmittelbar umfassenden Prozedur Q. Der statische Vorgänger von I Q ist dann eine Inkarnation I R der Q direkt umfassenden Prozedur R, usw. Durch diese statische Vorgängerbeziehung wird damit, ausgehend von I P, eine statische Verweiskette SV (I P ) = I P, I Q, I R,..., I Hauptprogramm definiert, in der genau eine Inkarnation jeder umfassenden Prozedur vorkommt.
13 Semantische Festlegungen (4) Zugriff auf Variablen Arbeiten wir einen Aufruf von P ab, so liegt die statische Verweiskette vor A OP, A OQ, A OR,..., A OHauptprogramm Ist nun D x in P die an diesem Auftreten von x in P sichtbare Deklaration für x, so ist beim Zugriff auf x während der Ausführung eines Aufrufs A OP von P dasjenige Exemplar E x von x gemeint, dass in der auf der statischen Vorgängerkette von A OP liegenden Inkarnation von P erzeugt wurde.
14 Semantische Festlegungen (5) Zugriff auf Variable x Definiert man die Prozedurschachtelungstiefe pst(p) einer Prozedur P durch { 0 falls P = Hauptprogramm pst(p) = pst(q) + 1 falls P in Q deklariert, so findet man diese Inkarnation gerade als (pst(p) pst(p ))-tes Element (Zählung mit 0 beginnend) der statischen Verweiskette von A OP. Es folgt ein Beispiel, das zeigt, dass die Unterscheidung zwischen Prozeduren und Prozedurobjekten (bzw. -exemplaren) notwendig ist.
15 Quellcode-Beispiel Beispiel : procedure Q (procedure R; y : integer); var x : integer; procedure P; begin writeln(x); x := 5 end; begin x := 1; if y = 0 then begin R; P end else begin x := 2; Q(P,0) end end Wir werden den Aufruf Q(..., 1) betrachten
16 Aktionsfolge beim Aufruf von Q(..., 1) Bei Aufruf Q(..., 1) entsteht folgende Sequenz von Aktionen : Q 1 (..., 1) { erster Aufruf Q 1 von Q; neue Exemplare x 1 von x und P 1 von P, Q 1 wird SV von P 1 } x 1 := 1 x 1 := 2 Q 2 (P 1, 0) { zweiter Aufruf Q 2 von Q; entstehen x 2 und P 2, Q 2 wird SV von P 2 } x 2 := 1 P 1 1 { erster Aufruf P 1 1 von P 1, da R an P 1 geb. } writeln(x 1 ) 2 { da Q 1 SV von P 1 1 } x 1 := 5 { P ist in Q 2 an P 2 gebunden } writeln(x 2 ) 1 { da Q 2 statischer Vorgänger von P 2 1 } x 2 := 5 P 1 2
17 Beobachtungen zum Beispiel Das Beispiel zeigt, dass die Unterscheidung von verschiedenen Exemplaren einer Prozedur, wie P 1 und P 2, notwendig ist, weil es für den Zugriff auf die globale Variable x wichtig zu wissen ist, zu welchem rekursiven Aufruf von Q das x gehört. Wenn wir uns also vorstellen, dass jede Inkarnation I Q von Q ein eigenes Exemplar von P erzeugt, dessen in Q deklarierte globale Variablen gerade an die von I Q erzeugten Exemplare gebunden sind, so ist dieses Bindungsproblem eindeutig gelöst. Die verschiedenen Exemplare einer Prozedur unterscheiden sich also im allgemeinen in der Bindung der globalen Variablen.
18 Kellerprinzip für Inkarnationen Die Inkarnationen lassen sich kellerartig verwalten: Ausgangspunkt: der statische Vorgänger A OP eines Aufrufs A OQ lebt moch zum Zeitpunkt des Aufrufs A OQ. insbesondere der für seine lokalen Variablen allokierte Speicher ist noch verfügbar. Umgekehrt, wird A OP beendet, so kann es danach auch keine Aufrufe A OQ mehr geben, die A OP als statischen Vorgänger haben. Dies liegt daran, dass O Q nur so an Aufrufstellen außerhalb P transportiert werden kann, indem O Q als aktueller Parameter über eine in P beginnende Folge von Prozeduraufrufen zu dieser Aufrufstelle geleitet wird. Solange wie diese Aufrufsfolge nicht vollständig beendet ist, lebt A OP noch. Auf Exemplare der lokalen Variablen in A OP kann nach Beendigung von A OP nicht mehr zugegriffen werden
19 Speicherverteilung Die Grundidee für eine ökonomische Speicherverteilung ist daher, den Speicher kellerartig mit den Prozeduraufrufen pulsieren zu lassen. Zu Beginn eines Aufrufs A OP werden neue Speicherzellen oben auf dem Keller für die neuen Exemplare der lokalen Variablen (einschließlich Parameter) reserviert. Bei Beendigung von A OP wird der Kellerpegel auf den alten Stand vor A OP zurückgesetzt. Der Keller enthält damit jederzeit: alle dynamischen Vorgänger, und darin enthalten, alle statischen Vorgänger des aktuellen Aufrufs.
20 Festlegung Variablenzugriff Obige Betrachtungen ergeben folgendes Schema für Variablenzugriffe: Sei x ein angewandtes Auftreten einer Variablen in der Prozedur P. Sei Q die Prozedur, die die zugehörige Deklaration enthält. Dann gilt: 1 pst(q) pst(p) wegen der Sichtbarkeitsregeln 2 Ist I P eine Inkarnation von P, so ist, falls pst(q) < pst(p), das (pst(p) pst(q))-te Element 1 in SV (I P ) die Inkarnation von Q, die das Exemplar von x erzeugt hat, auf welches in I P zugegriffen wird. 3 Für pst(p) = pst(q) ist P = Q und x eine lokale Variable (oder ein formaler Parameter) von P. 1 Zählung bei 0 beginnend
21 Festlegung Variablenzugriff (2) 3 Für diese in 2. bestimmte Inkarnation I Q von Q gibt es einen eigenen Speicherbereich für die lokalen Variablen. Eine Basisadresse BA IQ zeige auf eine feste Stelle in diesem Speicherbereich. Die Adresse des an x gebundenen Objekts ist dann Adresse x = BA IQ + RelAdr (Q,x) Dabei ist BA IQ für jede Inkarnation I Q spezifisch und damit eine dynamische Größe. RelAdr (Q,x) ist eine Adresse von x relativ zur Basisadresse einer jeden Inkarnation von Q. Sie ist nur von Q, nicht von I Q abhängig, also statisch, d.h. vom Übersetzer auszurechnen.
22 Statisch und dynamisch Zwei Grundbegriffe, die immer wieder auftauchen: Statische Größe: Zur Compilezeit bekannt und vom Compiler ermittelt Beispiel: Typ einer Variablen Dynamische Größe: Hängt ab vom Programmablauf Kann nicht vom Compiler bestimmt werden Compiler legt fest, WO diese Größe zur Laufzeit zu finden ist Compiler erzeugt Code, der zur Laufzeit diese Größe bestimmt Speicherbedarf für Felder (arrays)
23 Aufbau des Prozedurspeicherbereichs (activation area) Prozedur P auf Schachtelungstiefe k. (I P, I Pk 1,..., I P0 ) SV-Kette für eine Inkarnation I P von P. Activation area für die Inkarnation I P :
24 Verwendung des Display Die aktuelle BAsisadresse in BR zeigt immer auf den Anfang des Display. Damit werden die aktuellen Parameter mit negativem offsets relativ zu BA adressiert. Display und lokale Variablen werden dagegen mit positiven offsets angesprochen. Rücksprungadresse und dynamischer Vorgänger werden erst beim Rücksprung wieder gebraucht. Die Basisadresse der laufenden Inkarnation und das Ende des belegten Speichers werden in geeigneten Registern BR (Basisregister) und TOP (Stack Top) gehalten. 2 2 Gängige Alternative zum Display: nur die Basisadresse des statischen Vorgängers abspeichern und die Adressierung über eine Folge von Dereferenzierungen vornehmen.
25 Adressierungsschema für Variablen und Parameter BR + reladr x A x = M[BR + i] + reladr x für lokale Variablen und Parameter für glob. Var. und Par., die auf pst i deklariert sind Konvention: In einem Ausdruck wie BR + i steht BR für den Inhalt des Registers BR. M[a] ist der Inhalt der Speicherzelle mit Adresse a. Für die Adressierung benötigen wir also die statischen Größen Relativadresse reladr x und Prozedurschachtelungstiefe i, sowie die dynamisch bestimmte aktuelle Basisadresse BA IP, die über das Register BR adressiert wird.
26 Codeerzeugung für Umgebungswechsel: Überblick(1) Um den Laufzeitkeller der activation areas zu organisieren, muss Code an vier Stellen erzeugt werden. In der Reihenfolge seiner Ausführung (P ruft Q): an Aufrufstelle in P, vor dem Aufruf von Q nach dem Eintritt in Q vor dem Austritt aus Q nach der Rückkehr an die Aufrufstelle in P Dabei kann Q für P global, lokal oder ein formaler Parameter sein.
27 Codeerzeugung für Umgebungswechsel: Überblick(2) Notwendige Schritte Auswerten der Parameter Bestimmung des Sprungziels Retten aktuelle BA und Rückkehraddresse Aufbau des Displays Allokation von Variablen für A OQ Freigabe des lokalen Speichers Rücksprung Wiederherstellung der vorherigen Umgebung
7 Laufzeit-Speicherverwaltung
7.1 Grundlagen Bevor wir die Code-Generierung betrachten, müssen wir uns Gedanken über zur Laufzeit des zu generierenden Programms notwendige Aktivitäten zur Zuordnung und Freigabe von Speicherplatz machen.
Mehr3. Sprachkonzepte und ihre Übersetzungen
Übersetzung von dynamischen Feldern: var feld: array[u1..o1,,uk..ok] of integer; //ui, oi nicht alle konstant; z.b. Parameter Speicherbelegung: (Felddeskriptor) 0 fiktive Anfangsadresse 1 Feldgröße 2 Subtr.
MehrC.3 Funktionen und Prozeduren
C3 - Funktionen und Prozeduren Funktionsdeklarationen in Pascal auch in Pascal kann man selbstdefinierte Funktionen einführen: Funktionen und Prozeduren THEN sign:= 0 Funktion zur Bestimmung des Vorzeichens
Mehr1 pulsierender Speicher
1 pulsierender Speicher 1.1 Aufgabentyp Gegeben sei das folgende C-Programm: [...] (a) Geben Sie den Gültigkeitsbereich jedes Objektes des Programms an. (b) Stellen Sie die Rechnung des Programms für die
MehrSoftware Entwicklung 1. Rekursion. Beispiel: Fibonacci-Folge I. Motivation. Annette Bieniusa / Arnd Poetzsch-Heffter
Software Entwicklung 1 Annette Bieniusa / Arnd Poetzsch-Heffter AG Softech FB Informatik TU Kaiserslautern Rekursion Bieniusa/Poetzsch-Heffter Software Entwicklung 1 2/ 27 Motivation Beispiel: Fibonacci-Folge
MehrVorlesung Programmieren
Vorlesung Programmieren 17 Vom Programm zur Maschine Prof. Dr. Ralf H. Reussner Version 1.0 LEHRSTUHL FÜR SOFTWARE-DESIGN UND QUALITÄT (SDQ) INSTITUT FÜR PROGRAMMSTRUKTUREN UND DATENORGANISATION (IPD),
MehrDieÜbersetzung funktionaler Programmiersprachen
DieÜbersetzung funktionaler Programmiersprachen 107 11 Die Sprache PuF Wir betrachten hier nur die Mini-Sprache PuF( Pure Functions ). Insbesondere verzichten wir(vorerst) auf: Seiteneffekte; Datenstrukturen;
MehrVorlesung Programmieren
Vorlesung Programmieren 16 Vom Programm zur Maschine Dr.-Ing. Erik Burger Version 1.0 ARBEITSGRUPPE ARCHITECTURE-DRIVEN REQUIREMENTS ENGINEERING (ARE) INSTITUT FÜR PROGRAMMSTRUKTUREN UND DATENORGANISATION
MehrVorlesung Programmieren
Vorlesung Programmieren Speicherverwaltung und Parameterübergabe Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer Gültigkeitsbereich von
MehrProgrammieren I. Kapitel 12. Referenzen
Programmieren I Kapitel 12. Referenzen Kapitel 12: Referenzen Ziel: Die Wahrheit über Objekte Lebensdauer Speicherverwaltung Parameterübergabemechanismen in Methoden Gleichheiten, Kopien Arrays Speicherbereinigung
MehrImperative Programmierung in Java: Kontrollfluß II
2 Imperative Programmierung in va: Kontrollfluß II Martin Wirsing Ziele Lernen imperative Programme in va mit Zuweisung, Block, Fallunterscheidung, Iteration zu schreiben Lernen Kontrollflußdiagramme zur
MehrEWS, WS 2016/17 Pfahler I-1
Vorlesung und Übung Universität Paderborn Wintersemester 2016/2017 Dr. Peter Pfahler Funktionen EWS, WS 2016/17 Pfahler I-1 Funktionen Funktion: Rechenvorschrift mit einem Namen und ggf. formalen Parametern,
Mehr6. Funktionen, Parameterübergabe
6. Funktionen, Parameterübergabe GPS-6-1 Themen dieses Kapitels: Begriffe zu Funktionen und Aufrufen Parameterübergabearten call-by-value, call-by-reference, call-by-value-and-result in verschiedenen Sprachen
MehrInformatik II SS Inhalt. Objektlebensdauer (2/3) Objektlebensdauer (1/3)
Inhalt Informatik II SS 2004 Teil 6: Sprachen, Compiler und Theorie 5 Lebensdauer von Objekten Speichermanagement Weiterführende Spracheigenschaften und Bindungen Implementierung von statischen Gültigkeitsbereichen
MehrSpeicher und Adressraum
Linearer Speicher (Adressraum) Technische Universität München Speicher und Adressraum Freie Speicherhalde (Heap) Freier Speicherstapel (Stack) Globale Variablen Bibliotheksfunktionen Laufzeitsystem Programmcode
MehrInnere Klassen. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java
Innere Klassen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 13.06.07 G. Bohlender (IANM UNI Karlsruhe) Innere Klassen 13.06.07 1 / 11
MehrCrashkurs C++ - Teil 1
Crashkurs C++ - Teil 1 Intro Speicherverwaltung Variablen, Pointer, Referenzen Felder statische & dynamische Allozierung Birgit Möller & Denis Williams AG Bioinformatik & Mustererkennung Institut für Informatik
MehrÜbersetzung von Datenstrukturen
Übersetzung von Datenstrukturen bisher: Übersetzung von Mini-Java-Exp: Datenkeller zur Auswertung arithm. Ausdrücke Mini-Java: Sprünge zur Simulation von Kontrollstrukturen Mini-Java-FunProc: rekursive
MehrEinstieg in die Informatik mit Java
1 / 16 Einstieg in die Informatik mit Java Innere Klassen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 16 1 Einführung 2 Element-Klassen 3 Lokale Klassen 4 Anonyme Klassen
MehrTücken der dynamischen Bindung
Kapitel 3 Tücken der dynamischen Bindung 3.1 this-pointer Im Methodenaufruf o.m(x) ist o Bezugsobjekt wird als zusätzlicher Parameter übergeben: m(o,x) kann im Rumpf von m als this (bzw self) angesprochen
MehrStackmaschine; Speicheradressierung
Stackmaschine; Speicheradressierung Erweiterung um globalen Speicher (Heap, Halde) pro Speicherplatz eine Zahl. Notation ist als Array SP [0..]. Zugriff mittels Adresse (Index): eine Zahl i.a.: Zahlen
MehrProgrammierung mit C Zeiger
Programmierung mit C Zeiger Zeiger (Pointer)... ist eine Variable, die die Adresse eines Speicherbereichs enthält. Der Speicherbereich kann... kann den Wert einer Variablen enthalten oder... dynamisch
MehrKapitel 4. Kontrollstrukturen
Kapitel 4 Kontrollstrukturen Kontrollstrukturen 1 Ziele Kontrollstrukturen in imperativen Programmen kennenlernen und verstehen. Realisierung der Kontrollstrukturen in Java. Kontrollstrukturen 2 Anweisungen
MehrVorlesung: Rechnerstrukturen, Teil 2 (Modul IP7)
Vorlesung: Rechnerstrukturen, Teil 2 (Modul IP7) Vorlesung: Rechnerstrukturen, Teil 2 (Modul IP7) J. Zhang zhang@informatik.uni-hamburg.de Universität Hamburg AB Technische Aspekte Multimodaler Systeme
MehrEinführung in die Programmierung I. 5. Prozeduren. Stefan Zimmer
Einführung in die Programmierung I 5. Prozeduren Stefan Zimmer 19.11.2007 Prozedurdeklaration mit proc Eine (mächtigere) Alternative zur Funktionsdeklaration mit -> besteht aus dem Wort proc einer Sequenz
MehrStatic Links Displays
1 Speicherzuweisung auf dem Stack 2 Zugriff auf nichtlokale Daten auf dem Stack Static Links Displays Zusatzfolien Semantische Analyse Wintersemester 2008/09 1 / 19 Beispiel: Quicksort int a[11]; void
MehrFelder (1) Felder (Arrays) speichern viele Datenelemente des gleichen Typs. Auf einzelne Elemente kann über einen Index zugegriffen werden
Felder (1) Felder (Arrays) speichern viele Datenelemente des gleichen Typs. Auf einzelne Elemente kann über einen Index zugegriffen werden Dim arrayname (dim1,dim2, ) As Typ Bei eindimensionalen Feldern
MehrZeiger vom Typ void* benötigen weniger Speicher als andere Zeiger, da bei anderen Zeigertypen zusätzlich die Größe gespeichert werden muss.
EZS-Test Fragen zur Programmiersprache C Fragen entnommen aus SPiC 1 1. Ein Hauptprogramm und eine Interruptbehandlung greifen nebenläufig auf die Variable uint16_t foo zu. Das Hauptprogramm verwendet
MehrRechnerstrukturen Wintersemester 2002/03. Maschinensprache Opcode, Operanden, Adressierung Für Menschen schwer verdauliche Folgen von 0 und 1
(c) Peter Sturm, Universität Trier 1 Rechnerstrukturen 8. Assembler Für Hartgesottene Maschinensprache Opcode, Operanden, Adressierung Für Menschen schwer verdauliche Folgen von 0 und 1 Assembler Symbolische
MehrWerkzeuge zur Programmentwicklung
Werkzeuge zur Programmentwicklung B-15 Bibliothek Modulschnittstellen vorübersetzte Module Eingabe Editor Übersetzer (Compiler) Binder (Linker) Rechner mit Systemsoftware Quellmodul (Source) Zielmodul
MehrGrundlagen der Programmierung Prof. H. Mössenböck. 6. Methoden
Grundlagen der Programmierung Prof. H. Mössenböck 6. Methoden Parameterlose Methoden Beispiel: Ausgabe einer Überschrift class Sample { static void printheader() { // Methodenkopf Out.println("Artikelliste");
MehrKapitel 4. Kontrollstrukturen
Kapitel 4 Kontrollstrukturen Kontrollstrukturen 1 Ziele Kontrollstrukturen in imperativen Programmen kennenlernen und verstehen. Realisierung der Kontrollstrukturen in Java. Kontrollstrukturen 2 Anweisungen
MehrZeiger. C-Kurs 2012, 2. Vorlesung. Tino Kutschbach 10.
Zeiger C-Kurs 2012, 2. Vorlesung Tino Kutschbach tino.kutschbach@campus.tu-berlin.de http://wiki.freitagsrunde.org 10. September 2012 This work is licensed under the Creative Commons Attribution-ShareAlike
Mehr3. Methodik der Programmerstellung
3. Methodik der Programmerstellung 3.1 Vorgehen 3.2 Programmerstellung 3.2.1 Konventionen 3.2.2 Schlüsselwörter und Bezeichner 3.2.3 Fehlertypen 3.2.4 Programmierstil 3.3 Formaler Aufbau eines Pascal-Programms
MehrProgrammiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften
Programmiertechnik Teil 4 C++ Funktionen: Prototypen Overloading Parameter C++ Funktionen: Eigenschaften Funktionen (Unterprogramme, Prozeduren) fassen Folgen von Anweisungen zusammen, die immer wieder
MehrRekursive Funktionen (1)
Rekursive Funktionen (1) Rekursive Algorithmen Wenn Gesamtlösung durch Lösen gleichartiger Teilprobleme erzielbar: Rekursion möglich Beispiel: Fakultät einer ganzen Zahl n: n i n! = i=1 für n > 0 1 für
MehrÜbersetzung imperativer Sprachen Teil 2
Übersetzung imerativer Srachen Teil 2 Inhalt Grundbegriffe Sichtbarkeit von Namen und Bindung Seicherorganisation für Prozeduren Adressierung von Variablen n Globale Variablen n Prozeduraufruf Berechnung
MehrImplementieren von Klassen
Implementieren von Klassen Felder, Methoden, Konstanten Dr. Beatrice Amrhein Überblick Felder/Mitglieder (Field, Member, Member-Variable) o Modifizierer Konstanten Methoden o Modifizierer 2 Felder und
MehrRekursive Funktionen (1)
Rekursive Funktionen (1) Rekursive Algorithmen Wenn Gesamtlösung durch Lösen gleichartiger Teilprobleme erzielbar: Rekursion möglich Beispiel: Fakultät einer ganzen Zahl n: nn ii nn! = ii=1 für nn > 0
MehrBetriebssysteme Teil 3: Laufzeitsystem für Programme
Betriebssysteme Teil 3: Laufzeitsystem für Programme 23.10.15 1 Literatur [3-1] Stack: http://fbim.fh-regensburg.de/~hab39652/pg1/skriptum/ ausdruecke/maschinenmodell.html [3-2] https://de.wikipedia.org/wiki/dynamischer_speicher
MehrInformatik. Pointer (Dynamisch) Vorlesung. 17. Dezember 2018 SoSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 1
Informatik Vorlesung 08 Pointer (Dynamisch) 17. Dezember 2018 SoSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 1 Pointer (Zeiger) Dynam. Speicher Bisher: Speicherbedarf muss
MehrINHALTSVERZEICHNIS. 1 Strukturierte Datentypen. 1.1 String. 1.2 Array (Feld) 1.3 Record. 1.4 Set. 2. Erweiterungen in Pascal
INHALTSVERZEICHNIS 1 Strukturierte Datentypen 1.1 String 1.2 Array (Feld) 1.3 Record 1.4 Set 2. Erweiterungen in Pascal 2.1 Prozeduren und Funktionen 2.1.1 Prozeduren 2.1.2. Funktionen 2.2. File 2.3. Pointer
MehrCS1005 Objektorientierte Programmierung
CS1005 Objektorientierte Programmierung Bachelor of Science (Informatik) Funktionen / statische Methoden - Definition - Verwendung - Ausführung Seite 1 Th Letschert Funktionen: Definition und Verwendung
MehrAlgorithmen implementieren. Implementieren von Algorithmen
Algorithmen implementieren Implementieren von Algorithmen Um Algorithmen ablaufen zu lassen, muss man sie als Programm darstellen (d.h. implementieren) Wie stellt man die algorithmischen Strukturelemente
Mehr1 Funktionale vs. Imperative Programmierung
1 Funktionale vs. Imperative Programmierung 1.1 Einführung Programme einer funktionalen Programmiersprache (functional programming language, FPL) bestehen ausschließlich aus Funktionsdefinitionen und Funktionsaufrufen.
MehrJavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.
JavaScript JavaScript wird direkt in HTML-Dokumente eingebunden. Gib folgende Zeilen mit einem Texteditor (Notepad) ein: (Falls der Editor nicht gefunden wird, öffne im Browser eine Datei mit der Endung
MehrComputersysteme. Stacks Anwendung in der Assembler-Programmierung
Computersysteme Stacks Anwendung in der Assembler-Programmierung 1 Unterprogramme Betrachten wir zunächst folgendes Programm m_mod_n : /Berechne m modulo n für positive Integerwerte m und n. /Beim Programmstart
MehrC++ Teil 6. Sven Groß. 27. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 14
C++ Teil 6 Sven Groß 27. Mai 2016 Sven Groß (IGPM, RWTH Aachen) C++ Teil 6 27. Mai 2016 1 / 14 Themen der letzten Vorlesung Musterlösung A2 Wdh.: Zeiger und Felder Kopieren von Feldern Dynamische Speicherverwaltung
Mehr2. Programmierung in C
2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten Operatoren, Ausdrücke und Anweisungen Kontrollstrukturen (Steuerfluss)
MehrUnterprogramme. Unterprogramme
Unterprogramme Unterprogramme wichtiges Hilfsmittel für mehrfach benötigte Programmabschnitte spielen in höheren Programmiersprachen eine wesentliche Rolle in Assembler sind bestimmte Konventionen nötig
MehrProzeduren und Funktionen
OSZ Handel I - Gymnasiale Oberstufe (Abt. V) In Anlehnung an: Duden Informatik (3.Auflage, Dudenverlag, 2001, S. 477). Prozeduren und Funktionen Fach: Informatik Parameter sind Platzhalter in einer Prozedur
Mehrzu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme
Bisher Datentypen: einfach Zahlen, Wahrheitswerte, Zeichenketten zusammengesetzt Arrays (Felder) zur Verwaltung mehrerer zusammengehörender Daten desselben Datentypes eindimensional, mehrdimensional, Array-Grenzen
MehrProgrammieren 1 C Überblick
Programmieren 1 C Überblick 1. Einleitung 2. Graphische Darstellung von Algorithmen 3. Syntax und Semantik 4. Einstieg in C: Einfache Sprachkonstrukte und allgemeiner Programmaufbau 5. Skalare Standarddatentypen
MehrGeschachtelte Klassen
Geschachtelte Klassen Die Programmiersprache Java bietet nicht nur die Möglichkeit innerhalb von Klassen Datenfelder und Methoden zu definieren, sondern auch Klassen. Solche Klassen heißen en geschachtelte
MehrRepetitorium Informatik (Java)
Repetitorium Informatik (Java) Tag 6 Lehrstuhl für Informatik 2 (Programmiersysteme) Übersicht 1 Klassen und Objekte Objektorientierung Begrifflichkeiten Deklaration von Klassen Instanzmethoden/-variablen
MehrInhalte. Einführung. Algorithmus, Programmiersprache, Compiler und Linker. Kontrollstrukturen. Präprozessoranweisungen. Libraries
INFAS.1 Informatik I Einführung Algorithmus, Programmiersprache, Compiler und Linker Datentypen Attribute, Speicherklassen und Namensbereiche Kontrollstrukturen Präprozessoranweisungen Libraries Funktionen
MehrAlgorithmen und Datenstrukturen
Algorithmen und Datenstrukturen Dynamische Datenobjekte Pointer/Zeiger, Verkettete Liste Eigene Typdefinitionen 1 Zeigeroperatoren & und * Ein Zeiger ist die Speicheradresse irgendeines Objektes. Eine
MehrPräzedenz von Operatoren
Präzedenz von Operatoren SWE-30 Die Präzedenz von Operatoren bestimmt die Struktur von Ausdrücken. Ein Operator höherer Präzedenz bindet die Operanden stärker als ein Operator geringerer Präzedenz. Mit
MehrSpeicherklassen (1) Lokale Variablen
Speicherklassen (1) Lokale Variablen Lokale Variablen beschränken sich auf die Funktionen, in denen sie definiert werden Sind in der Funktion gekapselt können also nur in der Funktion verändert werden
MehrAssembler Unterprogramme
Assembler Unterprogramme Dr.-Ing. Volkmar Sieh Department Informatik 3: Rechnerarchitektur Friedrich-Alexander-Universität Erlangen-Nürnberg SS 2008 Assembler Unterprogramme 1/43 2008-06-03 Unterprogramme
MehrÜbersetzungsschema MMS -> 3AC
Übersetzungsschema MMS -> 3AC Vorbereitungen - Tabellen TypeTab Index Type nof_items itemsize basetype fields name 1 integer 2 float 3 bool 4 array 30 4 1 a 5 pointer 4 aref...... Vorbereitungen - Tabellen
Mehr6 Speicherorganisation
Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen Speicherbereich für
MehrGliederung. n Teil I: Einleitung und Grundbegriffe. n Teil II: Imperative und objektorientierte Programmierung
Gliederung n Teil I: Einleitung und Grundbegriffe l 1. Organisatorisches l 2. Grundlagen von Programmiersprachen n Teil II: Imperative und objektorientierte Programmierung l 1. Grundelemente der Programmierung
MehrAngewandte Mathematik und Programmierung
Angewandte Mathematik und Programmierung Einführung in das Konzept der objektorientierten Anwendungen zu wissenschaftlichen Rechnens mit C++ und Matlab SS2013 Inhalt Bis jetzt: Heute: Entwicklungsumgebung
Mehrtdaten=record name : string; alter: integer; groesse:real; end;
tdaten=record - Zugriff auf Felder (name, alter, groesse) über externe Methoden, die für jede Unit und jede Variable dieses Records neu geschrieben werden müssen - Zugriff nicht kontrollierbar (immer Schreib-
Mehr2. Programmierung in C
2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten, Operatoren und Ausdrücke Anweisungen und Kontrollstrukturen (Steuerfluss)
Mehrpublic class Test extends MiniJava { public static void main (String [] args) { write(args[0]+args[1]); } } // end of class Test
Manche Funktionen, deren Ergebnistyp void ist, geben gar keine Werte zurück im Beispiel: write() und main(). Diese Funktionen heißen Prozeduren. Das Hauptprogramm hat immer als Parameter ein Feld args
MehrC++ - Einführung in die Programmiersprache Zeiger, Referenzen und Strukturen. Leibniz Universität IT Services Anja Aue
C++ - Einführung in die Programmiersprache Zeiger, Referenzen und Strukturen Leibniz Universität IT Services Anja Aue Zeiger (Pointer) Verweis auf eine Speicherstelle. Speicherung einer Speicheradresse.
MehrJava Einführung Methoden. Kapitel 6
Java Einführung Methoden Kapitel 6 Inhalt Deklaration und Aufruf von Methoden Lokale und globale Namen (Bezeichner) Sichtbarkeit und Lebensdauer von Variablen in Methoden Überladen von Methoden 2 Methoden
MehrJava Methoden. Informatik 1 für Nebenfachstudierende Grundmodul. Kai-Steffen Hielscher Folienversion: 1. Februar 2017
Informatik 1 für Nebenfachstudierende Grundmodul Java Methoden Kai-Steffen Hielscher Folienversion: 1. Februar 2017 Informatik 7 Rechnernetze und Kommunikationssysteme Inhaltsübersicht Kapitel 3 - Java
MehrBeispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung
Beispiele für Ausdrücke Der imperative Kern Deklarationen mit Initialisierung Variablendeklarationen int i = 10; int j = 15; Beispiele für Ausdrücke i+j i++ i & j i j [] [static]
MehrC++ Teil 7. Sven Groß. 30. Nov Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 13
C++ Teil 7 Sven Groß 30. Nov 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 7 30. Nov 2015 1 / 13 Themen der letzten Vorlesung Zeiger, Felder (Wdh.) dynamische Speicherverwaltung Sven Groß (IGPM, RWTH Aachen)
MehrKonzepte der Programmiersprachen
Konzepte der Programmiersprachen Sommersemester 2010 4. Übungsblatt Besprechung am 9. Juli 2010 http://www.iste.uni-stuttgart.de/ps/lehre/ss2010/v_konzepte/ Aufgabe 4.1: Klassen in C ++ Das folgende C
MehrEinführung in die Programmierung
Skript zur Vorlesung: Einführung in die Programmierung WiSe 2009 / 2010 Skript 2009 Christian Böhm, Peer Kröger, Arthur Zimek Prof. Dr. Christian Böhm Annahita Oswald Bianca Wackersreuther Ludwig-Maximilians-Universität
MehrÜbung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil
MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++ 1. Teil 11. April 2012 Organisatorisches MÜNSTER Übung zur Vorlesung Wissenschaftliches
MehrKapitel 5 Deklaration und Sichtbarkeitsbereich
Kapitel 5 Deklaration und Sichtbarkeitsbereich Korbinian Molitorisz IPD Tichy Lehrstuhl für Programmiersysteme KIT die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH) Deklarationen:
Mehr(Aufgaben zu Wertzuweisungen siehe Vorlesungsbeilage S. 49)
Anweisungen Eine Anweisung ist eine in einer beliebigen Programmiersprache abgefaßte Arbeitsvorschrift für einen Computer. Jedes Programm besteht aus einer bestimmten Anzahl von Anweisungen. Wir unterscheiden
MehrMethoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom
Einstieg in die Informatik mit Java, Vorlesung vom 2.5.07 Übersicht 1 2 definition 3 Parameterübergabe, aufruf 4 Referenztypen bei 5 Überladen von 6 Hauptprogrammparameter 7 Rekursion bilden das Analogon
MehrKlassenvariablen, Klassenmethoden
Einstieg in die Informatik mit Java, Vorlesung vom 11.12.07 Übersicht 1 Klassenmethoden 2 Besonderheiten von Klassenmethoden 3 Aufruf einer Klassenmethode 4 Hauptprogrammparameter 5 Rekursion Klassenmethoden
MehrEinführung in die Funktionale Programmierung
Einführung in die Funktionale Programmierung Am Beispiel von OCaml Michael Dienert 12. Oktober 2018 Inhaltsverzeichnis 1 Welche funktionale Sprache wählen wir? 2 1.1 Welche funktionale Sprache soll ich
MehrAlgorithmen und Datenstrukturen
Algorithmen und Datenstrukturen Tafelübung 03 Vererbung, Polymorphie, Sichtbarkeit, Interfaces Clemens Lang T2 11. Mai 2010 14:00 16:00, 00.152 Tafelübung zu AuD 1/26 Klassen und Objekte Klassen und Objekte
MehrMikrocomputertechnik. Unterprogramm
Unterprogramm Ein Teilproblem wird entweder zur mehrmaligen Verwendung oder zur Programmstrukturierung als Unterprogramm codiert. Ein Unterprogramm wird von einem übergeordneten Programm (Hauptprogramm)
MehrVorlesung Datenstrukturen
Vorlesung Datenstrukturen Lineare Listen (1) Einfach verkettete Listen Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 148 Wiederholung Felder Vorteil Der Zugriff auf ein beliebiges
MehrHeap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen
Heap vs. vs. statisch Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen
MehrGrundlagen der Informatik 2 Modul Systemnahe Programmierung in C (SPiC) Klausur am 9. April 2008
Grundlagen der Informatik 2 Modul Systemnahe Programmierung in C (SPiC) WS 2007/2008 Dr.-Ing. Jürgen Kleinöder Friedrich-Alexander-Universität Erlangen-Nürnberg Informatik 4 (Verteilte Systeme und Betriebssysteme)
Mehr1 Klassen und Objekte
1 Klassen und Objekte Datentyp - Spezifikation des Typs von Datenobjekten Datenstruktur - logische Ordnung von Elementen eines Datentyps - zur (effizienten) Speicherung, Verwaltung, Zugriff - auf die Elemente
Mehrzu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme
Bisher Datentypen: einfach Zahlen, Wahrheitswerte, Zeichenketten zusammengesetzt Arrays (Felder) zur Verwaltung mehrerer zusammengehörender Daten desselben Datentypes eindimensional, mehrdimensional, Array-Grenzen
MehrEinführung in die Programmiersprache C
Einführung in die Programmiersprache C 4 Storage classes Alexander Sczyrba Robert Homann Georg Sauthoff Universität Bielefeld, Technische Fakultät Compilation units Compilierung eines mehrteiligen Programms:
MehrHeap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen
Heap vs. vs. statisch Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen
MehrEinführung in die Programmiersprache C
Einführung in die Programmiersprache C 4 Storage classes Alexander Sczyrba Robert Homann Georg Sauthoff Universität Bielefeld, Technische Fakultät Compilation units Compilierung eines mehrteiligen Programms:
MehrArray-Zuweisungen. Array-Zuweisungen können über die Position, den Namen oder gemischt erfolgen.
Array-Zuweisungen Array-Zuweisungen können über die Position, den Namen oder gemischt erfolgen. Ausschnitte (slices) werden über die Indizes gebildet. Mehrdimensionale Arrays Mehrdimensionale Arrays werden
MehrProgrammiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny
Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny 9. Zeiger Arbeitsspeicher / Adressen Der Arbeitsspeicher des Computers (RAM) besteht aus einem Feld von Speicherzellen, beginnend bei Adresse
Mehr2 Eine einfache Programmiersprache
2 Eine einfache Programmiersprache Eine Programmiersprache soll Datenstrukturen anbieten Operationen auf Daten erlauben Kontrollstrukturen zur Ablaufsteuerung bereitstellen Als Beispiel betrachten wir
MehrEinstieg in die Informatik mit Java
1 / 18 Einstieg in die Informatik mit Java Klassenvariablen, Klassenmethoden Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 18 1 Klassenmethoden 2 Besonderheiten von Klassenmethoden
MehrÜbung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil
MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++ 1. Teil 11. April 2012 Organisatorisches MÜNSTER Übung zur Vorlesung Wissenschaftliches
Mehr6. Unterprogramme 6-1
6. Unterprogramme 6.1 Prozeduren und Funktionen 6.2 Deklaration und Aufruf 6.3 Call-by-Value / Call-by-Reference 6.4 Standardfunktionen in C 6.5 Gültigkeitsbereich von Namen 6.6 Rekursion 6. Unterprogramme
Mehr