2.0. Jens Weller Joel de Guzman Hartmut Kaiser

Save this PDF as:
 WORD  PNG  TXT  JPG

Größe: px
Ab Seite anzeigen:

Download "2.0. Jens Weller (jensweller@gmx.de) Joel de Guzman (joel@boost-consulting.com) Hartmut Kaiser (hartmut.kaiser@gmail.com)"

Transkript

1 2.0 Jens Weller Joel de Guzman Hartmut Kaiser

2 2.0 - Agenda Was ist Spirit? Aufbau & Überblick Lex, Qi & Karma

3 2.0 Was ist das? Spirit 2.0 ist ein objektorientiertes Framework für Parser (Lex, Qi) Ausgabe (Karma) stellt EBNF Grammatiken mit Hilfe von template Meta-Programmierung in C++ da.

4 2.0 Aufbau 2 Hauptkomponenten Parsing (spirit::lex, spirit::qi) Ausgabeformatierung (spirit::karma) Beide Teile sind unabhängig von einander

5 2.0 Details Spirit V2 Lex (token handling) Qi (parser) Karma (generator) Support Lexer Action Action Algorithms Lexertl Auxiliary Auxiliary Character classes Other lexer(s) Char Char Iterator Directive Directive Nonterminal support Binary Binary Nonterminal Nonterminal Numeric Numeric Operator Operator String String Utility Utility

6 2.0 operators EBNF operator Spirit a b (a folgt b) Qi: a >> b Karma: a << b a / b (a oder b) a b a* (a 0 oder n mal) *a a+ (a 1 oder n mal) +a a >> *(b >> a)

7 2.0 spirit::lex Dient der Tokendefinition template <typename Lexer> struct example1_tokens : lexer_def<lexer> { template <typename Self> void def (Self& self) { // define tokens and associate them with the lexer identifier = "[a-za-z_][a-za-z0-9_]*"; self = token_def<>(',') '{' '}' identifier; }; // any token definition to be used as the skip parser during parsing // has to be associated with a separate lexer state (here 'WS') white_space = "[ \\t\\n]+"; self("ws") = white_space; } token_def<> identifier, white_space;

8 2.0 spirit::qi Qi ist der eigentliche Parserbereich der Library Einige Beispiele CSV römische Zahlen Mini XML Parser

9 2.0 CSV Comma Seperated Values Sonderfall: nur Zahlen double_ >> *(',' >> double_) double_[ref(n) = _1] >> *(',' >> double_[ref(n) += _1]) Semantic Actions Platzhalter (Ergebnis des Parsers)

10 2.0 Liste einlesen vector<double> als Ergebnis? double_[push_back(ref(v), _1)] >> *(',' >> double_[push_back(ref(v), _1)]) double_[push_back(ref(v), _1)] % ',' double_ % ','

11 2.0 römische Zahlen Beispiel für Symboltable Regeldefinition Grammatiken

12 Symboltable 2.0 römische Zahlen struct hundreds_ : symbols<char, unsigned> {// bildet die römischen Zahlen im Hunderter Bereich ab hundreds_() { add("c", 100) ("CC", 200) ("CCC", 300) ("CD", 400) ("D", 500) ("DC", 600) ("DCC", 700) ("DCCC", 800) ("CM", 900) ; } } hundreds;

13 2.0 römische Zahlen Grammtik & Regeldefinition template <typename Iterator> struct roman : grammar_def<iterator, unsigned()> { roman() {// Regeldefinition start = +char_('m') [_val += 1000] hundreds [_val += _1] tens [_val += _1] ones [_val += _1]; } rule<iterator, unsigned()> start; }; Signatur _val: Synthesized Attribute (Return value)

14 2.0 Mini XML Grundlegende Strukturen für Mini XML struct mini_xml; typedef boost::variant<, std::string > mini_xml_node; struct mini_xml { std::string name; }; // We need to tell fusion about our mini_xml struct boost::recursive_wrapper<mini_xml> // to make it a first-class fusion citizen BOOST_FUSION_ADAPT_STRUCT( mini_xml, (std::string, name) (std::vector<mini_xml_node>, children) ) // tag name std::vector<mini_xml_node> children; // children

15 2.0 spirit::qi Grammatik für Mini XML template mini_xml_def() <typename Iterator> struct { { mini_xml_def : grammar_def<iterator, mini_xml(), space_type> { text text = = lexeme[+(char_ - - '<')[_val += += _1]]; mini_xml_def() node = = (xml text)[_val = = _1]; = _1]; _1]; {??? start_tag = '<' >> lexeme[+(char_ - '>')[_val += _1]] } >> >> '>'; '>'; rule<iterator, end_tag = = mini_xml(), "</" "</" >> >> lit(_r1) space_type> >> >> '>'; '>'; xml; rule<iterator, mini_xml_node(), space_type> node; rule<iterator, xml xml = = start_tag[at_c<0>(_val) std::string(), space_type> = = _1] = _1] text; _1] rule<iterator, >> >> *node[push_back(at_c<1>(_val), std::string(), space_type> start_tag; _1)] _1)] _1)] rule<iterator, >> >> end_tag(at_c<0>(_val)); void(std::string), space_type> end_tag; }; } } Text ohne Whitespaces Zugriff auf übergebenes Element

16 Mini XML Ausgabe 2.0 Karma struct mini_xml_generator() : boost::spirit::karma::grammar_def<outputiterator, { void(mini_xml), space_type> { text = verbatim[lit(text._1)]; // typedef karma::grammar_def<outputiterator, node = (xml text)[_1 = node._1]; void(mini_xml), space_type> base_type; // boost::mpl::print<typename base_type::start_type::param_types> x; start_tag = '<' << verbatim[lit(start_tag._1)] mini_xml_generator() << '>'; {? end_tag = "</" << verbatim[lit(end_tag._1)] } << '>'; karma::rule<outputiterator, void(mini_xml), space_type> xml; xml; karma::rule<outputiterator, xml = start_tag(at_c<0>(xml._1)) void(mini_xml_node), space_type> node; node; karma::rule<outputiterator, << (*node)[ref(at_c<1>(xml._1))] void(std::string), space_type> text; text; karma::rule<outputiterator, << end_tag(at_c<0>(xml._1)) void(std::string), space_type> start_tag; start_tag; karma::rule<outputiterator, } void(std::string), space_type> end_tag; end_tag; };

17 2.0 Errorhandling expression.name("expression"); Was ist fehlgeschlagen? expression.template on_error<fail> (( std::cout << val("error! Expecting ") << _4 << val(" here: \"") << construct<std::string>(_3, _2) << val("\"") << std::endl )); Iteratoren zur Fehlerposition und Input Ende.

18 2.0 Errorhandling expression = term[_val = _1] >> *( ('+' > term[_val += _1]) ('-' expression > term[_val = -= _1]) ); term[_val = _1] >> *( ('+' > term[_val += _1]) ('-' > term[_val -= _1]) ); 123 * ( ] / 20 Error! Expecting ')' here: "] / 20" > ist eine Sonderform von >> Nach + muss ein term kommen blah Error! Expecting term here: " blah"

19 2.0 Aktueller Stand Momentan online im SVN erhältlich Es gibt einen Snapshot für die BoostCon Abhängigkeit zum aktuellen Boost cvs::head (Fusion/Proto) Momentan keine Online Dokumentation

20 2.0 Fragen

Einführung in Boost Spirit Qi

Einführung in Boost Spirit Qi Einführung in Boost Spirit Qi Das C++ Parser Framework Warum noch ein Parser? - Komplexität der Grammatik + Lex/Yacc, AntLR Boost Spirit istringstream, lexical_cast + Grammatik im Quellcode + kein externes

Mehr

kurze Wiederholung class templates

kurze Wiederholung class templates kurze Wiederholung class templates Ein class template ist ein Template, dass mit einem oder mehreren typename -Parametern implementiert wird. Um solch ein Template zu benutzen, übergibt man dem Template

Mehr

Rainer Stropek cubido. Baumschule Expression Trees in C#, CLR und DLR

Rainer Stropek cubido. Baumschule Expression Trees in C#, CLR und DLR Rainer Stropek cubido Baumschule Expression Trees in C#, CLR und DLR Inhalt Als Anwendungsentwickler kommt man selten mit Expression Trees in Berührung. Sie sind ein Implementierungsdetail von LINQ. Ihre

Mehr

C++ Kurs Teil 3. Standard Template Library (STL) Kommunikation mit der shell Hyper Text Markup Language (HTML)

C++ Kurs Teil 3. Standard Template Library (STL) Kommunikation mit der shell Hyper Text Markup Language (HTML) C++ Kurs Teil 3 Standard Template Library (STL) Übersicht vector algorithm: sort, for_each map Kommunikation mit der shell Hyper Text Markup Language (HTML) O. Ronneberger: C++ Kurs Teil 3 Seite 1

Mehr

Objektorientierte Programmierung mit C++ Vector und List

Objektorientierte Programmierung mit C++ Vector und List Vector und List Ziel, Inhalt Wir lernen die Klassen vector und list aus der Standard-C++ Library kennen und anwenden. In einer Übung wenden wir diese Klassen an um einen Medienshop (CD s und Bücher) zu

Mehr

Die Phase in der die Schablone vom Compiler erstmalig inspiziert wird (Template-Parameter sind noch unbekannt): lookup von non-dependent names

Die Phase in der die Schablone vom Compiler erstmalig inspiziert wird (Template-Parameter sind noch unbekannt): lookup von non-dependent names Weitere (semantische) Besonderheiten bei Templates: two-phase lookup: 1. Die Phase in der die Schablone vom Compiler erstmalig inspiziert wird (Template-Parameter sind noch unbekannt): lookup von non-dependent

Mehr

Einführung in C ++ und die Objektorientierte Programierung

Einführung in C ++ und die Objektorientierte Programierung 1/38 Einführung in C ++ und die Objektorientierte Programierung Florian Adamsky, B. Sc. (PhD cand.) florian.adamsky@iem.thm.de http://florian.adamsky.it/ cbd Softwareentwicklung im WS 2014/15 2/38 Outline

Mehr

Modernes C++ (C++11)

Modernes C++ (C++11) Modernes C++ (C++11) Dr. Klaus Ahrens C++ History 3 C++ History ~ 1980 Bjarne Stroustrup C with Classes Cfront (C++ --> C) 1983 erstmalige Nennung von C++ 1990 Annotated Reference Manual 1994 erster Entwurf

Mehr

DSLs mit Xtext entwerfen. 17.08.2012, A. Arnold

DSLs mit Xtext entwerfen. 17.08.2012, A. Arnold DSLs mit Xtext entwerfen 17.08.2012, A. Arnold Copyright 2012 anderscore GmbH Inhalt 1. Was sind DSLs? 2. Xtext Konzepte 3. Einführung ins Sprachdesign 4. Hands On! 3 4 8 20 2 Was sind DSLs? Domain Specific

Mehr

variadic templates Templates mit variabler Argumentanzahl?

variadic templates Templates mit variabler Argumentanzahl? Templates mit variabler Argumentanzahl? bislang in C++98 nicht direkt möglich, stattdessen (geniale Idee von A. Alexandrescu): Typlisten template struct Typelist {!typedef T Head;!typedef

Mehr

Lex und Yacc Lt. Worf, scannen Sie das Schiff! 300dpi, Sir?

Lex und Yacc Lt. Worf, scannen Sie das Schiff! 300dpi, Sir? Lex und Yacc Lt. Worf, scannen Sie das Schiff! 300dpi, Sir? Hagen Paul Pfeifer hagen@jauu.net 29. April 2004 Lex und Yacc Überblick Einführung Lex und Yacc 1 Überblick Einführung Beispiele Lex und Yacc

Mehr

In C++ kann man fünf Teilsprachen, die bezüglich Syntax und Semantik differieren, unterscheiden. Objektorientierte Erweiterungen von C

In C++ kann man fünf Teilsprachen, die bezüglich Syntax und Semantik differieren, unterscheiden. Objektorientierte Erweiterungen von C Bemerkungen zu C++: In C++ kann man fünf Teilsprachen, die bezüglich Syntax und Semantik differieren, unterscheiden. Es sind: C-Sprache Objektorientierte Erweiterungen von C Templates Standardbibliothek

Mehr

Programmierkurs Python II

Programmierkurs Python II Programmierkurs Python II Michaela Regneri & Stefan Thater FR 4.7 Allgemeine Linguistik (Computerlinguistik) Universität des Saarlandes Sommersemester 2011 Prüfungsleistungen Klausur am Semesterende -

Mehr

Distributed Computing Group

Distributed Computing Group JAVA TUTORIAL Distributed Computing Group Vernetzte Systeme - SS 06 Übersicht Warum Java? Interoperabilität grosse und gut dokumentierte Library weit verbreitet Syntax sehr nahe an C Erfahrung: Java wird

Mehr

C++ Teil 7. Sven Groß. 3. Juni Sven Groß (IGPM, RWTH Aachen) C++ Teil 7 3. Juni / 16

C++ Teil 7. Sven Groß. 3. Juni Sven Groß (IGPM, RWTH Aachen) C++ Teil 7 3. Juni / 16 C++ Teil 7 Sven Groß 3. Juni 2016 Sven Groß (IGPM, RWTH Aachen) C++ Teil 7 3. Juni 2016 1 / 16 Themen der letzten Vorlesung dynamische Speicherverwaltung (Wdh.) Cast bei Zeigern STL-Vektoren + Live Programming

Mehr

C++ Templates. Wozu Templates? Definition von Templates. Gebrauch von Templates. Instanziierung und Organisation

C++ Templates. Wozu Templates? Definition von Templates. Gebrauch von Templates. Instanziierung und Organisation C++ Templates Wozu Templates? Definition von Templates Gebrauch von Templates Instanziierung und Organisation Birgit Möller & Denis Williams AG Bioinformatik & Mustererkennung Institut für Informatik Martin-Luther-Universität

Mehr

19. Vererbung und Polymorphie

19. Vererbung und Polymorphie 667 19. Vererbung und Polymorphie Ausdrucksbäume, Vererbung, Code-Wiederverwendung, virtuelle Funktionen, Polymorphie, Konzepte des objektorientierten Programmierens (Ausdrucks-)Bäume -(3-(4-5))*(3+4*5)/6

Mehr

18. Vererbung und Polymorphie

18. Vererbung und Polymorphie 617 18. Vererbung und Polymorphie Ausdrucksbäume, Vererbung, Code-Wiederverwendung, virtuelle Funktionen, Polymorphie, Konzepte des objektorientierten Programmierens (Ausdrucks-)Bäume -(3-(4-5))*(3+4*5)/6

Mehr

18. Vererbung und Polymorphie

18. Vererbung und Polymorphie 590 18. Vererbung und Polymorphie Ausdrucksbäume, Vererbung, Code-Wiederverwendung, virtuelle Funktionen, Polymorphie, Konzepte des objektorientierten Programmierens (Ausdrucks-)Bäume 591 -(3-(4-5))*(3+4*5)/6

Mehr

Metaprogrammierung in C/C++

Metaprogrammierung in C/C++ Metaprogrammierung in C/C++ Vortrag im WP Deeply Embedded Philipp Bandow Jakob Kasicz Orhan Aykac Inhalt 1 Metaprogrammierung mit dem Präprozessor 2 Templates Einleitung Parameter und Typen Abhängige Namen

Mehr

DAP2-Programmierpraktikum Einführung in C++ (Teil 1)

DAP2-Programmierpraktikum Einführung in C++ (Teil 1) DAP2-Programmierpraktikum Einführung in C++ (Teil 1) Carsten Gutwenger 11. April 2008 Lehrstuhl 11 Algorithm Engineering Fakultät für Informatik, TU Dortmund Überblick Mein erstes C++-Programm Namensräume

Mehr

Zusammenfassung des Handzettels für Programmieren in C

Zusammenfassung des Handzettels für Programmieren in C Zusammenfassung des Handzettels für Programmieren in C In der handschriftlichen Kopie werden mehr Abkürzungen verwendet. Alles Grün markierte dient zum lernen und wird nicht auf den Handzettel übertragen.

Mehr

Übung zur Vorlesung Programmieren in C

Übung zur Vorlesung Programmieren in C Übung zur Vorlesung Programmieren in C 10 Structs & Unions Marvin Gülker Ruhruniversität Bochum Wintersemester 2015/2016 Marvin Gülker (Ruhruniversität Bochum) 10 Structs & Unions Wintersemester 2015/2016

Mehr

Programmieren 3 C++ Prof. Peter Sommerlad Fredy Ulmer

Programmieren 3 C++ Prof. Peter Sommerlad Fredy Ulmer Programmieren 3 C++ Prof. Peter Sommerlad Fredy Ulmer Was Sie erwartet: Modernes C++ anwenden o ISO 14882 ist Norm für C++! o kein schlechteres Java, sondern mächtiger Moderne Standardbibliotheken anwenden

Mehr

C++11. neu in C++11: range-based for. Objektorientierte Programmierung mit C++ Ersetzung durch: 1. Elementares C++ int array[] = { 1, 2, 3, 4, 5 };

C++11. neu in C++11: range-based for. Objektorientierte Programmierung mit C++ Ersetzung durch: 1. Elementares C++ int array[] = { 1, 2, 3, 4, 5 }; neu in C++11: range-based for int array[] = { 1, 2, 3, 4, 5 ; for (int x : array) // value x *= 2; C++11 for (int& x : array) // reference x *= 2; Ersetzung durch: { auto && range = range-init; for ( auto

Mehr

Intelligente Zeiger 283

Intelligente Zeiger 283 Intelligente Zeiger 283 smart pointer regular pointer administrative info object contents Intelligente Zeiger (smart pointers) entsprechen weitgehend normalen Zeigern, haben aber Sonderfunktionalitäten

Mehr

Einführung in die Programmiersprache C

Einführung in die Programmiersprache C Einführung in die Programmiersprache C 11 Was bisher verschwiegen wurde Alexander Sczyrba Robert Homann Georg Sauthoff Universität Bielefeld, Technische Fakultät Type qualifier Typen können mit folgenden

Mehr

Einführung in die Programmiersprache C

Einführung in die Programmiersprache C Einführung in die Programmiersprache C 11 Was bisher verschwiegen wurde Alexander Sczyrba Robert Homann Georg Sauthoff Universität Bielefeld, Technische Fakultät Type qualifier Typen können mit folgenden

Mehr

Inhalte der Vorlesung. 4. Der Scanner-Generator lex. 4. Der Scanner-Generator lex. 4.1 lex: Grundlagen

Inhalte der Vorlesung. 4. Der Scanner-Generator lex. 4. Der Scanner-Generator lex. 4.1 lex: Grundlagen Inhalte der Vorlesung 4. Der Scanner-Generator lex 1.Einführung 2.Lexikalische Analyse 3.Der Textstrom-Editor sed 4.Der Scanner-Generator lex (2 Termine) 5.Syntaxanalyse und der Parser-Generator yacc (3

Mehr

Intelligente Zeiger 87

Intelligente Zeiger 87 Intelligente Zeiger 87 smart pointer regular pointer administrative info object contents Intelligente Zeiger (smart pointers) entsprechen weitgehend normalen Zeigern, haben aber Sonderfunktionalitäten

Mehr

Praxisorientierte Einführung in C++ Lektion: "Klassen Templates"

Praxisorientierte Einführung in C++ Lektion: Klassen Templates Praxisorientierte Einführung in C++ Lektion: "Klassen Templates" Christof Elbrechter Neuroinformatics Group, CITEC April 12, 2012 Christof Elbrechter Praxisorientierte Einführung in C++ April 12, 2012

Mehr

Dynamische Datentypen. Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren

Dynamische Datentypen. Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren Dynamische Datentypen Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren Probleme mit Feldern (variabler Länge) man kann sie nicht direkt kopieren und zuweisen Probleme mit

Mehr

RDF RESOURCE DESCRIPTION FRAMEWORK. Referentin: Claudia Langer

RDF RESOURCE DESCRIPTION FRAMEWORK. Referentin: Claudia Langer RDF RESOURCE DESCRIPTION FRAMEWORK Referentin: Claudia Langer Überblick RDF allgemein RDF und XML Praktisches Beispiel RDF allgemein vom WWW Konsortium (W3C) für das Semantic Web entwickelt Sprache zur

Mehr

Programmierkurs. SoSe 2013. Markus Geveler Inst. f. Applied Mathematics, TU Dortmund. markus.geveler@math.tu-dortmund.de

Programmierkurs. SoSe 2013. Markus Geveler Inst. f. Applied Mathematics, TU Dortmund. markus.geveler@math.tu-dortmund.de Programmierkurs SoSe 2013 Markus Geveler Inst. f. Applied Mathematics, TU Dortmund markus.geveler@math.tu-dortmund.de Lesson 8 Was machen wir heute hier? mehr zu pointern und Speicher mehr zu pointern

Mehr

Inhalte der Vorlesung. 6. Syntaxgesteuerte Übersetzung. 6. Syntaxgesteuerte Übersetzung. Attributierter Syntaxbaum

Inhalte der Vorlesung. 6. Syntaxgesteuerte Übersetzung. 6. Syntaxgesteuerte Übersetzung. Attributierter Syntaxbaum Inhalte der Vorlesung 6. Syntaxgesteuerte Übersetzung 1.Einführung 2.Lexikalische Analyse 3.Der Textstrom-Editor sed 4.Der Scanner-Generator lex (2 Termine) 5.Syntaxanalyse und der Parser-Generator yacc

Mehr

Programmier-Befehle - Woche 10

Programmier-Befehle - Woche 10 Funktionen Rekursion Selbstaufruf einer Funktion Jeder rekursive Funktionsaufruf hat seine eigenen, unabhängigen Variablen und Argumente. Dies kann man sich sehr gut anhand des in der Vorlesung gezeigten

Mehr

Alltagsnotizen eines Softwareentwicklers

Alltagsnotizen eines Softwareentwicklers Alltagsnotizen eines Softwareentwicklers Entkoppeln von Objekten durch Callbacks mit c++-interfaces oder boost.function und boost.bind Tags: c++, entkoppeln, objekt, oop, callback, boost.bind, boost.function,

Mehr

Programmieren in C. Zeiger auf Funktionen. Prof. Dr. Nikolaus Wulff

Programmieren in C. Zeiger auf Funktionen. Prof. Dr. Nikolaus Wulff Programmieren in C Zeiger auf Funktionen Prof. Dr. Nikolaus Wulff Zeiger auf Funktionen Zeiger verweisen auf beliebige Speicherstellen. Im Allgemeinen werden Zeiger ausgerichtet auf Variablen, wie z. B.

Mehr

Grundlagen C und C++ Einheit 04: Weitere Grundlagen in C++ Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme

Grundlagen C und C++ Einheit 04: Weitere Grundlagen in C++ Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Grundlagen C und C++ Einheit 04: Weitere Grundlagen in C++ Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda Teil 1: Weitere Grundlagen von C++ Das assert Statement File Input und

Mehr

Bayesian Networks. Syntax Semantics Parametrized Distributions Inference in Bayesian Networks. Exact Inference. Approximate Inference

Bayesian Networks. Syntax Semantics Parametrized Distributions Inference in Bayesian Networks. Exact Inference. Approximate Inference Syntax Semantics Parametrized Distributions Inference in Exact Inference Approximate Inference enumeration variable elimination stochastic simulation Markov Chain Monte Carlo (MCMC) 1 Includes many slides

Mehr

C++-Crashkurs. Jan Rosendahl, Jan-Thorsten Peter, Andreas Guta

C++-Crashkurs. Jan Rosendahl, Jan-Thorsten Peter, Andreas Guta C++-Crashkurs Jan Rosendahl, Jan-Thorsten Peter, Andreas Guta {rosendahl,peter,guta@i6.informatik.rwth-aachen.de Softwareprojektpraktikum Maschinelle Übersetzung SS 2017 Human Language Technology and Pattern

Mehr

WIRTSCHAFTSINFORMATIK

WIRTSCHAFTSINFORMATIK Westfälische Wilhelms-Universität Münster A platform for professional model-driven software development. Präsentation im Rahmen des Seminars Software Engineering WS 08/09 Jan Schürmeier Jan.Schuermeier@gmx.de

Mehr

Introduction to Python. Introduction. First Steps in Python. pseudo random numbers. May 2016

Introduction to Python. Introduction. First Steps in Python. pseudo random numbers. May 2016 to to May 2016 to What is Programming? All computers are stupid. All computers are deterministic. You have to tell the computer what to do. You can tell the computer in any (programming) language) you

Mehr

Java vs. C++: Different by Design

Java vs. C++: Different by Design Java vs. C++: Different by Design Java starke Anlehnung an C++ Deployment Schema: Interpretation OO ist (nahezu) zwingend primäres Kriterium: Komfort diverse (und zumeist nicht abschaltbare) implizite

Mehr

Von C zu C++ Karl Gmeiner

Von C zu C++ Karl Gmeiner Karl Gmeiner 2015 1 Beziehung C und C++ C ist (fast) vollständig in C++ enthalten C++ = C with classes C++ bietet Features, die es in C nicht gibt Vererbung/Polymorphismus Operatorenüberlagerung Generizität

Mehr

Kurze Einführung in die Programmiersprache C++ und in Root

Kurze Einführung in die Programmiersprache C++ und in Root Kurze Einführung in die Programmiersprache C++ und in Root Statistik, Datenanalyse und Simulation; 31.10.2006 Inhalt 1 Einführung in die Programmiersprache C++ Allgemeines Variablen Funktionen 2 1 Einführung

Mehr

Einführung in die STL

Einführung in die STL 1/29 in die STL Florian Adamsky, B. Sc. (PhD cand.) florian.adamsky@iem.thm.de http://florian.adamsky.it/ cbd Softwareentwicklung im WS 2014/15 2/29 Outline 1 3/29 Inhaltsverzeichnis 1 4/29 Typisierung

Mehr

Probeklausur. Klausurdeckblatt. Name der Prüfung: Objekt-orientierte Programmierung mit C++

Probeklausur. Klausurdeckblatt. Name der Prüfung: Objekt-orientierte Programmierung mit C++ Probeklausur Klausurdeckblatt Name der Prüfung: Objekt-orientierte Programmierung mit C++ Datum und Uhrzeit: 23. Februar 2013, 10-12 Uhr Institut: Angewandte Informationsverarbeitung Bearbeitungszeit:

Mehr

Besonderheiten von C#

Besonderheiten von C# Besonderheiten von C# Wert- und Referenztypen int a, b; a = 3; b = a; a++; Debug.Assert( a==4 && b==3 &&!a.equals(b), "int ist doch kein Werttyp" ); RTyp ra, rb; ra = new RTyp(3); rb = ra; ra.inc(); Debug.Assert(

Mehr

Probeklausur. Klausurdeckblatt. Name der Prüfung: Objekt-orientierte Programmierung mit C++ Datum und Uhrzeit: 26. Februar 2015, Uhr

Probeklausur. Klausurdeckblatt. Name der Prüfung: Objekt-orientierte Programmierung mit C++ Datum und Uhrzeit: 26. Februar 2015, Uhr Probeklausur Klausurdeckblatt Name der Prüfung: Objekt-orientierte Programmierung mit C++ Datum und Uhrzeit: 26. Februar 2015, 14 16 Uhr Bearbeitungszeit: 120 Min. Institut: Angewandte Informati- Prüfer:

Mehr

Grundlagen der Programmierung in C Basics

Grundlagen der Programmierung in C Basics Grundlagen der Programmierung in C Basics Wintersemester 2005/2006 G. Zachmann Clausthal University, Germany zach@in.tu-clausthal.de Was ist ein Programm? Abstrakt: Zeichenfolge entsprechend einer formalen

Mehr

0. Einführung & Motivation

0. Einführung & Motivation 0. Einführung & Motivation Ansatz: "C++ für Java-Kenner" Konzentration auf semantische Unterschiede 'gleichartiger' Konzepte Erörterung der C++ -spezifischen Konzepte (Overloading, Templates) Anspruch

Mehr

Übungsstunde 10. Einführung in die Programmierung

Übungsstunde 10. Einführung in die Programmierung Übungsstunde 10 Einführung in die Programmierung Probleme bei Übung 9 [TODO Assistent] Nachbesprechung Übung 10 Aufgabe 1: Klassen (Bonus!) Feedback nach der Korrektur direkt per SVN Aufgabe 2: Interfaces

Mehr

1. Einführung und Unit Testing Programmieren / Algorithmen und Datenstrukturen 2

1. Einführung und Unit Testing Programmieren / Algorithmen und Datenstrukturen 2 1. Einführung und Unit Testing Programmieren / Algorithmen und Datenstrukturen 2 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt Wintersemester 2012 / 2013 1 Agenda Organisation Unit Testing

Mehr

C-Arrays vs. C++-Container

C-Arrays vs. C++-Container C-Arrays vs. C++-Container In C verwendet man (mangels Alternativen) sehr häufig das C-Array (= Feld): im Speicher hintereinander abgelegte Elemente vom gleichen Typ. Arrays haben einen Basistyp (Typ des

Mehr

Elementare Datentypen in C++

Elementare Datentypen in C++ Elementare Datentypen in C++ bool signed/unsigned char signed/unsigned short int signed/unsigned int signed/unsigned long int (signed/unsigned long long int) float double long double void enum char Der

Mehr

Wo und wie lange leben Objekte? globale Objekte lokale Objekte dynamische Objekte

Wo und wie lange leben Objekte? globale Objekte lokale Objekte dynamische Objekte Wo und wie lange leben Objekte? globale Objekte lokale Objekte dynamische Objekte entstehen durch... globale Objektvereinbarung: T o; blocklokale Objektvereinbarung: {.. T o;.. durch expliziten Aufruf

Mehr

Visuelle Kryptographie. Anwendung von Zufallszahlen

Visuelle Kryptographie. Anwendung von Zufallszahlen Visuelle Kryptographie Anwendung von Zufallszahlen Verschlüsseln eines Bildes Wir wollen ein Bild an Alice und Bob schicken, so dass Verschlüsseln eines Bildes Wir wollen ein Bild an Alice und Bob schicken,

Mehr

Struktur des MicroJava- Compilers

Struktur des MicroJava- Compilers Struktur des MicroJava- Compilers Compiler Parser.mj Scanner Code- Generator.obj Symboltabelle UE zu Übersetzerbau Lexikalische Analyse 1 Grammatik ohne Scanner Expr = Term { "+" Term }. Term = Factor

Mehr

Zählen von Objekten einer bestimmten Klasse

Zählen von Objekten einer bestimmten Klasse Zählen von Objekten einer bestimmten Klasse Ziel, Inhalt Zur Übung versuchen wir eine Klasse zu schreiben, mit der es möglich ist Objekte einer bestimmten Klasse zu zählen. Wir werden den ++ und den --

Mehr

C++ Kurs Teil 1. Architektur, Anwendungsspektrum, primitive Datentypen, Funktionsaufrufe, Referenzen, Klassen

C++ Kurs Teil 1. Architektur, Anwendungsspektrum, primitive Datentypen, Funktionsaufrufe, Referenzen, Klassen C++ Kurs Teil 1 "hello world" Vergleich von C++ und Java Architektur, Anwendungsspektrum, primitive Datentypen, Funktionsaufrufe, Referenzen, Klassen C++ Spezialitäten Schlüsselwort 'const', Copy Constructor,

Mehr

1.2 Attribute und Methoden Aufbau einer Java-Klasse:

1.2 Attribute und Methoden Aufbau einer Java-Klasse: Aufbau einer Java-Klasse: public class Quadrat { int groesse; int xposition; String farbe; boolean istsichtbar; public void sichtbarmachen() { istsichtbar = true; public void horizontalbewegen(int distance){

Mehr

Codegeneratoren mit Xtend2. 11.04.2012, A. Arnold

Codegeneratoren mit Xtend2. 11.04.2012, A. Arnold Codegeneratoren mit Xtend2 11.04.2012, A. Arnold Copyright 2012 anderscore GmbH Inhalt 1. Was ist Xtend2? 2. Xtend2 Konzepte 3. Hands On! 3 4 8 20 2 Was ist Xtend2? Funktionale, objektorientierte Sprache

Mehr

Objektorientierte Programmierung mit C++

Objektorientierte Programmierung mit C++ Warum besteht bei private-vererbung die IST EIN - Relation nicht? class A { class B : private A { public:... int i; B b; b.i = 1; // ERROR: `class B' has no member named `i' // Wenn ein B ein A wäre: A*

Mehr

Objektorientierte Programmierung mit C++

Objektorientierte Programmierung mit C++ 2. Neudefinition von globalen Operatoren // Beispiel: allocation trace void* operator new (std::size_t s, const char* info = 0) { if (info) printf("%s\n", info); // NOT cout

Mehr

5. Behälter und Iteratoren. Programmieren in C++ Überblick. 5.1 Einleitung. Programmieren in C++ Überblick: 5. Behälter und Iteratoren

5. Behälter und Iteratoren. Programmieren in C++ Überblick. 5.1 Einleitung. Programmieren in C++ Überblick: 5. Behälter und Iteratoren Programmieren in C++ Überblick 1. Einführung und Überblick 2. Klassen und Objekte: Datenkapselung 3. Erzeugung und Vernichtung von Objekten 4. Ad-hoc Polymorphismus 6. Templates und generische Programmierung

Mehr

Programmieren in C++ Überblick

Programmieren in C++ Überblick Programmieren in C++ Überblick 1. Einführung und Überblick 2. Klassen und Objekte: Datenkapselung 3. Erzeugung und Vernichtung von Objekten 4. Ad-hoc Polymorphismus 6. Templates und generische Programmierung

Mehr

Algorithmen zur Datenanalyse in C++

Algorithmen zur Datenanalyse in C++ Algorithmen zur Datenanalyse in C++ Hartmut Stadie 25.06.2012 Algorithmen zur Datenanalyse in C++ Hartmut Stadie 1/ 15 Einführung Zeiger, Felder und Strukturen Zufallszahlen für andere Verteilungen Algorithmen

Mehr

Übungsstunde 10. Einführung in die Programmierung I

Übungsstunde 10. Einführung in die Programmierung I Übungsstunde 10 Einführung in die Programmierung I Probleme bei Übung 9 [TODO Assistent] Nachbesprechung Übung 10 Aufgabe 1 Comparable boolean lessthan(comparable other) Ziel: Schreiben von Methoden,

Mehr

GATE General Architecture for Text Engineering. Alexander Hein & Erik Dießler (VL Text Analytics - 08.05.2008)

GATE General Architecture for Text Engineering. Alexander Hein & Erik Dießler (VL Text Analytics - 08.05.2008) GATE General Architecture for Text Engineering Alexander Hein & Erik Dießler (VL Text Analytics - 08.05.2008) Überblick GATE Die Idee Die Architektur Was noch - JAPE / DIFF / GUK ANNIE Einige Beispiele

Mehr

Objektorientierte Programmierung mit C++ SS 2007

Objektorientierte Programmierung mit C++ SS 2007 Objektorientierte Programmierung mit C++ SS 2007 Andreas F. Borchert Universität Ulm 5. Juni 2007 Polymorphismus #include Function.h class Function { public: virtual ~Function() {}; virtual std::string

Mehr

Collections und Generics

Collections und Generics Collections und Generics Proseminar Objektorientiertes Programmieren mit.net und C# Nadim Yonis Institut für Informatik Software & Systems Engineering Agenda Collections Standard Collections Comparer Generics

Mehr

3D Programmierpraktikum: Einführung in C++ - Teil 1

3D Programmierpraktikum: Einführung in C++ - Teil 1 3D Programmierpraktikum: Einführung in C++ - Teil 1 Praktikum 3D Programmierung Sebastian Boring, Otmar Hilliges Donnerstag, 27. April 2006 LMU München Medieninformatik Boring/Hilliges 3D Programmierpraktikum

Mehr

Programmieren 2 C++ Überblick

Programmieren 2 C++ Überblick Programmieren 2 C++ Überblick 1. Einführung und Überblick 2. Klassen und Objekte: Datenkapselung 3. Erzeugung und Vernichtung von Objekten 4. Ad-hoc Polymorphismus 6. Templates und generische Programmierung

Mehr

C++ Templates - eine kleine Einführung

C++ Templates - eine kleine Einführung C++ Templates - eine kleine Einführung Peter Ulbrich, Martin Hoffmann Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl Informatik 4 (Verteilte Systeme und Betriebssysteme) www4.informatik.uni-erlangen.de

Mehr

Darstellung und Anwendung der Assessmentergebnisse

Darstellung und Anwendung der Assessmentergebnisse Process flow Remarks Role Documents, data, tool input, output Important: Involve as many PZU as possible PZO Start Use appropriate templates for the process documentation Define purpose and scope Define

Mehr

Prof. Dr. Uwe Schmidt. 21. August Aufgaben zur Klausur C und Objektorientierte Programmierung im SS 2007 (WI h103, II h105, MI h353)

Prof. Dr. Uwe Schmidt. 21. August Aufgaben zur Klausur C und Objektorientierte Programmierung im SS 2007 (WI h103, II h105, MI h353) Prof. Dr. Uwe Schmidt 21. August 2007 Aufgaben zur Klausur C und Objektorientierte Programmierung im SS 2007 (WI h103, II h105, MI h353) Zeit: 150 Minuten erlaubte Hilfsmittel: keine Bitte tragen Sie Ihre

Mehr

Laborübung aus Systemnahe Programmierung

Laborübung aus Systemnahe Programmierung Laborübung aus Systemnahe Programmierung C - Block für Fortgeschrittene Roman Obermaisser Institut für Technische Informatik 2008 Systemprogrammierung C-Block 1 Übersicht Strukturen Eigene Typen Funktionen

Mehr

C++ Kurs Teil 3. Standard Template Library (STL) Exceptions Kommunikation mit der shell. Übersicht vector<> algorithm: sort, for_each map<>

C++ Kurs Teil 3. Standard Template Library (STL) Exceptions Kommunikation mit der shell. Übersicht vector<> algorithm: sort, for_each map<> C++ Kurs Teil 3 Standard Template Library (STL) Übersicht vector algorithm: sort, for_each map Exceptions Kommunikation mit der shell O. Ronneberger: C++ Kurs Teil 3 Seite 1 Standard Template Library

Mehr

1 #include <iostream> 2 3 int main() { 4 std::cout << "Hello World!\n"; 5 return 0; 6 }

1 #include <iostream> 2 3 int main() { 4 std::cout << Hello World!\n; 5 return 0; 6 } Was ist C++ C++ Was ist C++? Wie erstellt man ein C++ Programm? Hello World! mit C++ Weiterentwicklung von C Entwicklung ab 1979 bei AT&T Entwickler: Bjarne Stroustrup C++ ist abwärtskompatibel zu C keine

Mehr

Fortgeschrittene C++-Programmierung

Fortgeschrittene C++-Programmierung Vorlesung: "Fortgeschrittene C++-Programmierung" 16.04.2009 Fortgeschrittene C++-Programmierung SS 2009 Teil 1 Sandro Andreotti - andreott@inf.fu-berlin.de 1 Vorlesung: "Fortgeschrittene C++-Programmierung"

Mehr

Programmieren in C. Speicher anfordern, Unions und Bitfelder. Prof. Dr. Nikolaus Wulff

Programmieren in C. Speicher anfordern, Unions und Bitfelder. Prof. Dr. Nikolaus Wulff Programmieren in C Speicher anfordern, Unions und Bitfelder Prof. Dr. Nikolaus Wulff Vergleich: Felder und Strukturen Felder müssen Elemente vom selben Typ enthalten. Strukturen können Elemente unterschiedlichen

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

Objektorientierte Programmierung mit C++ SS 2007

Objektorientierte Programmierung mit C++ SS 2007 Objektorientierte Programmierung mit C++ SS 2007 Andreas F. Borchert Universität Ulm 10. Juli 2007 Fortgeschrittene Template-Techniken C++ bietet eine Vielfalt weiterer Techniken für Templates: Templates

Mehr

Grundkurs C++ IDE Klassenhierarchien

Grundkurs C++ IDE Klassenhierarchien Grundkurs C++ IDE Klassenhierarchien Martin Knopp 03.05.2017 Folie 1/34 GK C++: IDE, Klassenhierarchien Martin Knopp 03.05.2017 IDE Integrated Development Environment Wir empfehlen: Qt Creator (Bestandteil

Mehr

Agile Modellierung mit UML Lab

Agile Modellierung mit UML Lab Agile Modellierung mit UML Lab Produktisierung und Vertrieb eines MDSE Tools in der Praxis Dipl.-Inf. Manuel Bork Yatta Solutions GmbH t e +49 (0)561 5743277-21 bork@yatta.de @ManuelBork UNSER GESCHÄFT

Mehr

VNUML Projektpraktikum

VNUML Projektpraktikum VNUML Projektpraktikum Michael Monreal, Tomasz Oliwa 14. Juni 2006 Abstract Entstanden im Projektpraktikum Simulationen mit User Mode Linux, der vnuml Multiinstaller und VOToN, das VNUML-Old-To-New Programm

Mehr

Grundkurs C++ IDE Klassenhierarchien

Grundkurs C++ IDE Klassenhierarchien Grundkurs C++ IDE Klassenhierarchien Martin Knopp & Johannes Feldmaier 20.04.2016 Folie 1/35 GK C++: IDE, Klassenhierarchien Martin Knopp & Johannes Feldmaier 20.04.2016 IDE Integrated Development Environment

Mehr

int main(){ int main(){ Das wollen wir doch genau verstehen! std::vector<int> v(10,0); // Vector of length 10

int main(){ int main(){ Das wollen wir doch genau verstehen! std::vector<int> v(10,0); // Vector of length 10 Wir erinnern uns #include #include 6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren, Subskript-Operator,

Mehr

Dynamische Datentypen

Dynamische Datentypen Dynamische Datentypen Tupel und Folgen o Wertebereich eines Structs / einer Klasse: T1 T2... Tk Werte sind k-tupel Tupel und Folgen o Wertebereich eines Structs / einer Klasse: T1 T2... Tk Werte sind k-tupel

Mehr

Effizientes und effektives Testen von Embedded SW mit Google Test. Michael Bernhard

Effizientes und effektives Testen von Embedded SW mit Google Test. Michael Bernhard Effizientes und effektives Testen von Embedded SW mit Google Test Michael Bernhard 1 Agenda Warum testen? Wie testen? Google Test und Google Mock Toolintegration Schlussfolgerung 2 Die Norm fordert es

Mehr

Grundlagen der Programmierung in C Basics

Grundlagen der Programmierung in C Basics Was ist ein Programm? Grundlagen der Programmierung in C Basics Wintersemester 2005/2006 G. Zachmann Clausthal University, Germany zach@in.tu-clausthal.de Abstrakt: Zeichenfolge entsprechend einer formalen

Mehr

AlDaBi Praktikum WS 13/14 Sascha Meiers

AlDaBi Praktikum WS 13/14 Sascha Meiers AlDaBi Praktikum WS 13/14 Sascha Meiers Slides von David Weese 2010/11 Bearbeitet durch René Rahn/Kathrin Trappe WS 2012/13 Erneut bearbeitet durch Sascha Meiers WS 2013/14 Praktikum http://www.mi.fu-berlin.de/w/abi/aldabiws13praktikum

Mehr

19. STL Container Programmieren / Algorithmen und Datenstrukturen 2

19. STL Container Programmieren / Algorithmen und Datenstrukturen 2 19. STL Container Programmieren / Algorithmen und Datenstrukturen 2 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt Wintersemester 2012 / 2013 1 Agenda Kontrollfragen STL Container: Übersicht

Mehr

SimpleStat mit Methoden

SimpleStat mit Methoden SimpleStat mit Methoden Als Ausgangspunkt nehmen wir folgende Definition (Version 1) von SimpleStat: double sum2; -Quadrate Dieser Objekttyp verfügt über keine Methoden und alle Datenattribute sind public.

Mehr

C++ Teil 6. Sven Groß. 27. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 14

C++ 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

Mehr

6. Templates AlDaBi Prak3kum

6. Templates AlDaBi Prak3kum 6. Templates AlDaBi Prak3kum David Weese WS 2010/11 Templates Inhalt Template Subclassing Bemerkungen zur P- Aufgabe TEMPLATES Programmierkurs C/C++ für FortgeschriCene, David Weese SS 2010 http://www.inf.fu-berlin.de/en/groups/abi/lectures_past/ss2010/k_cpp_advanced/index.html

Mehr

Informatik für Mathematiker und Physiker Woche 6. David Sommer

Informatik für Mathematiker und Physiker Woche 6. David Sommer Informatik für Mathematiker und Physiker Woche 6 David Sommer David Sommer October 31, 2017 1 Heute: 1. Rückblick Übungen Woche 5 2. Libraries 3. Referenzen 4. Step-Wise Refinement David Sommer October

Mehr