Namensliste Teil der semantischen Aktionen

Slides:



Advertisements
Ähnliche Präsentationen
Einführung in die Programmiersprache C/C++
Advertisements

Klassen - Verkettete Liste -
Ausdrücke bezeichnen Elemente eines Datentyps induktive Definition:
12. Iteration und Rekursion
DINAMISCHE STRUKTUREN FACHBEGRIFFE 1. DER POINTERDER POINTER 2. DER BUFFERDER BUFFER 3. DER KNOTENDER KNOTEN DIE EINFACHVERKETTETE LISTE DEFINITION DEFINITION.
1 Computergestützte Verifikation Probleme bei der Softwareverifikation 1.komplexe Datentypen und Expressions 2.Pointer und dynamische Datenstrukturen.
Java: Dynamische Datentypen
FH-Hof Indirekte Adressierung Richard Göbel. FH-Hof Einfache Speicherung von Daten Eine "einfache" Deklaration definiert direkt eine Speicherplatz für.
Java: Grundlagen der Sprache
Strukturen. In einer Struktur kann eine beliebige Anzahl von Komponenten (Daten) mit unterschiedlichen Datentypen (im Gegensatz zu Feldern) zusammengefaßt.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 7 Claudio Moraga, Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
6 Folgen (Teil II - Datenstrukturen und Algorithmen)
Imperative Programmierung
Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:
Weiteres Programm Studium des Breitendurchlaufs Hierzu
Einfach verkettete Listen
Term {abstrakt} alsText(){abstrakt} berechnen(Belegung){abstrakt} Zahl alsText() berechnen(Belegung) double wert Variable alsText() berechnen(Belegung)
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
IT2 – WS 2005/20061Oct 10, 2005 Externes Verhalten – Quelltext (source code) Durch Aufrufe der Konstruktoren und Methoden kann das externe Verhalten (=die.
Repetitorium PG : Gültigkeit, Sichtbarkeit & Operatorüberladung FH-Darmstadt, FB Informatik.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmiersprache C 3.Tag Institut für Mathematische Optimierung - Technische Universität Braunschweig.
Einführung in die Programmierung Wintersemester 2011/12 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
BIT – Schaßan – WS 02/03 Basisinformationstechnologie HK-Medien Teil 1, 11.Sitzung WS 02/03.
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Grundlagen der Informatik 4 Lehrstuhl für Betriebssysteme 1 Wie werden Funktionen realisiert? Beispiel: int maximum(int x, int y) { int j = x; if (y >
Einführung in die Programmiersprache C 4
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Programiersprache Mustafa SÖYLEMEZ e
Arduino Kurs Abend 2.
Grundlagen Wissenschaftlichen Arbeitens Hilal Tekoglu
EPROG Tutorium #3 Philipp Effenberger
MODULA-2.
Agenda für heute, 12. Mai, 2005 ProzedurenProzeduren Funktionsprozeduren Prozedurparameter Lokale und globale Variablen Datentypen: Ordinaltypen.
Programmieren in C Grundlagen C 2
Hochschule Fulda – FB ET Sommersemester 2014
Programmieren in C Grundlagen C 2
Computergestützte Verifikation
Kurzreferat über Funktionen und Prozeduren Von Alexander RothHomepage:
A) Erklären Sie den Datentyp char. b) Erklären Sie den Datentyp Struct c) Erklären Sie die Wirkungsweise des Operators & bei Anwendung im Zusammenhang.
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
1 // Laengste Zeile bestimmen // // Liest die Eingabe Zeichen fuer Zeichen, bis // das erscheint. // Die laengste Zeile wird ausgegeben (bei.
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
The Programming Language Pascal
Objektorientierte (OO) Programmierung
1 // Verkettete Liste 2 // demonstriert verkettete Listen und // Rekursion // (Einfügen am "Fuß") // #include struct Liste { int Element; Liste *weiter;
Variablen und Operatoren. C++ Teil 2: Grundstrukturen Variablen Operatoren Kontrollstrukturen Funktionen Header-Dateien Pointer und Referenzen.
Funktionen (Zweck und Eigenschaften) Funktionen sind Unterprogramme, die einen bestimmten Zweck erfüllen Sie zerlegen Probleme in kleine, abgeschlossene.
Strukturen (Eigenschaften) Strukturen dienen zur Zusammenfassung mehrerer Komponenten verschiedener Typen zu einer Einheit, die dann mit gemeinsamen Namen.
Pointer. * und &  Bei der Definition int var1; ○ // „normale“ Variable int *var2; ○ // Zeiger auf einen Integer int *var2 = NULL; ○ // … incl. Initialisierung.
Codegenerierung Code wird nacheinander für jede Prozedur gesondert erzeugt. Code wird innerhalb von Block für statement generiert. Ist der Code für eine.
Tabellengesteuerte Verfahren
Datentypen: integer, char, string, boolean
Die virtuelle Maschine in der Literatur
Datentypen: integer, char, string, boolean
Parser Der Teil eines Compilers, der prüft, ob die Folge der Token einen gültigen Satz der Sprache bildet. Unterscheidung nach der Strategie in TopDown.
Referenzen In c kennen wir gewöhnliche Variablen und Pointer.
Einführung in die Programmierung
SS 04 Christiane Rauh Christian Hellinger
Implementieren von Klassen
The Programming Language Pascal
 Präsentation transkript:

Namensliste Teil der semantischen Aktionen Führt eine Liste über alle gültigen Bezeichner und die Eigenschaften der benannten Sprachkonstrukte Realisiert nebenbei die Gültigkeitsbereiche von Bezeichnern Operationen der Namensliste: einfügen eines Bezeichners in die aktuelle Namensliste lokale Suche eines Bezeichners in der aktuellen Namensliste globale Suche eines Bezeichners „von innen nach außen“

Implementationsvarianten Namensliste für jede Prozedur Jede Prozedur verfügt über ihre eigene Namensliste. Über Eltern-Kind-Beziehungen ist die globale Suche von „innen nach außen“ möglich. Pulsierender Keller Alle Namen werden in einem Keller geführt. Anfang einer jeden lokalen Namensliste muss mitgeführt werden.

Namenslisteneintrag typedef struct { Member eines Namenslisteneintrags tKz Kz; short IdxProc; void* pObj; int Len; char* pName; }tBez; Member eines Namenslisteneintrags (KzName) Prozedurnummer Pointer auf benanntes Objekt (Var, Const Proc) Pointer auf Name Kennzeichen und Länge sind redundant

Anmerkungen zur Variablenbeschreibung Variablen werden zur Laufzeit im Stack angelegt In jeder neuen Prozedur beginnt die Adressierung der Variablen mit 0 Mit jeder neuen Variablen wird ein Variablenzähler (SpzzVar) um 4 erhöht 1. Variable: relAddr=0 2. Variable: relAddr=4 3. Variable: relAddr:=8 . . .

Variablenbeschreibung Member Variablenbeschreibung KzVar Displacement typedef struct tVAR { tKz Kz; int Dspl; }tVar;

Anmerkungen zur Konstantenbeschreibung Alle Konstanten werden in einem Konstantenblock gesammelt, der am Ende an den generierten Code angehängt wird. Die Konstanten sind 4 Byte groß Die Konstanten werden indiziert 1. Konstante: ConstBlock[0] 2. Konstante: ConstBlock[1]

Konstanten am Ende des Codes 0000: 1A EntryProc 0018,0000,0004 0007: 04 PushAdrVarMain 0000 000A: 06 PushConst 0000 000D: 0A VzMinus 000E: 06 PushConst 0001 0011: 06 PushConst 0002 0014: 0E Mul 0015: 0C Add 0016: 07 StoreVal 0017: 17 ReturnProc Const 0000:0001 Const 0001:0002 Const 0002:0003 var a; begin a:=-1+2*3 end. 0000 01 00 00 00 1a 18 00 00 00 04 00 04 00 00 06 00 |................| 0010 00 0a 06 01 00 06 02 00 0e 0c 07 17 01 00 00 00 |................| 0020 02 00 00 00 03 00 00 00 |........|

Konstantenbeschreibung typedef struct tCONST { tKz Kz; long Val; int Idx; }tConst; Member der Konstantenbeschreibung KzConst Wert der Konstanten Index der Konstanten im ConstBlock

Anmerkungen zur Procedurebeschreibung Jede Prozedur und das Hauptprogramm erhalten eine Nummer, das Hauptprogramm hat die Nummer 0 Die Nummern werden fortlaufend vergeben Jede Prozedurbeschreibung enthält eine Namensliste mit den lokalen Namen Der Name einer Prozedur steht dabei immer in der übergeordneten Namensliste

Prozedurbeschreibung KzProc Prozedurnummer Pointer auf die Prozedurbeschreibung der Parentprozedur Lokale Namensliste der prozedur Speicherplatzzuordnungs zähler für Variable typedef struct tPROC { tKz Kz; short IdxProc; struct tPROC*pParent; tList *pLBez; int SpzzVar; }tProc;

Namensliste (Schnappschuss) vereinfachte Darstellung KzProc NULL KzBez “C“ NULL KzBez “A“ NULL KzBez “B“ NULL KzBez “P1“ NULL KzConst 0 (value) 0 (idx) KzVar 0 (Displ) KzVar 4 (Displ) KzProc 1 NULL KzBez 1 “V1“ KzVar 0 (Displ) NULL KzBez 1 “V2“ KzVar 4 (Displ) const c=0; var a,b; Procedure p1; var v1,v2; ... end; procedure p2; var x1,x2; . . .

KzProc NULL KzBez “C“ NULL KzBez “A“ NULL KzBez “B“ NULL KzBez “P1“ NULL KzBez “P2“ NULL KzConst 0 (value) 0 (idx) KzVar 0 (Displ) KzVar 4 (Displ) KzProc 1 NULL const c=0; var a,b; Procedure p1; var v1,v2; ... end; procedure p2; var x1,x2; . . . NULL KzBez 2 “X1“ KzVar 0 (Displ) NULL KzBez 2 “X2“ KzVar 4 (Displ) KzProc 2

Realisierung als Stack X1 KzVar RelAdr=0 X2 RelAdr=4 C B P1 Val=0 Index=0 A P2 IdxProc=1 KzProc (pParent) KzConst pParent=0 IdxProc=0 const c=0; var a,b; Procedure p1; var v1,v2; ... end; procedure p2; var x1,x2; . . .

Funktionen zur Namensliste tBez* createBez(char*pBez); tConst* createConst(long Val); tConst* searchConst(long Val); int createVar(void); tProc* createProc(tProc*pParent); tBez* searchBez(tProc*pProc,char* pBez); tBez* searchBezGlobal(char* pBez);

“const“ ident “=“ numeral “;“ “var“ “procedure“ block statement (bl1) (bl2) (bl3) (bl4) (bl5) (bl6) “,“

'.' 'CONST' 'VAR' 'PROCEDURE' numeral '(' expression ')' ident '-' block '.' ident ':=' expression 'IF' condition 'THEN' statement 'WHILE' 'DO' 'BEGIN 'END' ';' 'CALL' '?' '!' 'CONST' ident '=' numeral ';' 'VAR' 'PROCEDURE' block statement ',' numeral '(' expression ')' ident '-' term '+' 'odd' expression '='|'#'|'<'|'>' '<='|'>=' factor '*' '/'