• 480 likes • 761 Views
Entwurf, Implementierung und Integration eines C# Struktureditors. Kirill Osenkov. Inhalt. Texteditoren: Übersicht Was ist ein Struktureditor? Demo des Struktureditors Eigenschaften der Struktureditoren Integration mit SharpDevelop IDE Architektur Ausblick. Texteditoren.
E N D
Entwurf, Implementierung und Integration eines C# Struktureditors Kirill Osenkov BTU Cottbus, Lehrstuhl Programmiersprachen und Compilerbau 4. Juli 2007
Inhalt • Texteditoren: Übersicht • Was ist ein Struktureditor? • Demo des Struktureditors • Eigenschaften der Struktureditoren • Integration mit SharpDevelop IDE • Architektur • Ausblick
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
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”
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
Ziel • übersichtliche Darstellung des Programms • bequemes Editieren • Produktivität des Entwicklers
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
Entwicklungsumgebungen • Editor ist Hauptbestandteil einer IDE • Intelligente IDE Features: • Vervollständigung • Debugging • Fehleranzeige
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)
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
Unterschied in der Architektur Texteditor Quelltext Parser Syntaxbaum (AST) Codegenerator Binäre Dateien
Unterschied in der Architektur Texteditor Struktureditor Quelltext Parser Syntaxbaum (AST) Codegenerator Binäre Dateien
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
Eigenschaften: atomare Operationen • der Editor operiert mit ganzen Sprachkonstrukten • Transaktionen und Undo/Redo • Geschichte der Aktionen
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
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
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
Eigenschaften: Visualisierung • Controls eingebettet in Code: Quelle: Martin Plante, Mitch Denny in “Orcas Code Builders”
Eigenschaften: Visualisierung • Controls eingebettet in Code: Quelle: Lutz Roeder, www.aisto.com/roeder/paper
Eigenschaften: Visualisierung • Controls eingebettet in Code: Quelle: Lutz Roeder, www.aisto.com/roeder/paper
Eigenschaften: Visualisierung • Controls eingebettet in Code: Quelle: Lutz Roeder, www.aisto.com/roeder/paper
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)
Architektur StructuredEditor add-in SharpDevelop CSharpBlocks Framework für Struktureditoren
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
Blöcke des Frameworks • Das Framework für Struktureditoren definiert Basisklassen für Blöcke, von denen man erben kann
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
Schichtenarchitektur Framework CSharpBlocks
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
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
Mehr Informationen www.osenkov.com/diplom
Ende • Vielen Dank für Ihre Aufmerksamkeit! • Fragen?
Zusätzliche Folien • Ich habe nicht alles erzählt, was ich weiss • noch ein paar Trümpfe im Ärmel!
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
Erkenntnisse über IDE Architektur • Man braucht erweiterbare AST Datenstruktur • Observable AST • Model-View-Controller
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
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