1 / 48

Entwurf, Implementierung und Integration eines C# Struktureditors

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.

carrington
Download Presentation

Entwurf, Implementierung und Integration eines C# Struktureditors

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Inhalt • Texteditoren: Übersicht • Was ist ein Struktureditor? • Demo des Struktureditors • Eigenschaften der Struktureditoren • Integration mit SharpDevelop IDE • Architektur • Ausblick

  3. 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. 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. 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. Ziel • übersichtliche Darstellung des Programms • bequemes Editieren • Produktivität des Entwicklers

  7. 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. Entwicklungsumgebungen • Editor ist Hauptbestandteil einer IDE • Intelligente IDE Features: • Vervollständigung • Debugging • Fehleranzeige

  9. 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. 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. Struktureditor Demo

  12. Struktureditor Demo

  13. Struktureditor Demo

  14. Unterschied in der Architektur Texteditor Quelltext Parser Syntaxbaum (AST) Codegenerator Binäre Dateien

  15. Unterschied in der Architektur Texteditor Struktureditor Quelltext Parser Syntaxbaum (AST) Codegenerator Binäre Dateien

  16. 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. Eigenschaften: atomare Operationen • der Editor operiert mit ganzen Sprachkonstrukten • Transaktionen und Undo/Redo • Geschichte der Aktionen

  18. 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. 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. 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. Eigenschaften: Visualisierung • Controls eingebettet in Code: Quelle: Martin Plante, Mitch Denny in “Orcas Code Builders”

  22. Eigenschaften: Visualisierung • Controls eingebettet in Code: Quelle: Lutz Roeder, www.aisto.com/roeder/paper

  23. Eigenschaften: Visualisierung • Controls eingebettet in Code: Quelle: Lutz Roeder, www.aisto.com/roeder/paper

  24. Eigenschaften: Visualisierung • Controls eingebettet in Code: Quelle: Lutz Roeder, www.aisto.com/roeder/paper

  25. Architektur

  26. 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. Architektur StructuredEditor add-in SharpDevelop CSharpBlocks Framework für Struktureditoren

  28. SharpDevelop

  29. Endprodukt: Editor in SharpDevelop

  30. Demo: Vervollständigung

  31. Editor (alleinstehend)

  32. Implementierung: Blöcke

  33. 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. Blöcke des Frameworks • Das Framework für Struktureditoren definiert Basisklassen für Blöcke, von denen man erben kann

  35. Block Klassenhierarchie

  36. Textblöcke

  37. 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. Schichtenarchitektur Framework CSharpBlocks

  39. Typ-deklarationen

  40. 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. 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. Mehr Informationen www.osenkov.com/diplom

  43. Ende • Vielen Dank für Ihre Aufmerksamkeit! • Fragen?

  44. Zusätzliche Folien • Ich habe nicht alles erzählt, was ich weiss • noch ein paar Trümpfe im Ärmel!

  45. 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. Erkenntnisse über IDE Architektur • Man braucht erweiterbare AST Datenstruktur • Observable AST • Model-View-Controller

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

More Related