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