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

Preview:

Citation preview

BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau4. 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

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

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”

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

6 / 43

Ziel

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

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

8 / 43

Entwicklungsumgebungen

Editor ist Hauptbestandteil einer IDE Intelligente IDE Features:

• Vervollständigung• Debugging• Fehleranzeige

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)

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

11 / 43

Struktureditor Demo

12 / 43

Struktureditor Demo

13 / 43

Struktureditor Demo

14 / 43

Unterschied in der Architektur

Texteditor

Quelltext Syntaxbaum (AST) Binäre DateienParser Codegenerator

15 / 43

Unterschied in der Architektur

Texteditor

Quelltext Syntaxbaum (AST)

Struktureditor

Binäre DateienParser Codegenerator

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

17 / 43

Eigenschaften: atomare Operationen

der Editor operiert mit ganzen Sprachkonstrukten

Transaktionen und Undo/Redo Geschichte der Aktionen

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

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

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

21 / 43

Eigenschaften: Visualisierung

Controls eingebettet in Code:

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

22 / 43

Eigenschaften: Visualisierung

Controls eingebettet in Code:

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

23 / 43

Eigenschaften: Visualisierung

Controls eingebettet in Code:

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

24 / 43

Eigenschaften: Visualisierung

Controls eingebettet in Code:

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

25 / 43

Architektur

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)

27 / 43

Architektur

StructuredEditor add-in

SharpDevelop CSharpBlocks

Framework für Struktureditoren

28 / 43

SharpDevelop

29 / 43

Endprodukt: Editor in SharpDevelop

30 / 43

Demo: Vervollständigung

31 / 43

Editor (alleinstehend)

32 / 43

Implementierung: Blöcke

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

34 / 43

Blöcke des Frameworks

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

35 / 43

Block Klassenhierarchie

36 / 43

Textblöcke

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

38 / 43

SchichtenarchitekturFramework

CSharpBlocks

39 / 43

Typ-deklarationen

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

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

42 / 43

Mehr Informationen

www.osenkov.com/diplom

43 / 43

Ende

Vielen Dank für Ihre Aufmerksamkeit! Fragen?

44 / 43

Zusätzliche Folien

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

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

46 / 43

Erkenntnisse über IDE Architektur

Man braucht erweiterbare AST Datenstruktur

Observable AST Model-View-Controller

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

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

Recommended