www.wikidata.de-de.nina.az
Xtext ist ein Open Source Framework fur die Entwicklung von Programmiersprachen sowie domanenspezifischen Sprachen englisch domain specific language DSL und ein Teil des Eclipse Modeling Framework Projekts EMF Im Gegensatz zu normalen Parsergeneratoren wird bei Xtext nicht nur ein Parser generiert sondern auch ein EMF Metamodell ein Klassenmodell fur den abstrakten Syntaxbaum und ein in Eclipse integrierter Texteditor sowie die notwendige Infrastruktur fur die Implementierung einer modernen Entwicklungsumgebung fur die entwickelte Sprache bereitgestellt XtextScreenshot Domanenspezifische Sprache zur Implementierung von Statemachines Links Quelltexteditor rechts Outline viewBasisdatenMaintainer Eclipse FoundationEntwickler Eclipse Foundation itemis AG TypeFoxErscheinungsjahr 2006Aktuelle Version 2 21 0 1 3 Marz 2020 Betriebssystem plattformubergreifend Java Virtual Machine Eclipse IntelliJ IDEAProgrammiersprache Java XtendKategorie Framework Language workbenchLizenz Eclipse Public Licenseeclipse org Xtext Inhaltsverzeichnis 1 Geschichte 2 Funktionalitat 2 1 Workflow 2 2 Compilerfunktionen 2 2 1 Parser Grammatik der Sprache 2 2 2 Statische Analyse 2 2 3 Code Generierung 2 2 3 1 MyDslGenerator 2 2 3 2 MyDslModelInferrer 2 2 3 3 MyDslInterpreter 2 3 IDE Konzepte 2 3 1 Editor 2 3 1 1 Syntax Highlighting 2 3 1 2 Autoformatierung 2 3 1 3 Scoping 2 3 1 4 Anzeige von Analyseergebnisse 2 3 1 5 Codefolding 2 3 1 6 Autovervollstandigung und Quickfixes 2 3 2 Outline View 2 3 3 Rename Refactoring 3 Weiterverarbeitung von DSL Modellen 4 Auszeichnung 5 Literatur 6 Weblinks 7 EinzelnachweiseGeschichte BearbeitenDie erste Version von Xtext wurde im Jahr 2006 im Rahmen des Projektes openArchitectureWare oAW veroffentlicht In der darauf folgenden Zeit wurden mit jeder Version neue Funktionen und Konzepte integriert In der Version 4 3 von oAW ist die letzte oAW Version von Xtext enthalten Seit Anfang 2008 wird Xtext unterhalb des Eclipse Modeling Project im Textual Modeling Framework TMF weiterentwickelt Mitarbeiter der Firmen itemis AG und TypeFox entwickeln hier eine neue Version des Frameworks Das erste offizielle Release erfolgte am 16 Juni 2009 als Xtext in der Version 0 7 0 erschien 2 Im Juni 2010 hat das Framework die Version 1 0 erreicht Version 2 0 erschien am 27 Juni 2011 zusammen mit Eclipse 3 7 Indigo 3 Im Juni 2012 wurde mit Version 2 3 die Expression Language Xbase vorgestellt Xbase ermoglicht einerseits eine nahtlose Integration einer DSL in das Java Typsystem und stellt andererseits typische Ausdrucke Expressions in einer Java ahnlichen Syntax zur Integration in eine DSL zur Verfugung 4 5 Eine weitere Neuerung von Version 2 3 ist die Programmiersprache Xtend eine in Xtext selbst entwickelte an Java angelehnte Programmier und Templatesprache Sie wird seitdem zur Implementierung vieler Sprach und IDE Konzepte propagiert Die nachste grosse Neuerung von Xtext wurde am 1 Dezember 2015 mit Version 2 9 vorgestellt Xtext steht nun ebenfalls als Plug In fur die Entwicklungsumgebung IntelliJ IDEA zur Verfugung Sowohl in der Version fur Eclipse als auch in der Version fur IntelliJ konnen Plug ins fur beide Plattformen entwickelt werden Weiterhin besteht die Moglichkeit einen DSL Editor fur eine Webanwendung zu generieren Auch die Verwendung der Buildsysteme ist nun teilweise moglich 6 Funktionalitat BearbeitenMit Xtext werden domanenspezifische Programmiersprachen entwickelt Es ist weit mehr als ein einfacher Parsergenerator wie z B ANTLR welcher dennoch Verwendung in Xtext findet um Quelltexte einzulesen und einen abstrakten Syntaxbaum AST abzuleiten Es bietet Moglichkeiten den AST zu analysieren und zu validieren den AST in eine beliebige andere textuelle Reprasentation zu uberfuhren oder Javaklassen daraus abzuleiten Zusatzlich zu diesen typischen Compilerfunktionen bietet Xtext Moglichkeiten viele IDE Konzepte fur die Sprache zu implementieren So kann am Ende des Entwicklungsprozesses ein Plug In fur Eclipse oder IntellJ stehen welches mit Hilfe dieser Plattformen eine komplette IDE zur Verfugung stellt Im Folgenden werden die verschiedenen Funktionen und Konzepte die mit Xtext implementiert werden konnen kurz beschrieben Workflow Bearbeiten Xtext verwendet einen MWE2 Workflow um die Sprache zu konfigurieren Wird der Workflow ausgefuhrt so wird der Parser und das Metamodell generiert Weiterhin werden Klassen und Methodenrumpfe erzeugt um verschiedene Compiler und IDE Konzepte zu implementieren Werden die Konzepte nicht implementiert werden die Standardimplementierungen von Xtext verwendet Compilerfunktionen Bearbeiten Dieser Abschnitt fasst Konzepte zusammen die typischerweise Teil des Compilers sind Ein Compiler parst den Quelltext und erstellt einen abstrakten Syntaxbaum AST Abstract Syntax Tree Bevor dies geschieht wird eine Syntaxanalyse durchgefuhrt um ggf Syntaxfehler zu finden Nur wenn der Quelltext frei von Syntaxfehlern ist wird der AST erzeugt Auf dem AST werden oft statische Analysen durchgefuhrt z B Typuberprufung Uberlagerung Schattierung Sichtbarkeit etc Diese Analysen konnen Fehler aufdecken Sollte der AST fehlerfrei sein so wird er in die Ausgabesprache uberfuhrt Dies kann eine beliebige textuelle Reprasentation sein oder Quelltext in einer beliebigen Java anderen Programmiersprache Parser Grammatik der Sprache Bearbeiten Xtext generiert vollautomatisch einen ANTLR Parser fur die Sprache Hierfur wird der ANTLR Parsergenerator verwendet Es muss fur dieses Konzept lediglich die Grammatik der Sprache syntaktische Regeln definiert werden Hierfur stellt Xtext eine eigene Sprache zur Verfugung Das Besondere an der Grammatiksprache von Xtext ist dass damit nicht nur die konkrete sondern auch die abstrakte Syntax beschrieben wird Ublicherweise wird aus der Grammatik nicht nur der ANTLR Parser generiert sondern auch ein Ecore Metamodell und seine Implementierung in Java Es wird als AST verwendet Der generierte ANTLR TreeParser erzeugt eine Instanz dieses Modells und gibt es als AST zuruck Existiert bereits ein Metamodell und es soll nur noch die textuelle Syntax definiert werden so kann das Metamodell in der Xtext Grammatiksprache importiert werden Dann wird auch kein eigenes Metamodell erzeugt Die Syntax der Grammatiksprache wird im Folgenden beschrieben Jede Grammatik verfugt uber einen Header in dem der Name der Sprache und die Vatergrammatik definiert werden Weiterhin konnen Metamodelle der Vatersprachen importiert werden um ihre Regeln nutzen konnen Sofern kein existierendes Metamodell verwendet wird wird hier ebenfalls das Ecore Metamodell definiert grammar org eclipse mydsl MyDsl with org eclipse xtext xbase Xbase import http www eclipse org emf 2002 Ecore as ecore import http www eclipse org xtext common JavaVMTypes import http www eclipse org xtext xbase Xtype generate MyDSL http www eclipse org xtext mydsl MyDsl Auf den Header folgt die oberste Root Regel der Sprache Alle weiteren Regeln folgen in beliebiger aber sinnvoller Reihenfolge auf die Rootregel Eine Regel hat einen Namen der mit einem Grossbuchstaben beginnt gefolgt von einem Doppelpunkt Beendet wird eine Regel mit einem Semicolon Zeichen die in der definierten Sprache stehen wie z B Kommas Punkte aber auch Schlusselworter werden in einfache Anfuhrungszeichen gesetzt Enthalt eine Regel weitere komplexe Regeln oder hat bestimmte Attribute so wird zunachst der Name des Attributes geschrieben beginnend mit einem kleinen Buchstaben gefolgt von einem Gleichheitszeichen und dann dem Namen der Kindregel Eine typische Regel konnte z B so aussehen AnyRule any element ID will be value Value Es ist zwar nicht bekannt wie die Regel Value aussieht aber der hier beschriebene Quelltext konnte etwa so aussehen any MyName will be 42 Ein Attribut muss grundsatzlich genau einen Wert enthalten es sei denn es ist als optional gekennzeichnet oder es enthalt eine Liste von Werten Um ein Wert als optional zu kennzeichnen wird ihm ein Fragezeichen angehangt eine Liste von Werten die auch leer sein darf wird durch einen Stern gekennzeichnet und eine Liste die mindestens ein Element enthalten muss durch ein Plus Der Zuweisungsoperator fur Listenattribute ist das Plusgleich SeveralAttributesRule mustBeSet AttributeMandatory canBeSet AttributeOptional possiblyEmptyList AttributeInList listWithAtLeastOneElement AttributeInList Nachdem die Grammatik der Sprache implementiert oder geandert wurde muss der MWE2 Workflow ausgefuhrt werden damit Parser und Metamodell neu generiert werden Statische Analyse Bearbeiten Sobald der MWE2 Workflow das erste Mal ausgefuhrt wird erzeugt Xtext die Klasse org eclipse xtext mydsl validation MyDslValidator Diese ist zunachst leer und es konnen beliebig viele Methoden implementiert werden die einzelne Knoten des AST s prufen oder analysieren konnen Xtext findet diese Methoden und fuhrt sie kontextabhangig automatisch aus Um Xtext mitzuteilen das eine bestimmte Methode eine Analyse enthalt muss diese einerseits mit der Annotation Check gekennzeichnet werden und andererseits darf sie nur genau einen Parameter haben dessen Typ ein Typ des Metamodells ist Eine solche Analysemethode konnte in etwa so aussehen Check def checkRootElement MyDslRoot root Diese Methoden haben keinen Ruckgabewert void Wenn Fehler gefunden werden sollte eine der error Methoden aufgerufen werden Diese empfangt einige Informationen und erstellt so einen Fehlermarker Analog zu Fehlern konnen fur den Editor siehe IDE Konzepte auch Warnungen warning oder Informationen info erzeugt werden Diese Ergebnisse werden vom Editor im Quelltext angezeigt Code Generierung Bearbeiten Xtext erzeugt fur jede Sprache eine Klasse mit der die Sprache in eine bestimmte Ausgabe ubersetzt werden kann Hierzu gibt es ab Version 2 3 zwei Moglichkeiten Wird mit der Sprache z B eine Datenstruktur aufgebaut so kann eine XML Ausgabe oder ein JSON Object erzeugt werden oder eine andere beliebige textuelle Reprasentation Oft kommt es aber auch vor dass eine Sprache einen kleinen Teilaspekt von einem grossen Programm abdeckt Dann ist es sinnvoll Java Klassen zu erzeugen Hierzu wird der ModelInferrer verwendet Er leitet eine Java Klasse ab und integriert die Sprache somit nahtlos in das Javatypsystem grosse Vorteile auf IDE Ebene MyDslGenerator Bearbeiten Standardmassig wird erst einmal eine Klasse org eclipse xtext mydsl generator MyDslGenerator erzeugt Diese enthalt genau eine Methode doGenerate Resource r IFileSystemAccess fsa Hier kann der Generationsprozess implementiert werden der die Ausgabe des Compilers berechnet Diese Methode wird beim Speichern der Datei im Eclipse Editor automatisch ausgefuhrt Die erzeugten Dateien werden in der Regel im Verzeichnis src gen abgelegt es sei denn etwas anderes wird eingestellt Das Ausgabeformat ist hier beliebig MyDslModelInferrer Bearbeiten Bei der Verwendung von Xbase z B um Cross Referencing zu Java types zu benutzen wird anstatt der Generatorklasse ein ModelInferrer erzeugt den es zu implementieren gilt Dieser ermoglicht das Ableiten von Javatypen aus der Sprache Hier muss auch nicht die Datei an sich erzeugt werden sondern lediglich eine Transformation des Sprach AST s hin zu einem Java AST implementiert werden Die eigentliche Serialisierung und Ubersetzung in Bytecode ubernimmt Xtext MyDslInterpreter Bearbeiten Xtext bietet auch die Moglichkeit einen Interpreter anstelle eines Codegenerators zu implementieren sodass der Code der Sprache direkt ausgefuhrt werden kann IDE Konzepte Bearbeiten tbd Neben den Compilerkomponenten die teilweise auch IDE Konzepte implementieren bzw dem Editor zuarbeiten konnen fur Xtext Sprache diverse IDE Konzepte implementiert werden Editor Bearbeiten Der MWE2 Workflow erzeugt automatisch ein Editor View mit einem Basis Syntax Highlighting Syntax Highlighting Bearbeiten Dieses kann sowohl syntaktisch als auch semantisch angepasst verfeinert werden Es sind keine Grenzen bezuglich Farben Schriftarten Textdekorationen gesetzt Mit einem entsprechenden Aufwand kann eine Seite fur die Spracheinstellungen implementiert werden in der der Endnutzer das Highlighting an die eigenen Bedurfnisse anpassen kann z B Dark Theme oder Rot Grun Sehschwache Autoformatierung Bearbeiten Das aus Eclipse bekannte Feature der Autoformatierung von Quelltext kann ebenfalls fur eine Xtextsprache implementiert werden Xtext stellt hierfur eine API bereit Die hier definierten Patterns werden auf den Quelltext angewendet wenn der entsprechende Befehl gegeben wird bzw wenn eine Quelltextdatei erzeugt wird indem der AST Stuck fur Stuck aufgebaut und dann serialisiert wird Scoping Bearbeiten Das aus Eclipse bekannte Feature der Hyperlinks zu Feld Methoden oder Klassendefinitionen zu springen kann ebenfalls fur Xtextsprachen implementiert werden Xtext stellt hierfur eine API bereit In Verbindung mit der Expression language Xbase und dem JvmModelInferrer kann so auf IDE Ebene eine nahtlose Integration der Sprache in das Java Typsystem geschaffen werden Einerseits lasst sich so ein Hyperlink zu einer Methode einer Java Klasse implementieren andererseits ist es auch moglich in Javaklassen die abgeleiteten Javatypen zu verwenden Wird der Hyperlink im Javaeditor angeklickt offnet dann sogar der Xtext Spracheditor die entsprechende Datei und markiert den Referenzierten Teil Anzeige von Analyseergebnisse Bearbeiten Wie im Abschnitt uber die Compiler Konzepte beschrieben konnen Fehler Warnungen und Informationen im Quelltext gefunden werden Diese werden automatisch im Editor von Eclipse angezeigt Codefolding Bearbeiten Xtexteditoren unterstutzten automatisch das Zusammenklappen von Quelltextblocken Autovervollstandigung und Quickfixes Bearbeiten Xtext stellt eine Klasse bereit um das Autovervollstandigungs Feature von Eclipse zu unterstutzen So lasst sich implementieren welche Inhalte vorgeschlagen werden In Kombination mit den angezeigten Fehlern und Warnungen konnen in gewissem Masse sogar Verbesserungsvorschlage generiert werden Diese konnen dann den als fehlerhaft markierten Bereich eines Dokumentes durch den Vorschlag ersetzen um Fehler zu entfernen Outline View Bearbeiten Aus Eclipse ist der s g Outline View bekannt Dieser zeigt z B alle Felder und Methoden einer Java Klasse an Ein solcher Outline View kann auch fur eine Xtextsprache implementiert werden Dieser ist dann auch mit der geoffneten Datei verknupft sodass der Courser mit einem Klick auf ein Element im Outline zu der entsprechenden Stelle im Text springt Rename Refactoring Bearbeiten Rename Refactoring wird von Xtexteditoren unterstutzt Weiterverarbeitung von DSL Modellen BearbeitenDSLs sind formale Sprachen und mussen daher ausfuhrbar gemacht werden Dies geschieht auf zwei unterschiedlichen Wegen Zur Codegenerierung bietet sich Xtend an welches vom gleichen Team entwickelt wird und ebenfalls bei Eclipse Modeling gehostet ist Bei der Codegenerierung konnen beliebige Zielplattformen verwendet werden Die Interpretation von EMF Modellen muss mit einer zur Java Virtual Machine kompatiblen Sprache geschehen da EMF und Xtext bisher nur in Java implementiert sind Die Zielplattform ist daher auf diese Sprachen eingeschrankt Seit Version 2 11 wird das Language Server Protocol LSP unterstutzt Fur die eigenen domanenspezifischen Sprachen konnen so eigene Programmiersprachen Server generiert werden 7 Auszeichnung BearbeitenEclipse Community Awards 2010 Most Innovative New Feature or Eclipse Project 8 Literatur BearbeitenLorenzo Bettini Implementing Domain Specific Languages with Xtext and Xtend 1 Auflage Packt Publishing Ltd 2013 ISBN 978 1 78216 030 4 S 342 englisch packtpub com Weblinks BearbeitenXtext bei eclipse org englisch Artikel Goodbye XML Befreiungsakt mit Xtext auf JAXenter de Sven Efftinge Markus Volter Arno Haase Bernd Kolb The Pragmatic Code Generator Programmer TheServerSide com abgerufen am 3 Juli 2012 Sven Efftinge Jan Kohnlein Peter Friese Build your own textual DSL with Tools from the Eclipse Modeling Project Eclipse Foundation abgerufen am 3 Juli 2012 Sven Efftinge Fowler s DSL example with Xtext sven efftinge s blog abgerufen am 3 Juli 2012 Volker Koster Implementation and Integration of a Domain Specific Language with oAW and Xtext PDF 1 0 MB MT AG abgerufen am 3 Juli 2012 Venkat Subramaniam Creating DSLs in Java JavaWorld com abgerufen am 3 Juli 2012 Xtext Project Xtext Documentation PDF Eclipse Foundation abgerufen am 12 Januar 2016 Einzelnachweise Bearbeiten www eclipse org Eclipse Modeling News eclipse org abgerufen am 4 Marz 2010 Eclipse Indigo mit vielen Neuerungen fur Java Entwickler heise de abgerufen am 28 Juni 2011 The Future of Xtext blog efftinge de abgerufen am 12 Januar 2016 The Future of Xtext speakerdeck com abgerufen am 12 Januar 2016 Xtext 2 9 0 Release Review projects eclipse org abgerufen am 12 Januar 2016 Alexander Neumann Xtext 2 11 unterstutzt Language Server Protocol In heise Developer 1 Februar 2017 abgerufen am 22 Oktober 2021 eclipse org Abgerufen von https de wikipedia org w index php title Xtext amp oldid 237194721