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

Transcript of BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007 Entwurf, Implementierung und...

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