Quelltextähnlichkeit

Größe: px
Ab Seite anzeigen:

Download "Quelltextähnlichkeit"

Transkript

1 Quelltextähnlichkeit Tobias Jamin Universität Bremen Fachbereich 3 Mathematik und Informatik tjamin@tzi.de Abstrakt Programm-Transformationen ändern den Quelltext eines Programms. Bei den Transformationen sollen nur die Stellen im Quelltext verändert werden, die von den Transformationen betroffen sind. Der restliche Quelltext soll nicht verändert werden. Diese Eigenschaft wird als Quelltextähnlichkeit bezeichnet. Warum ist Quelltextähnlichkeit überhaupt so wichtig und ist es schwer, eine hohe Quelltextähnlichkeit zu erzielen? Dieser Artikel gibt Antworten auf diese Fragen und beschäftigt sich mit der Problematik, die mit der Quelltextähnlichkeit verbunden ist. Es werden Lösungsansätze vorgestellt, mit denen das Projekt Arte-Fakt versuchen wird, eine möglichst hohe Quelltextähnlichkeit zu erzielen. 1. Sind Syntax und Semantik alles? Die dokumentarische Struktur von Quelltext Ein Programm muss den syntaktischen Ansprüchen der zugrunde gelegten Programmiersprache genügen, damit es sich kompilieren lässt. Neben der Syntax muss auch die Semantik stimmen. Was genau sind aber Syntax und Semantik und sind sie überhaupt für Quelltextähnlichkeit wichtig? 1.1. Syntax & Semantik Syntax ist ein Begriff aus der Linguistik, also der Sprachwissenschaft. Sie gibt mit Regeln an, wie Wörter zu größeren Einheiten, wie Phrasen (Teilsätzen) und dann Sätzen, zusammengesetzt werden. In der Informatik wird eine Sprache durch eine Grammatik (mit Hilfe von terminalen und nicht-terminalen Symbolen) definiert. Beispiele sind die BNF und verschiedene Transformations-Anwendungen, die zum Teil eigene Sprachen zum definieren von Grammatiken benutzen (Beispiel TXL). Auch der Begriff der Semantik kommt aus der Linguistik. Die Semantik ist das Teilgebiet, das sich mit dem Sinn und der Bedeutung von Sprache beschäftigt. Die formale Semantik ist ein Teilgebiet der theoretischen Informatik, die sich mit der Korrektheit von Computerprogrammen beschäftigt. Damit sich Quelltext zu einem ausführbaren Programm kompilieren lässt, muss es syntaktisch korrekt sein, also der Grammatik der gewählten Programmiersprache genügen. Semantische Fehler machen sich dagegen erst zur Laufzeit durch ungewolltes Verhalten oder Abstürze der Anwendung bemerkbar. Ein ungültiger Cast lässt sich beispielsweise kompilieren, führt beim Ausführen allerdings zu einem Laufzeitfehler. Die Bedeutung von Syntax und Semantik bekommt jeder Informatik-Student schon im Grundstudium vermittelt. Diese beiden Begriffe sind allerdings im Zusammenhang mit der Thematik Quelltextähnlichkeit nicht besonders ausschlaggebend. Erst die dokumentarische Struktur von Quelltext gibt der Quelltextähnlichkeit ihre hohe Bedeutung Dokumentarische Struktur Unter die dokumentarische Struktur fallen alle Eigenschaften von Quelltext, die das Erfassen und Verstehen von diesem beeinflussen. Einen großen inhaltlichen Beitrag liefern dazu Zeilensowie Blockkommentare (Abbildung 1).

2 // Zeilenkommentar /* Blockkommentar (über mehrere Zeilen) Abbildung 1: Kommentare Neben den Kommentaren entsteht der weitaus größere Teil der dokumentarischen Struktur durch die Nutzung von Leerzeichen, Tabs und Zeilenumbrüchen. Kurz gesagt ist dieser Teil der dokumentarischen Struktur das Arrangement von Sprachelementen der jeweiligen Programmiersprache, also das Layout des Quelltextes. Mit Arrangement ist beispielsweise das Einrücken eines Anweisungsblocks in eine bestimmte Tiefe gemeint. Zum Gestalten von Quelltext werden so genannte white spaces benutzt. Unter dem Begriff white spaces werden folgende Elemente zusammengefasst: Zeilenumbrüche Leerzeichen Tabulatoren White spaces sind im Allgemeinen keine Elemente der Grammatik von Programmiersprachen. Dazu muss erwähnt werden, dass es Ausnahmen gibt, wie z. B. die Programmiersprache whitespace [2], welche in diesem Artikel jedoch ignoriert werden. Neben dem Layout des Quelltexts und den Kommentaren zählt die Benennung von Elementen (wie Klassen, Methoden, Variablen usw.) ebenfalls zur dokumentarischen Struktur. Durch bündiges Ausrichten von Datentyp, Variablenbezeichner und zugewiesenen Werten in derselben Spalte kann die Leserlichkeit des Quelltextes, durch den gezielten Einsatz von Leerzeichen, deutlich erhöht werden (Abbildung 2). int a = 5; int bcd = 6; String efg = hallo welt ; Abbildung 2: Beispiel Leerzeichen/Tabulatoren (1) Neben der Leserlichkeit verbessert der gezielte Einsatz von Leerzeichen ebenfalls die dokumentarische Struktur (Abbildung 3). if (condition) expression; else expression; Abbildung 3: Beispiel Leerzeichen/Tabulatoren (2) Durch Zeilenumbrüche werden nicht nur überlange Zeilen vermieden. Die Leserlichkeit kann erhöht werden ebenso wie, z. B. durch den Einsatz von Zeilen- Kommentaren hinter jedem Parameter, die dokumentarische Struktur verbessert werden kann. Object.Method(ParameterWithLongIdentifier1, ParameterWithLongIdentifier2, ParameterWithLongIdentifier3); Abbildung 4: Beispiel Zeilenumbrüche (1) Die Bedeutung von Leerzeilen kann gar nicht überbewertet werden [2]. Das Beispiel in Abbildung 5 zeigt, wie die Zusammengehörigkeit von Anweisungen durch das Vermeiden von Zeilenumbrüchen dargestellt werden soll. Der Quelltext ist jedoch nicht besonders leserlich. int a = 2 int b = 3 int temp=a; a=b; b=temp; if (a Abbildung 5: Beispiel Zeilenumbrüche (2a) Das modifizierte Beispiel in Abbildung 6 zeigt, wie die Zusammengehörigkeit von Anweisungen durch den Einsatz von Leerzeilen deutlich gemacht werden kann. int a = 2 int b = 3 int temp=a; a=b; b=temp; if (a Abbildung 6: Beispiel Zeilenumbrüche (2b) 2. Kommentar-Problematik Kommentare bereiten bei der Transformation von Quelltext große Probleme. Der Grund dafür ist, dass Kommentare im Allgemeinen keine Bestandteile der Grammatik der Programmiersprachen sind. Der Lexer bzw. der Präprozessor entfernt alle Kommentare, bevor der Quelltext zum Parser durchgereicht wird, welcher die syntaktische Überprüfung durchführt. Aus diesem Grund werden Kommentare auch zu den white spaces gezählt Durch dieses Vorgehen ist es nicht für den

3 Compiler nötig, das Konstrukt Kommentar in die Grammatik aufzunehmen. Für Transformations- Anwendungen wäre es eine enorme Erleichterung, da der Umgang mit Kommenten erleichtert bzw. ermöglicht werden würde. Wären Kommentare Bestandteile der Grammatik, wäre es ohne Probleme möglich, die Kommentare bestimmten Zeilen oder Konstrukten zuzuordnen. An dem Quelltextbeispiel in Abbildung 7 erkennt man recht intuitiv, welcher Kommentar zu welchem Quelltext-Block gehört. Das automatisierte Ermitteln der Zuordnungen ist jedoch nicht so einfach möglich. Wie könnte eine automatische Zuordnung vorgehen? Der erste Kommentar completely before steht vor einer langen If-Else-If Kaskade. Beschreibt der Kommentar also den kompletten Anweisungsblock? Am Inhalt im Zusammenhang mit der ersten Bedingung können wir erkennen, dass der Kommentar nur zu dem ersten Teil des langen Abschnittes gehört. Wenn wir uns die weiteren Kommentare und ihre Positionen aus einem rein syntaktischen Blickwinkel anschauen, scheinen die Kommentare in die jeweils vorhergehenden Anweisungsblöcke zu gehören, da sie sich innerhalb der diese Blöcke umschließenden geschweiften Klammern befinden. Der letzte Kommentar kann überhaupt keiner Quelltext-Zeile zugeordnet werden. // completely before if (delend < start) { // overlap start } else if (pos <= start && delend < end) { // completely overlaps } else if (pos <= start && delend >= end) { // completely after } else { // do nothing } Abbildung 7: Intuitive Zuordnung von Kommentaren Weiter Probleme ergeben sich bei der Nutzung von Zeilenkommentaren als Blockkommentare. Das Beispiel in Abbildung 8 zeigt, wie über mehrere Zeilen mit einzelnen Zeilenkommentaren ein (inhaltlicher) Blockkommentar entsteht. Ein automatisches Ermitteln der Zusammengehörigkeit ist nicht möglich, da der Inhalt der Kommentare, also menschliche Sprache, analysiert werden müsste. Abbildung 8: Blockkommentar vs. Zeilenkommentar (1) In Abbildung 9 ist es ähnlich wie in Abbildung 8. Statt die einleitenden und abschließenden Zeichen für Blockkommentare zu benutzen, entsteht ein Blockkommentar aus Zeilenkommentaren. // Dies ist ein Beispiel mit einem // Blockkommentar aus // zusammengesetzten Zeilenkommentaren Abbildung 9: Blockkommentar vs. Zeilenkommentar (2) Was ist mit dem nächsten Beispiel in Abbildung 10? Handelt es sich hier um einen zusammenhängenden Kommentarblock oder um zwei einzelne Kommentare? Wieder erkennt man nur am Inhalt, dass es sich eigentlich um zwei getrennte Kommentare handelt. // Berechnung X abgeschlossen // // Nun beginnt Berechnung Y Abbildung 10: Blockkommentar vs. Zeilenkommentar (3) Die Verwendung von white spaces macht in Abbildung 11 und Abbildung 12 deutlich, wie groß der Einfluss der dokumentarischen Struktur auf die Wahrnehmung von Quelltextes ist. Method(parameter1, /* K1 */ parameter2, /* K2 */ parameter3) /* K3 */ Abbildung 11: Dokumentarische Struktur unterstützt Wahrnehmung der Zugehörigekeit von Kommentaren In Abbildung 11 erkennt man genau, dass die Kommentare den einzelnen Parametern zuzuordnen sind, da die Interpretation instinktiv zeilenweise geschieht. In Abbildung 12 ist eine zeilenweise Interpretation nicht möglich. Durch die syntaktische Interpretation scheinen die Kommentare K1 und K2 zu den auf sie folgenden Parametern zu gehören. Kommentar K3 scheint die Methode zu kommentieren. if (a < b) // Zusammenhängender return a; // Kommentar

4 Method(parameter1, /* K1 */ parameter2, /* K2 */ parameter3) /* K3 */ Abbildung 12: Fehlende dokumentarische Struktur Quelltext (mit Makros) Macros, Kommentare Präprozessor Quelltext white spaces, Kommentare Lexer An diesen Beispielen wird sehr schnell deutlich, dass es oft nicht möglich ist, Kommentare bestimmten Quelltext-Abschnitten eindeutig zuzuordnen. semantische Analyse Parse-Baum Parser Tokenstrom AST 3. Quelltext-Zwischendarstellung Um effektiv auf Quelltext arbeiten zu können, wird dieser in eine Zwischendarstellung überführt, auf der Operationen effizienter möglich sind, als auf reinem Text. Solche sprachbasierten Anwendungen arbeiten auf der sprachlichen Struktur, der Grammatik, der Programmiersprache. Die konventionelle Datenstruktur für die Repräsentation eines Programms in Form ihrer Grammatik stammt aus dem Compiler-Bau und ist ein Parse-Baum Parse-Bäume Die Bäume, auf denen gearbeitet wird, sind von der Grammatik der jeweiligen Programmiersprache abgeleitet. Genau dies ist der Grund, aus dem es beim Unparsen Probleme mit der dokumentarischen Struktur gibt. Diese ist nämlich gerade nicht in der Grammatik festgeschrieben. Um einen Parse-Baum aufzubauen werden dazu zunächst alle Quelltextdateien von einem Lexer eingelesen, welcher sie in einen Tokenstrom umwandelt. Handelt es sich bei den eingelesenen Quelltextdateien um C oder C++ Code, so wird der Quelltext vor dem Lexer noch durch einen so genannten Präprozessor vorverarbeitet. Läuft der Quelltext vor dem Lexer durch einen Präprozessor, so löscht dieser die Kommentare. Ansonsten werden die Kommentare vom Lexer beim Erzeugen des Tokenstroms verworfen. Der Tokenstrom wird an einen Parser weitergereicht der anhand der Grammatik den Parse-Baum aufbaut. Wird der Parse- Baum um weitere Informationen, wie beispielsweise semantische Kanten, erweitert, so spricht man von einem AST, einem Abstrakten Syntax Baum (abstract syntax tree). Da für white spaces keine Token erzeugt werden, geht die dokumentarische Struktur schon beim Lexen verloren. Abbildung 13: Erzeugung eines ASTs 3.2. Probleme mit Parse-Bäumen und ASTs Die Vorgehensweise, Quelltext in Parse-Bäumen bzw. ASTs zu verwalten, wurde für Compiler entwickelt [1]. Die Problematik, die sich hierbei für die Quelltextähnlichkeit ergibt, zeigt schon die Bezeichnung abstrakter Syntaxbaum auf. Lexer und Parser bilden nur die Grammatik der Programmiersprach ab und abstrahieren dabei so stark vom Quelltext, dass alle Bestandteile, die sich zur dokumentarischen Struktur zählen lassen, verloren gehen. Alle white spaces gehen beim Umwandeln von Quelltext in den Tokenstrom durch den Lexer verloren. Da white spaces den Parser nicht mehr erreichen, können sie an dieser Stelle nicht mehr in den AST eingearbeitet werden. Gerade diese white spaces sind elementare Bestandteile der dokumentarischen Struktur von Quelltext. Liegt beim Unparsen allein der abstrakte Syntaxbaum vor, ist eine quelltextnahe Ausgabe aufgrund der vielen fehlenden Informationen nicht möglich. Mit reinen abstrakten Syntaxbäumen ist lediglich Typ 3 der Quelltextähnlichkeit erreichbar (Vorgriff auf 4. Definition von Quelltextähnlichkeit auf Seite 5) Beispiele aus der IML (Bauhaus) Die Zwischendarstellung des Werkzeugkastens Bauhaus, die IML, hat zurzeit noch einige Schwächen, die zu Problemen mit einem möglichst quelltextähnlich Unparse führen. Die folgende Liste führt drei Beispiele von Elementen auf, die nicht in der IML repräsentiert werden und somit beim Unparse nicht korrekt wiedergegeben werden können.

5 optionale Leerzeichen (Abbildung 14) Zeilenumbrüche redundante Klammern (Abbildung 15) public void Method(int a, int b) Abbildung 14: optionale Leerzeichen int a = b + (c * d); Abbildung 15: redundante Klammern Ein weiteres Problem gibt es bei der Unterstützung des Zeichensatzes der verschiedenen Programmiersprachen. Zurzeit kann die IML nur ASCII Zeichen darstellen. Java unterstützt jedoch Unicode. Bezeichner die Unicode-Zeichen nutzen, können in der IML also zurzeit nicht dargestellt werden. 4. Definition von Quelltextähnlichkeit R. Falke beschreibt in seiner Ausarbeitung Ergebnisse des Projektwochenendes in Nordenham und weitere Notizen zu Arte-Fakt [4] die folgenden drei Typen (Ausbau-Stufen) von Quelltextähnlichkeit für das Projekt Arte-Fakt: Typ 0 Binäre Gleichheit der Quelltext-Dateien (bezogen auf die nicht von Transformationen betroffenen Quelltextfragmente. Typ 1 Wie Typ 0 aber zusätzlich ist erlaubt, dass sich der Typ des Leerraumes ändert (Tab -> Leerzeichen, Leerzeichen -> Tab). Die Position der Elemente muss gleich bleiben. Zusätzlich gehen eventuelle Leerzeichen an Zeilenenden verloren. Typ 2 Wie Typ 1. Zusätzlich darf sich die Position der E- lemente verändern. 5. Lösungsansätze der Gruppe Unparse Um durch die IML verloren gegangene Informationen zu bekommen, soll ein erweiterter Tokenstrom verwendet werden, der beispielsweise spezielle Token für Leerzeichen und Tabulatoren enthält. Durch die Verwendung eines Tokenstroms und der in jedem Token enthaltenen Source-Location (SLoc) können Zeilenumbrüche (und bedingt auch andere white spaces) rekonstruiert werden. Kommentare sollen in einer separaten Liste mitgeführt werden. Ein Mapping zwischen Knoten in der IML bzw. Token im Tokenstrom zu den Kommentaren könnte über die Source-Location erfolgen. Zurzeit geht die Gruppe Unparse davon aus, dass sie mit den genannten Lösungsansätzen den Quelltextähnlichkeitstyp Typ 2 (vielleicht sogar Typ 1) erreichen wird. 6. Referenzen [1] M. L. Van De Vanter, Preserving the Documentary Structure of Source Code in Language-based Transformation Tools, IEEE International Workshop on Source Code Analysis and Manipulation, November 2001, c.scam_nov01.paper_pdf.pdf [2] M. L. Van De Vanter, The Documentary Structure of Source Code,Information & Software Technology, Volume 44, Issue 13, 1 October 2002, pp , st_02.paper_pdf.pdf [3] whitespace - [4] R. Falke, Ergebnisse des Projekwochenendes in Nordenham und weitere Notizen zu Arte-Fakt, Typ 3 Beliebige Unterschiede im Quelltext sind erlaubt. Lediglich die Semantik muss erhalten bleiben. Hier ist wirklich nur noch von (grober) Quelltextähnlichkeit zu sprechen.

Quelltextähnlichkeit

Quelltextähnlichkeit Quelltextähnlichkeit String autor = Tobias Jamin ; String projekt = Arte-Fakt ; String seminar = Transformationen ; Date termin = new Date(3, // Tag 2, // Monat 2006); Presentation praesentation = new

Mehr

Einführung in die Programmiertechnik

Einführung in die Programmiertechnik Einführung in die Programmiertechnik Formale Beschreibung von Programmiersprachen Lexikalische Regeln Definition von Wörtern (Lexem, Token) Gruppierung von Zeichen Lexikalische Kategorien: Klassen ähnlicher

Mehr

Programmierung 2. Übersetzer: Das Frontend. Sebastian Hack. Klaas Boesche. Sommersemester

Programmierung 2. Übersetzer: Das Frontend. Sebastian Hack. Klaas Boesche. Sommersemester 1 Programmierung 2 Übersetzer: Das Frontend Sebastian Hack hack@cs.uni-saarland.de Klaas Boesche boesche@cs.uni-saarland.de Sommersemester 2012 Vom Programm zur Maschine Was passiert eigentlich mit unseren

Mehr

Programme erstellen in Java

Programme erstellen in Java Programmieren mit Java Modul 0 Programme erstellen in Java Theorieteil Inhaltsverzeichnis 1 Modulübersicht 3 2 Schreiben von Computerprogrammen 3 2.1 Computerprogramme bestehen aus Daten und Instruktionen.......

Mehr

Definition Compiler. Bekannte Compiler

Definition Compiler. Bekannte Compiler Compiler Inhalt: Definition Compiler / bekannte Compiler Klassifikationen von Compilern Analyse-Synthese-Modell der Kompilierung Analyse des Quellprogramms Synthesephase Die Phasen eines Compilers Symboltabellenverwaltung

Mehr

Java Lexikalische Struktur

Java Lexikalische Struktur Informatik 1 für Nebenfachstudierende Grundmodul Java Lexikalische Struktur Kai-Steffen Hielscher Folienversion: 19. Dezember 2017 Informatik 7 Rechnernetze und Kommunikationssysteme Inhaltsübersicht Kapitel

Mehr

Kapitel 1: Informationsverarbeitung durch Programme

Kapitel 1: Informationsverarbeitung durch Programme LUDWIG- MAXIMILIANS- UNIVERSITY MUNICH DEPARTMENT INSTITUTE FOR INFORMATICS Skript zur Vorlesung: Einführung in die Informatik: Systeme und Anwendungen Sommersemester 2009 Kapitel 1: Informationsverarbeitung

Mehr

Grammatiken und ANTLR

Grammatiken und ANTLR Grammatiken und ANTLR Zusatzfolien zu Algo Blatt 6 Author: Henry Schaefer http://www.majeeks.de/folien_blatt6.pdf Grammatik Definition: syntaktische Beschreibung einer Sprache (H.S.) Definiton Grammatik

Mehr

Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen

Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen 16OH21005 gefördert. Die Verantwortung für den Inhalt dieser

Mehr

Beuth Hochschule Einführende Gentle-Programme WS12/13, S. 1

Beuth Hochschule Einführende Gentle-Programme WS12/13, S. 1 Beuth Hochschule Einführende Gentle-Programme WS12/13, S. 1 Einführende Gentle-Programme Dieses Papier soll die Syntax und Semantik (die Schreibweise und Bedeutung) von einfachen Gentle Programmen anhand

Mehr

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 29

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf  Seite 1 von 29 Kapitel 2 Einführung in C++ Seite 1 von 29 C++ Zeichensatz - Buchstaben: a bis z und A bis Z. - Ziffern: 0 bis 9 - Sonderzeichen: ; :,. # + - * / % _ \! < > & ^ ~ ( ) { } [ ]? Seite 2 von 29 Höhere Elemente

Mehr

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 - 1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen I.2. I.2. Grundlagen von von Programmiersprachen. - 1 - 1. Der Begriff Informatik "Informatik" = Kunstwort aus Information und Mathematik

Mehr

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 - 1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen I.2. I.2. Grundlagen von von Programmiersprachen. - 1 - 1. Der Begriff Informatik "Informatik" = Kunstwort aus Information und Mathematik

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java Vorlesung vom 18.4.07, Grundlagen Übersicht 1 Kommentare 2 Bezeichner für Klassen, Methoden, Variablen 3 White Space Zeichen 4 Wortsymbole 5 Interpunktionszeichen 6 Operatoren 7 import Anweisungen 8 Form

Mehr

Interpreter - Gliederung

Interpreter - Gliederung Institut für Informatik Ludwig-Maximilian Universität Interpreter - Gliederung Programmiersprache Syntax Konkrete Syntax Abstrakter Syntax Baum (Abstrakte Syntax) Parser Syntaktische Struktur einer Sprache

Mehr

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 12/13. Kapitel 3. Grunddatentypen, Ausdrücke und Variable

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 12/13. Kapitel 3. Grunddatentypen, Ausdrücke und Variable 1 Kapitel 3 Grunddatentypen, Ausdrücke und Variable 2 Eine Datenstruktur besteht aus Grunddatentypen in Java einer Menge von Daten (Werten) charakteristischen Operationen Datenstrukturen werden mit einem

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 27 Einstieg in die Informatik mit Java Methoden / Funktionen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 27 1 Überblick 2 Zweck von Methoden 3 Methodendefinition

Mehr

Übungs- und Praktikumsaufgaben zur Systemprogrammierung Dipl.-Ing. H. Büchter (Lehrbeauftragter) FH-Dortmund WS 2001/2002 / SS 2002

Übungs- und Praktikumsaufgaben zur Systemprogrammierung Dipl.-Ing. H. Büchter (Lehrbeauftragter) FH-Dortmund WS 2001/2002 / SS 2002 1. Stellen Sie die schrittweise Verbesserung eines Compilers durch das Bootstrap- Verfahren mit Hilfe von T-Diagrammen dar. Gegeben ist ein auf der Maschine M lauffähiger Compiler C 1, der in S geschrieben

Mehr

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Methoden. 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

Mehr

Definition von domänenspezifischen Sprachen mit Xtext: Einführung

Definition von domänenspezifischen Sprachen mit Xtext: Einführung Definition von domänenspezifischen Sprachen mit Xtext: Einführung 28. November 2012 Taentzer Modellgetriebene Softwareentwicklung 246 Überblick Was ist zu tun, wenn wir selbst einen Ansatz für modellgetriebenen

Mehr

Inhalt Kapitel 11: Formale Syntax und Semantik

Inhalt Kapitel 11: Formale Syntax und Semantik Inhalt Kapitel 11: Formale Syntax und Semantik 1 Abstrakte und konkrete Syntax 2 Lexikalische Analyse 3 Formale Sprachen, Grammatiken, BNF 4 Syntaxanalyse konkret 266 Abstrakte und konkrete Syntax Abstrakte

Mehr

Objektorientierte Programmierung. Kapitel 3: Syntaxdiagramme

Objektorientierte Programmierung. Kapitel 3: Syntaxdiagramme Stefan Brass: OOP (Java), 3. 1/31 Objektorientierte Programmierung Kapitel 3: Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester 2014/15 http://www.informatik.uni-halle.de/ brass/oop14/

Mehr

Literatur Reguläre Ausdrücke

Literatur Reguläre Ausdrücke Literatur Reguläre Ausdrücke [2-1] https://de.wikipedia.org/wiki/regul%c3%a4rer_ausdruck [2-2] http://openbook.rheinwerk-verlag.de/linux/linux_kap08_001.html http://openbook.rheinwerk-verlag.de/shell_programmierung/shell_013_0

Mehr

n 1. Der Begriff Informatik n 2. Syntax und Semantik von Programmiersprachen - 1 -

n 1. Der Begriff Informatik n 2. Syntax und Semantik von Programmiersprachen - 1 - n 1. Der Begriff Informatik n 2. Syntax und Semantik von Programmiersprachen I.2. I.2. Grundlagen von von Programmiersprachen. - 1 - 1. Der Begriff Informatik n "Informatik" = Kunstwort aus Information

Mehr

Kapitel 1: Informationsverarbeitung durch Programme

Kapitel 1: Informationsverarbeitung durch Programme LUDWIG- MAXIMILIANS- UNIVERSITY MUNICH DEPARTMENT INSTITUTE FOR INFORMATICS Skript zur Vorlesung: Einführung in die Informatik: Systeme und Anwendungen Sommersemester 2018 Kapitel 1: Informationsverarbeitung

Mehr

Programmieren I + II Regeln der Code-Formatierung

Programmieren I + II Regeln der Code-Formatierung Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme WS 2016/2017, SS 2017 Programmieren I + II Regeln der Code-Formatierung In diesem Dokument finden

Mehr

Einführung in die C-Programmierung

Einführung in die C-Programmierung Einführung in die C-Programmierung Warum C? Sehr stark verbreitet (Praxisnähe) Höhere Programmiersprache Objektorientierte Erweiterung: C++ Aber auch hardwarenahe Programmierung möglich (z.b. Mikrokontroller).

Mehr

pue13 January 28, 2017

pue13 January 28, 2017 pue13 January 28, 2017 1 Aufgabe 1 (Klammern und Anweisungsblöcke) Wie Sie in der Vorlesung gelernt haben, werden Anweisungsblöcke in Java nicht durch Einrückung, sondern mithilfe von geschweiften Klammern

Mehr

7. Syntax: Grammatiken, EBNF

7. Syntax: Grammatiken, EBNF 7. Syntax: Grammatiken, EBNF Teil 1 Sehr schönes Beispiel für Notwendigkeit der Theoretischen Informatik für Belange der Praktischen Informatik Vertiefung in: Einführung in die Theoretische Informatik

Mehr

Grundlagen der Informatik Vorlesungsskript

Grundlagen der Informatik Vorlesungsskript Grundlagen der Informatik Vorlesungsskript Prof. Dr. T. Gervens, Prof. Dr.-Ing. B. Lang, Prof. Dr. F.M. Thiesing, Prof. Dr.-Ing. C. Westerkamp 16 AUTOMATISCHES ÜBERSETZEN VON PROGRAMMEN MIT MAKE... 2 16.1

Mehr

Programmierkurs II. C und Assembler

Programmierkurs II. C und Assembler Programmierkurs II C und Assembler Prof. Dr. Wolfgang Effelsberg Universität Mannheim Sommersemester 2003 1-1 Inhalt Teil I: Die Programmiersprache C 2. Datentypen und Deklarationen 3. Operatoren und Ausdrücke

Mehr

Softwareentwicklung I (IB) Objekte. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München

Softwareentwicklung I (IB) Objekte. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München Softwareentwicklung I (IB) Objekte Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 18.03.2018 20:09 Inhaltsverzeichnis Neue Typen durch Klassen............................. 2

Mehr

Mapra: C++ Teil 3. Felix Gruber. 29. April IGPM, RWTH Aachen. Felix Gruber (IGPM, RWTH Aachen) Mapra: C++ Teil 3 29.

Mapra: C++ Teil 3. Felix Gruber. 29. April IGPM, RWTH Aachen. Felix Gruber (IGPM, RWTH Aachen) Mapra: C++ Teil 3 29. Mapra: C++ Teil 3 Felix Gruber IGPM, RWTH Aachen 29. April 2015 Felix Gruber (IGPM, RWTH Aachen) Mapra: C++ Teil 3 29. April 2015 1 / 11 Themen vom letzten Mal Debuggen mit gdb Zusammengesetzte Datentypen

Mehr

Programmierpraktikum Java Entdecken Merkblatt 2

Programmierpraktikum Java Entdecken Merkblatt 2 Technische Universität München Fakultät für Informatik Prof. Dr. Helmut Seidl Michael Petter Melanie Dietz Raphael Geissler Programmierpraktikum Java Entdecken Merkblatt 2 SS 2005 1 Einleitung 1.1 Was

Mehr

Methoden zur Interpretation LISPähnlicher. Programmiersprachen. Seminarvortrag / 53 FH AACHEN FACHBEREICH 9 TOBIAS STUMM MATR.-NR.

Methoden zur Interpretation LISPähnlicher. Programmiersprachen. Seminarvortrag / 53 FH AACHEN FACHBEREICH 9 TOBIAS STUMM MATR.-NR. Methoden zur Interpretation LISPähnlicher Programmiersprachen Seminarvortrag 20.01.2017 FACHBEREICH 9 TOBIAS STUMM MATR.-NR. 4012917 1 Inhalt Motivation Lisp > Definition > Scheme Interpreter > Definition

Mehr

Java-Applikationen (Java-Programme)

Java-Applikationen (Java-Programme) Java-Applikationen (Java-Programme) Eine erste Applikation: 1 2 3 4 5 6 7 8 9 10 // Quelltext HalloWelt.java // Programm gibt den Text Hallo Welt aus public class HalloWelt public static void main(string[]

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 26 Einstieg in die Informatik mit Java Methoden Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 26 1 Methoden 2 Methodendefinition 3 Parameterübergabe, Methodenaufruf

Mehr

Java Übung. Übung 2. Werner Gaulke. 19. April Universität Duisburg-Essen Kommedia, Übung EinPro SS06, Einführung in Java - Übung.

Java Übung. Übung 2. Werner Gaulke. 19. April Universität Duisburg-Essen Kommedia, Übung EinPro SS06, Einführung in Java - Übung. Java Übung Übung 2 Universität Duisburg-Essen Kommedia, Übung EinPro SS06, 19. April 2006 (UniDUE) 19. April 2006 1 / 13 Java Programme Java Programme bestehen aus (meist mehreren) Klassen. In den Klassen

Mehr

Kapitel 2. Methoden zur Beschreibung von Syntax

Kapitel 2. Methoden zur Beschreibung von Syntax 1 Kapitel 2 Methoden zur Beschreibung von Syntax Grammatik, die sogar Könige zu kontrollieren weiß... aus Molière, Les Femmes Savantes (1672), 2. Akt 2 Ziele Zwei Standards zur Definition der Syntax von

Mehr

3 Syntax von Programmiersprachen

3 Syntax von Programmiersprachen 3 Syntax von Programmiersprachen Syntax ( Lehre vom Satzbau ) formale Beschreibung des Aufbaus der Worte und Sätze, die zu einer Sprache gehören; im Falle einer Programmiersprache Festlegung, wie Programme

Mehr

2 Eine einfache Programmiersprache

2 Eine einfache Programmiersprache 2 Eine einfache Programmiersprache Eine Programmiersprache soll Datenstrukturen anbieten Operationen auf Daten erlauben Kontrollstrukturen zur Ablaufsteuerung bereitstellen Als Beispiel betrachten wir

Mehr

Methoden und Wrapperklassen

Methoden und Wrapperklassen Methoden und Wrapperklassen CoMa-Übung IV TU Berlin 06.11.2012 CoMa-Übung IV (TU Berlin) Methoden und Wrapperklassen 06.11.2012 1 / 24 Themen der Übung 1 Methoden 2 Wrapper-Klassen CoMa-Übung IV (TU Berlin)

Mehr

Implementierung eines LR-Parser-Generators mit syntaktischen Prädikaten

Implementierung eines LR-Parser-Generators mit syntaktischen Prädikaten Implementierung eines LR-Parser-Generators mit syntaktischen Prädikaten Aufgabenbeschreibung 29. Juli 2011 1 Einleitung und Motivation Der Parser-Generator Antlr [Par07] bietet die Möglichkeit, die Auswahl

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 47 Einstieg in die Informatik mit Java Anweisungen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 47 1 Ausdrucksanweisung 2 Einfache Ausgabeanweisung 3 Einfache Eingabeanweisung,

Mehr

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22 C++ Teil 2 Sven Groß IGPM, RWTH Aachen 16. Apr 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 2 16. Apr 2015 1 / 22 Themen der letzten Vorlesung Hallo Welt Elementare Datentypen Ein-/Ausgabe Operatoren Sven

Mehr

Ergänzungen zur Theoretischen Informatik. Compilerbau mit ANTLR. Literatur Das Standardwerk zum Compilerbau ist [1].

Ergänzungen zur Theoretischen Informatik. Compilerbau mit ANTLR. Literatur Das Standardwerk zum Compilerbau ist [1]. Themen Compilerbau mit ANTLR. Literatur Das Standardwerk zum Compilerbau ist [1]. [1] Aho, Alfred V. ; Lam, Monica S. ; Sethi, Ravi: Compiler. Prinzipien, Techniken und Tools. Pearson, 2008. ISBN 3827370973

Mehr

Java I Vorlesung Imperatives Programmieren

Java I Vorlesung Imperatives Programmieren Java I Vorlesung 2 Imperatives Programmieren 3.5.2004 Variablen -- Datentypen -- Werte Operatoren und Ausdrücke Kontrollstrukturen: if Imperatives Programmieren Im Kern ist Java eine imperative Programmiersprache.

Mehr

Einführung in die Informatik I (autip)

Einführung in die Informatik I (autip) Einführung in die Informatik I (autip) Dr. Stefan Lewandowski Fakultät 5: Informatik, Elektrotechnik und Informationstechnik Abteilung Formale Konzepte Universität Stuttgart 24. Oktober 2007 Was Sie bis

Mehr

FACHHOCHSCHULE MANNHEIM

FACHHOCHSCHULE MANNHEIM für Java-Programmierer Der Präprozessor Prof. Dr. Wolfgang Schramm FACHHOCHSCHULE MANNHEIM Hochschule für Technik und Gestaltung Präprozessor Ist dem Compiler vorgeschaltet ( Prä -). Spezielle Anweisungen

Mehr

Programmieren I + II Regeln der Code-Formatierung

Programmieren I + II Regeln der Code-Formatierung Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme WS 2012/2013, SS 2013 Programmieren I + II Regeln der Code-Formatierung Die hier vorgestellten

Mehr

C - PRÄPROZESSOR. Seminar effiziente C Programmierung WS 2012/13. Von Christian Peter

C - PRÄPROZESSOR. Seminar effiziente C Programmierung WS 2012/13. Von Christian Peter C - PRÄPROZESSOR Seminar effiziente C Programmierung WS 2012/13 Von Christian Peter Themen Was sind Präprozessoren? Beispiele für Präprozessoren Funktionsweisen Der C - Präprozessor Der # Präfix #include

Mehr

FACHHOCHSCHULE AUGSBURG Hochschule für Technik, Wirtschaft und Gestaltung

FACHHOCHSCHULE AUGSBURG Hochschule für Technik, Wirtschaft und Gestaltung C Sprachelemente für Übung 2 Typumwandlungen (type casts) Bei Ausdrücken, in denen Operanden mit unterschiedlichem Typ vorkommen, werden diese vom Compiler vor der Ausführung automatisch in einen gemeinsamen

Mehr

Vorlesung Software-Reengineering

Vorlesung Software-Reengineering Vorlesung Software-Reengineering Prof. Dr. Rainer Koschke Arbeitsgruppe Softwaretechnik Fachbereich Mathematik und Informatik Universität Bremen Wintersemester 2011/12 Überblick I Refactoring Code-Transformationen:

Mehr

Programmiersprachen und Übersetzer

Programmiersprachen und Übersetzer Programmiersprachen und Übersetzer Sommersemester 2009 5. April 2009 Vorteile bei der Verwendung höherer Programmiersprachen Vorteile bei der Verwendung höherer Programmiersprachen 1. Einfache Notation

Mehr

Einführung in die Computerlinguistik Einführung in Perl (1)

Einführung in die Computerlinguistik Einführung in Perl (1) Einführung in die Computerlinguistik Einführung in Perl (1) Dozentin: Wiebke Petersen 26.11.2009 Wiebke Petersen Einführung CL (WiSe 09/10) 1 Compiler Ein Compiler (auch Übersetzer oder Kompilierer genannt)

Mehr

Kapitel 05. Datentypen. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Kapitel 05. Datentypen. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz Kapitel 05 Datentypen Inhalt des 5. Kapitels Datentypen 5.1 Einleitung 5.2 Eingebaute Datentypen Übersicht Die Datentypen char, float und double Standardwerte Operatoren Konversion / Type-Cast Datentyp

Mehr

Werkzeuge zur Programmentwicklung

Werkzeuge zur Programmentwicklung Werkzeuge zur Programmentwicklung B-15 Bibliothek Modulschnittstellen vorübersetzte Module Eingabe Editor Übersetzer (Compiler) Binder (Linker) Rechner mit Systemsoftware Quellmodul (Source) Zielmodul

Mehr

Repetitorium Informatik (Java)

Repetitorium 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

Mehr

Kapitel 3. Grunddatentypen, Ausdrücke und Variable

Kapitel 3. Grunddatentypen, Ausdrücke und Variable Kapitel 3 Grunddatentypen, Ausdrücke und Variable Grunddatentypen, Ausdrücke und Variable 1 Eine Datenstruktur besteht aus Grunddatentypen in Java einer Menge von Daten (Werten) charakteristischen Operationen

Mehr

Formale Sprachen. Inhaltsverzeichnis. M. Jakob. 10. Dezember Allgemeine Einführung. Aufbau formaler Sprachen

Formale Sprachen. Inhaltsverzeichnis. M. Jakob. 10. Dezember Allgemeine Einführung. Aufbau formaler Sprachen M. Jakob Gymnasium Pegnitz 10. Dezember 2014 Inhaltsverzeichnis Allgemeine Einführung Aufbau formaler Sprachen Notationsformen formaler Sprachen Backus-Naur-Formen Erkennen formaler Sprachen Implementierung

Mehr

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

Ü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

Mehr

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen Kapitel 9 Programmierkurs Birgit Engels Anna Schulze Zentrum für Angewandte Informatik Köln Objektorientierte Programmierung Attribute von Klassen, Methoden und Variablen Interfaces WS 07/08 1/ 18 2/ 18

Mehr

Programmierkurs II. Prof. Dr. Wolfgang Effelsberg. Universität Mannheim. Sommersemester Wolfgang Effelsberg Programmiersprachen

Programmierkurs II. Prof. Dr. Wolfgang Effelsberg. Universität Mannheim. Sommersemester Wolfgang Effelsberg Programmiersprachen Prof. Dr. Wolfgang Effelsberg Universität Mannheim Sommersemester 2005 1-1 Inhalt (1) Teil I: Die Programmiersprache C 2. Datentypen und Deklarationen 3. Operatoren und Ausdrücke 4. Ablaufsteuerung (Kontrollstrukturen)

Mehr

Programmierkurs II. Prof. Dr. Wolfgang Effelsberg. Universität Mannheim. Sommersemester Wolfgang Effelsberg Programmiersprachen

Programmierkurs II. Prof. Dr. Wolfgang Effelsberg. Universität Mannheim. Sommersemester Wolfgang Effelsberg Programmiersprachen Prof. Dr. Wolfgang Effelsberg Universität Mannheim Sommersemester 2005 1-1 Inhalt (1) Teil I: Die Programmiersprache C 2. Datentypen und Deklarationen 3. Operatoren und Ausdrücke 4. Ablaufsteuerung (Kontrollstrukturen)

Mehr

Compiler; Übersetzungsprogramme. Grundlagen der Programmierung 3 A. Compiler für Programmiersprachen. Phasen eines Compilers

Compiler; Übersetzungsprogramme. Grundlagen der Programmierung 3 A. Compiler für Programmiersprachen. Phasen eines Compilers ompiler; Übersetzungsprogramme Grundlagen der Programmierung 3 A ompiler A: Phasen; Scanner Prof. Dr. Manfred Schmidt-Schauß Sommersemester 2017 Ein Übersetzer (ompiler) ist ein Programm, das ein Wort

Mehr

Verhalten. Def. und Nutzen von Verhalten. Pseudocode Schreibtischtest. Algorithmen

Verhalten. Def. und Nutzen von Verhalten. Pseudocode Schreibtischtest. Algorithmen Verhalten Def. und Nutzen von Verhalten Algorithmen Pseudocode Schreibtischtest Verhalten & Pseudocode Das Verhalten beschreibt, wie sich die Datenstrukturen (Variablen) eines Programms verändern müssen,

Mehr

Sprachkonstrukte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

Sprachkonstrukte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg Sprachkonstrukte Einführung in Java Folie 1 von 20 12. Mai 2011 Ivo Kronenberg Inhalt Kommentare Identifier (Bezeichner) Variablen Numerische Ausdrücke und Typen Kontrollstrukturen Verzweigungen Bedingungen

Mehr

FHZ. K13 Rekursion. Lernziele. Hochschule Technik+Architektur Luzern Abteilung Informatik, Fach Programmieren. Inhalt

FHZ. K13 Rekursion. Lernziele. Hochschule Technik+Architektur Luzern Abteilung Informatik, Fach Programmieren. Inhalt Inhalt 1. Einführung 1. Beispiel: Fakultät 2. Beispiel: Zahlenfolge 3. Beispiel: Formale Sprache 4. Unterschied Iteration/Rekursion 2. Rekursive Methoden 1. Beispiel: Fakultät 2. Beispiel: "Türme

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 17 Einstieg in die Informatik mit Java String Tokenizer Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 17 1 Überblick Tokenizer 2 StringTokenizer 3 Verwendung von String.split

Mehr

Beispiel. Problem: mehrteilige Nachnamen (von Goethe, Mac Donald, Di Caprio)

Beispiel. Problem: mehrteilige Nachnamen (von Goethe, Mac Donald, Di Caprio) Beispiel Beispiel: Namensliste konvertieren (Karl Egon Meier Meier, Karl Egon). s/(.*) (.*)/$2, $1/; Problem: mehrteilige Nachnamen (von Goethe, Mac Donald, Di Caprio) s/(.*) (.*)/$2, $1/; s/(.*) ([a-z]+

Mehr

Informatik II Übung 06. Benjamin Hepp 5 April 2017

Informatik II Übung 06. Benjamin Hepp 5 April 2017 Informatik II Übung 06 Benjamin Hepp benjamin.hepp@inf.ethz.ch 5 April 2017 Nachbesprechung U5 5 April 2017 Informatik II - Übung 01 2 Nachbesprechung U5 1. Einfach verkettete Listen Keine Probleme 2.

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java Vorlesung vom 25.4.07, Anweisungen Übersicht 1 Ausdrucksanweisung 2 Einfache Ausgabeanweisung 3 Einfache Eingabeanweisung, Vorbereitungen 4 Verbundanweisung 5 Bedingte Anweisung 6 Auswahlanweisung 7 for

Mehr

Programmierkonventionen - 1 -

Programmierkonventionen - 1 - Die wichtigsten Bestandteile der Programmierkonventionen für Java werden hier erläutert. Dies sind: Schreibweise von Bezeichnern Einrückkonventionen Kommentare Programmierkonventionen - 1 - Einleitung

Mehr

Sprachen sind durch folgenden Aufbau gekennzeichnet:

Sprachen sind durch folgenden Aufbau gekennzeichnet: BNF UND SYNTAXDIAGRAMME 1. Allgemeines 1.1 Aufbau von Sprachen BNF und Syntaxdiagramme werden verwendet, um die Syntax einer Sprache darzustellen und graphisch zu veranschaulichen. Mit ihnen können entweder

Mehr

Wo sind wir? Übersicht lexikale Struktur von Java

Wo sind wir? Übersicht lexikale Struktur von Java Wo sind wir? Java-Umgebung Lexikale Konventionen Datentypen Kontrollstrukturen Ausdrücke Klassen, Pakete, Schnittstellen JVM Exceptions Java Klassenbibliotheken Ein-/Ausgabe Collections Threads Applets,

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 29 Einstieg in die Informatik mit Java Schöner Programmieren Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 29 1 Überblick 2 Anordnung von Anweisungen 3 Kommentierung

Mehr

ÜBUNGS-BLOCK 1 LÖSUNGEN

ÜBUNGS-BLOCK 1 LÖSUNGEN ÜBUNGS-BLOCK 1 LÖSUNGEN Aufgabe 1: Wenn dich jemand fragen würde, was er sich im Bezug auf die Programmierung unter einer Klasse vorstellen kann, was würdest du ihm sagen? Aus welchen Bestandteilen besteht

Mehr

Lexikalische Analyse, Tokenizer, Scanner

Lexikalische Analyse, Tokenizer, Scanner Lexikalische Analyse, Tokenizer, Scanner Frühe Phase des Übersetzers Aufgabenteilung: Scanner (lokale) Zeichen (Symbol-)Analyse Parser Syntax-Analyse Aufgabe des Scanners: Erkennung von: Zahlen, Bezeichner,

Mehr

12 Abstrakte Klassen, finale Klassen und Interfaces

12 Abstrakte Klassen, finale Klassen und Interfaces 12 Abstrakte Klassen, finale Klassen und Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält,

Mehr

2 Eine einfache Programmiersprache

2 Eine einfache Programmiersprache 2 Eine einfache Programmiersprache Eine Programmiersprache soll Datenstrukturen anbieten Operationen auf Daten erlauben Kontrollstrukturen zur Ablaufsteuerung bereitstellen Als Beispiel betrachten wir

Mehr

C# - Einführung in die Programmiersprache Methoden. Leibniz Universität IT Services

C# - Einführung in die Programmiersprache Methoden. Leibniz Universität IT Services C# - Einführung in die Programmiersprache Methoden Leibniz Universität IT Services 02.07.12 Methoden... sind Subroutinen in einer Klasse. können einen Wert an den Aufrufer zurückgeben. verändern die Eigenschaften

Mehr

Algorithmen implementieren. Implementieren von Algorithmen

Algorithmen 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

Mehr

Prof. Dr. Uwe Schmidt. 12. August Aufgaben zur Klausur Softwaredesign im SS 2014 (BInf v310, BMInf v300, BWInf v310, BWInf- 23)

Prof. Dr. Uwe Schmidt. 12. August Aufgaben zur Klausur Softwaredesign im SS 2014 (BInf v310, BMInf v300, BWInf v310, BWInf- 23) Prof. Dr. Uwe Schmidt 12. August 2014 Aufgaben zur Klausur Softwaredesign im SS 2014 (BInf v310, BMInf v300, BWInf v310, BWInf- 23) Zeit: 90 Minuten erlaubte Hilfsmittel: keine Bitte tragen Sie Ihre Antworten

Mehr

Schöner Programmieren

Schöner Programmieren Schöner Programmieren Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 20.11.07 G. Bohlender (IANM UNI Karlsruhe) Schöner Programmieren 20.11.07

Mehr

{P} S {Q} {P} S {Q} {P} S {Q} Inhalt. Hoare-Kalkül. Hoare-Kalkül. Hoare-Tripel. Hoare-Tripel. Hoare-Tripel

{P} S {Q} {P} S {Q} {P} S {Q} Inhalt. Hoare-Kalkül. Hoare-Kalkül. Hoare-Tripel. Hoare-Tripel. Hoare-Tripel Inhalt Hoare-Kalkül Formale Verifizierung Hoare-Kalkül while-sprache Terminierung Partielle / totale Korrektheit 4.0 Hoare-Kalkül entwickelt von C.A.R. (Tony) Hoare (britischer Informatiker), 1969 formales

Mehr

Schöner Programmieren

Schöner Programmieren Schöner Programmieren Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 30.05.07 G. Bohlender (IANM UNI Karlsruhe) Schöner Programmieren 30.05.07

Mehr

Java: Eine kurze Einführung an Beispielen

Java: Eine kurze Einführung an Beispielen Java: Eine kurze Einführung an Beispielen Quellcode, javac und die JVM Der Quellcode eines einfachen Java-Programms besteht aus einer Datei mit dem Suffix.java. In einer solchen Datei wird eine Klasse

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java Vorlesung 10: Ein Interpreter für While Prof. Dr. Peter Thiemann Albert-Ludwigs-Universität Freiburg, Germany SS 2015 Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 1

Mehr

9.4 Grundlagen des Compilerbaus

9.4 Grundlagen des Compilerbaus Kap09.fm Seite 717 Dienstag, 7. September 2010 2:06 14 9.4 Grundlagen des Compilerbaus 717 so dass die Benutzung dieser Regeln zum Aufbau eines + -Knotens bzw. eines Negations- Knotens im abstrakten Syntaxbaum

Mehr

Syntax von Programmiersprachen

Syntax von Programmiersprachen "Grammatik, die sogar Könige zu kontrollieren weiß... aus Molière, Les Femmes Savantes (1672), 2. Akt Syntax von Programmiersprachen Prof. Dr. Christian Böhm in Zusammenarbeit mit Gefei Zhang WS 07/08

Mehr

Test-Klausuraufgaben Softwaretechnik Fachbereich BW, für WINFO

Test-Klausuraufgaben Softwaretechnik Fachbereich BW, für WINFO Test-Klausuraufgaben Softwaretechnik Fachbereich BW, für WINFO Dipl.-Ing. Klaus Knopper 21.12.2006 Hinweis: Bitte schreiben Sie auf das Deckblatt und auf jede Seite Ihren Namen und Ihre Matrikelnummer,

Mehr

Kapitel 5: Syntaxdiagramme und Grammatikregeln

Kapitel 5: Syntaxdiagramme und Grammatikregeln 5. Syntaxdiagramme und Grammatikregeln 5-1 Objektorientierte Programmierung (Winter 2010/2011) Kapitel 5: Syntaxdiagramme und Grammatikregeln Syntaxdiagramme Grammatikregeln (kontextfrei) Beispiele: Lexikalische

Mehr