btu cottbus, lehrstuhl programmiersprachen und compilerbau 4. juli 2007 entwurf, implementierung und...

48
BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

Upload: kunigunde-wicklein

Post on 05-Apr-2015

106 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau4. Juli 2007

Entwurf, Implementierung und Integration eines C#

Struktureditors

Kirill Osenkov

Page 2: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

2 / 43

Inhalt

1. Texteditoren: Übersicht

2. Was ist ein Struktureditor?

3. Demo des Struktureditors

4. Eigenschaften der Struktureditoren

5. Integration mit SharpDevelop IDE

6. Architektur

7. Ausblick

Page 3: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

3 / 43

Texteditoren

Hauptdatenstruktur:• ein Strom von Zeichen• ein Array von Textzeilen

Nutzer trennt Sprachkonstrukte voneinander ab

• mittels spezieller Syntax• Zeichen wie { } , ; // und Formattierung• Tipps für den Compiler

Page 4: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

4 / 43

Probleme der Texteditoren

Editieroperationen sind lang• erst selektieren, dann Operation anwenden• nicht atomar• viel Tippen - Hilfszeichen

Syntaxkorrektheit muss durch Programmierer sichergestellt werden

• Compiler ist nur ein “Sicherheitsnetz”

Page 5: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

5 / 43

Probleme der Texteditoren (2)

Darstellung eines Programm als Text ist nicht immer optimal

• Sprachkonstrukte werden durch Syntax abgetrennt• Syntax muss gelernt werden

Programmierer müssen sich um die Formattierung kümmern

• Unterschiedliche Stilfibel und Codierrichtlinien

Page 6: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

6 / 43

Ziel

übersichtliche Darstellung des Programms bequemes Editieren Produktivität des Entwicklers

Page 7: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

7 / 43

Aufgaben

einen Struktureditor implementieren• Plattform: Microsoft .NET 2.0• Zielsprache: Untermenge von C# 1.0

als Komponente in eine Entwicklungsumgebung integrieren

• Wahl der IDE: SharpDevelop• Open-Source• gute Architektur, gute Erweiterbarkeit

Page 8: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

8 / 43

Entwicklungsumgebungen

Editor ist Hauptbestandteil einer IDE Intelligente IDE Features:

• Vervollständigung• Debugging• Fehleranzeige

Page 9: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

9 / 43

Texteditoren

operieren auf Zeilen von Text benutzen die Syntax (spezielle Zeichen)

zur Abgrenzung von Sprachkonstrukten• { } ;• BEGIN … END

Informationen über das editierte Programm werden durch Scanner und Parser gewonnen

• es entsteht ein Syntaxbaum (AST)

Page 10: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

10 / 43

Struktureditor

operiert auf Sprachkonstrukten direkt der Syntaxbaum wird visuell dargestellt jede Editieroperation modifiziert den Baum

direkt kein Parser notwendig

das Programm ist zu jedem Zeitpunkt:• korrekt• oder kann zu einem korrekten Programm

vervollständigt werden

Page 11: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

11 / 43

Struktureditor Demo

Page 12: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

12 / 43

Struktureditor Demo

Page 13: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

13 / 43

Struktureditor Demo

Page 14: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

14 / 43

Unterschied in der Architektur

Texteditor

Quelltext Syntaxbaum (AST) Binäre DateienParser Codegenerator

Page 15: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

15 / 43

Unterschied in der Architektur

Texteditor

Quelltext Syntaxbaum (AST)

Struktureditor

Binäre DateienParser Codegenerator

Page 16: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

16 / 43

Vorteile der Struktureditoren:

für Nutzer des Editors• Nutzbarkeit• weniger Tastendrücke notwendig• Editor übernimmt Syntax und Formattierung

für Entwickler des Editors und der IDE• bessere Implementierung• einfacher, klarer, übersichtlicher• erweiterbar• flexibler

Page 17: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

17 / 43

Eigenschaften: atomare Operationen

der Editor operiert mit ganzen Sprachkonstrukten

Transaktionen und Undo/Redo Geschichte der Aktionen

Page 18: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

18 / 43

Eigenschaften: Korrektheit

Syntaxfehler vermeiden Typisierung garantiert den korrekten

Aufbau des Programms Immer korrekt geklammert dank Einbettung

von Blöcken Eine Liste von möglichen

Sprachkonstrukten und Ergänzungen Randbedingungen / Einschränkungen

Page 19: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

19 / 43

Eigenschaften: Nutzbarkeit

Größtes Problem bei Struktureditoren Lösbar durch Mischung aus Text und

Struktur Hybrid Editoren Mehr Kenntnisse über das Programm

intelligentere Hilfe und Vervollständigung der Editor übernimmt die Formattierung wenige Tastendrücke bessere

Nutzbarkeit

Page 20: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

20 / 43

Eigenschaften: Visualisierung

Trennung Inhalt / Darstellung• Analog zu XHTML / CSS• Model-View-Controller (MVC)• Sichten

Codierrichtlinien• automatische Formattierung und Umformattierung• eigene Richtlinien anwendbar

bessere Anzeigemöglichkeiten• Zuklappen• Filtern• Sortieren

Page 21: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

21 / 43

Eigenschaften: Visualisierung

Controls eingebettet in Code:

Quelle: Martin Plante, Mitch Denny in “Orcas Code Builders”

Page 22: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

22 / 43

Eigenschaften: Visualisierung

Controls eingebettet in Code:

Quelle: Lutz Roeder, www.aisto.com/roeder/paper

Page 23: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

23 / 43

Eigenschaften: Visualisierung

Controls eingebettet in Code:

Quelle: Lutz Roeder, www.aisto.com/roeder/paper

Page 24: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

24 / 43

Eigenschaften: Visualisierung

Controls eingebettet in Code:

Quelle: Lutz Roeder, www.aisto.com/roeder/paper

Page 25: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

25 / 43

Architektur

Page 26: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

26 / 43

Architektur

Framework für Struktureditoren• Utils• Canvas• Controls• Core

Struktureditor• CSharpBlocks

Host-Anwendung für den Editor (z.B. IDE)• StructuredEditor (SharpDevelop IDE)• CSharpEditor (alleinstehend)

Page 27: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

27 / 43

Architektur

StructuredEditor add-in

SharpDevelop CSharpBlocks

Framework für Struktureditoren

Page 28: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

28 / 43

SharpDevelop

Page 29: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

29 / 43

Endprodukt: Editor in SharpDevelop

Page 30: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

30 / 43

Demo: Vervollständigung

Page 31: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

31 / 43

Editor (alleinstehend)

Page 32: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

32 / 43

Implementierung: Blöcke

Page 33: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

33 / 43

Datenstruktur: Blöcke

Bausteine eines Struktureditors Modellieren Sprachkonstrukte Bilden eine Hierarchie durch Schachtelung Instanzen von ContainerBlock können zur

Laufzeit Instanzen von beliebigen Block Klassen beinhalten

Page 34: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

34 / 43

Blöcke des Frameworks

Das Framework für Struktureditoren definiert Basisklassen für Blöcke, von denen man erben kann

Page 35: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

35 / 43

Block Klassenhierarchie

Page 36: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

36 / 43

Textblöcke

Page 37: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

37 / 43

Editor-spezifische Blöcke

Der Editor definiert eigene Blöcke zum Modellieren von C# Sprachkonstrukten

Die Blöcke erben von den Grundblöcken des Frameworks

Page 38: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

38 / 43

SchichtenarchitekturFramework

CSharpBlocks

Page 39: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

39 / 43

Typ-deklarationen

Page 40: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

40 / 43

Implementierte Funktionalität

Blöcke: Datenstruktur und Operationen Darstellung auf dem Bildschirm Fokus und Navigation Transactionssystem (Undo/Redo) Drag & Drop, Copy & Paste Vervollständigung Import von Blöcken aus C# Quellcode Generieren von C# Quellcode aus Blöcken Kontext-Hilfe

Page 41: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

41 / 43

Ausblick

Generieren von Editoren aus einer Grammatik (Editor für Editoren)

Einbettung von Sprachen MDA, DSL, Language Workbenches Erweitern der Programmiersprache, ohne

die Programmiersprache zu erweitern Metaprogrammierung (generative) Markup Sprachen (HTML, XML, etc.) Epigram

Page 42: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

42 / 43

Mehr Informationen

www.osenkov.com/diplom

Page 43: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

43 / 43

Ende

Vielen Dank für Ihre Aufmerksamkeit! Fragen?

Page 44: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

44 / 43

Zusätzliche Folien

Ich habe nicht alles erzählt, was ich weiss noch ein paar Trümpfe im Ärmel!

Page 45: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

45 / 43

Erkenntnisse über IDE Architektur

Editor: Black-Box• Round-tripping notwendig• operiert nicht auf AST

Compiler: Black-Box• Keine Programmierschnittstelle• AST ist intern• keine Integrationsmöglichkeiten• Werkzeuge müssen Compiler neu-implementieren

Page 46: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

46 / 43

Erkenntnisse über IDE Architektur

Man braucht erweiterbare AST Datenstruktur

Observable AST Model-View-Controller

Page 47: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

47 / 43

Forschung auf dem Gebiet

1980’er – Modula, Pascal Synthesizer Generator Intentional Programming Language Oriented Programming, LOP,

Language Workbenches JetBrains MPS www.programtree.com Roedy Green – SCID Lava und LavaPE

Page 48: BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov

48 / 43

Nachteile der Struktureditoren

ungewohnt Nutzbarkeit? weniger Flexibilität und Freiheit muss inkorrekte Zwischenzustände des

Programms erlauben muss erlernt werden viel komplexer zu implementieren als ein

Texteditor große Plattformabhängigkeiten