Vorlesung I: Einführung in die Syntaxtheorie



In diesem Kapitel untersuchen wir Mengensysteme, die unter bestimmten Mehr. Modelltransformationen nähern Modelle der Plattform an, indem sie den Abstraktionsgrad verringern.

Language selection


Es muss ein Weg gefunden werden, automatisiert eine Komponentenliste aus dem vorliegenden Quelltext zu extrahieren. Eine andere Möglichkeit ist die parserbasierte Erkennung der Module anhand ihres Quelltextes. Ein Parser, der Klassendefinitionen samt Vererbungsstruktur und Präprozessordirektiven im Definitionskontext zu erkennen vermag, wäre bereits mächtig genug, wie in den vorangegangenen beiden Abschnitten erörtert wurde.

Die benötigten Informationen sind hingegen in einer kleinen Untermenge der Grammatikregeln versteckt, man könnte dies auch als eingebettete DSL bezeichnen. Insbesondere bei komplexen Sprachen wie z. Es stellt sich nun die Frage, wie Grammatiken innerhalb der Blockstruktur ganze Abschnitte, die sie nicht erkennen, überlesen.

Grundsätzlich ist das Problem aus dem Compilerbau [ALSU07] bekannt, hier werden verschiedene Error-Recovery-Strategien eingesetzt, um bei nicht erkannten Symbolen möglichst unbeschadet weiterlesen zu können [Cor85].

Um die Grammatik nicht unnötig aufzublähen, ist eine Technik nötig, die nur wenige zusätzliche Regeln in die Grammatik einführt, da der Xtext-Parser jede Grammatikregel auf eine Klasse im Metamodell abbildet. Weil der Xtext-Parser keine solche Strategien beherrscht, muss das Problem trickreicher angegangen werden. Durch einen derartigen Schritt entsteht natürlich eine ambige Grammatik, die in der Praxis nur mit Backtracking 1 anwendbar ist.

Backtracking untersucht alle Kombinationen möglicher Regelalternativen bis er eine passende Folge von Regelanwendungen findet. Da der Parser mit der ersten Alternative beginnt, wählt er die letzte, beliebige Tokens konsumierende Möglichkeit nur dann, wenn sonst keine Regel anwendbar ist.

Durch die Blockstruktur beschränkt sich die maximale Eingabelänge n auf die Anzahl Tokens zwischen zwei Blöcken oder innerhalb eines Blocks. Dieser versinnbildlicht den Keller eines mit Tiefensuche operierenden Algorithmus, mit dem der Ausgang eines Labyrinths gefunden werden kann. Verzweigungen im Labyrinth entsprechen dabei möglichen Regelalternativen. Zusammenhänge zwischen den involvierten Artefakten 3.

Daher bietet es sich an, Überlegungen zum Generierungsprozess anzustellen, dieser beschreibt die Zusammenhänge der erwähnten Elemente. Grundsätzlich sind zwei Ansätze möglich. Wie sich herausstellen wird, ist der rein generative Ansatz, bei dem der gesamte grafische Editor modelliert wird, aus mehreren Gründen nicht praktikabel.

Ein Hybridansatz bietet sich an, bei dem das Komponentenrepositorium erst zur Laufzeit dem Editor hinzugefügt wird, anstatt es in die den Editor beschreibenden Modelle zu transferieren, aus denen der Editor generativ erzeugt wird Rein generativer Ansatz Zunächst wird die Komponentenbibliothek in ein Komponentenrepositorium übertragen.

Hierzu werden relevante Schlüsselwörter des Quelltextes zur Erstellung eines Syntaxbaumes eingelesen. Anhand des gewonnen Syntaxbaums kann festgestellt werden, ob es sich bei einer Klasse um eine für die Automation vorgesehene Komponente handelt.

Weitere Eigenschaften der Klasse lassen sich. Die Typisierung erfolgt in modernen Hochsprachen oft über generische Programmierung, daher müssen diese Spracheigenschaften berücksichtigt werden. Zum einen müssen die verfügbaren Komponenten in der Werkzeugpalette benannt werden, zum anderen muss ihr Aufbau aus Ports und Parametern samt Benennung und Typisierung in GMF spezifiziert werden.

Dies ist faktisch in GMF-Modellen möglich, Elemente der Domäne können über die Konstrukte domainspecialization und domaininitializer spezialisiert bzw. Eine M2M-Transformation könnte zusätzlich Datenflussmodelle in Instanzen bereits existierender Metamodelle übertragen Export , oder Instanzen fremder Metamodelle in Datenflussmodelle konvertieren Import.

Einen Überblick über die Architektur kann Bild 3. Die verwendeten Metamodelle sind mittig angeordnet. Als Randnotiz für später sei angemerkt, dass selbst hier, im rein generativen Fall, Anpassungen des Editorplugins vonnöten sind, um nicht modellierbare Funktionalität zu implementieren.

Dazu gehört vorrangig jene Fähigkeit, das Modifizieren der kreierten Komponenten im Diagramm durch den Anwender vollständig zu unterbinden. Auch dies erfordert manuell erstellten Code. Ein entsprechendes Plugin, das derartige Anpassungen und nebenbei die statische Semantik Constraints der Datenflussdiagramme aufnehmen würde, ist in der vorliegenden Skizze nicht eingezeichnet Ansatz mit Interpretierung Leider hat sich beim vorangehenden Ansatz herausgestellt, dass die vollständige Generierung des Editors aufgrund von Beschränkungen der GMF-Generative-Modelle nicht möglich ist.

Der Generierungsprozess in revidierter Fassung Modell als Initialisierung einer allgemeinen Komponente mit ihren jeweiligen Ports, Parametern und ihrem Namen im. Diese Vorgehensweise wird sehr ausführlich von Stahl, Völter et. Der Vorteil ist eine höhere Performance und stark verminderter Codeumfang durch weniger Klassen.

Ein Interpreter verarbeitet das Modell erst zur Laufzeit spätes Binden , dadurch ist eine Aktualisierung des Komponentenrepositoriums auch noch zur Laufzeit möglich.

Weil die GMF Runtime Erweiterungen zum Befüllen der Werkzeugpalette und zum Definieren spezialisierter Varianten existierender Diagrammelemente bereitstellt, ist eine solche Vorgehensweise maximal performant und skaliert optimal. Aus dieser Änderung ergibt sich der in Bild 3. Unter Verwendung der GMF-Runtime-Erweiterungspunkte und der generierten Komponentenbibliothek werden zur Laufzeit Spezialisierungen des allgemeinen Komponententyps angelegt und in der Werkzeugpalette angeordnet.

Das nachfolgende Kapitel verfeinert und spezialisiert eben ausgeführten Generierungsprozess hinsichtlich der vorgegebenen Domäne und lässt es in einem auf die IFDS-Bibliothek zugeschnittenen Entwurf münden. Transformationen sind vorgesehen, mit denen aus dem Framework heraus ein modellbasiertes Komponentenrepositorium angelegt werden kann, und Diagramme in Fremdmodelle und Quellcode überführt werden können. Missstände des generierten Editors werden aufgezeigt.

Ein einfaches Codefragment, das in SystemC zwei Komponenten der Bibliothek erstellt und miteinander verschaltet, ist in Listing 4. GetOutput 10 , 5 uintsignalstorage. Metamodell der Diagramme Das Metamodell, mit dem Datenflussprogramme der eben geschilderten Art formal beschrieben werden, ist einfach aufgebaut. Ein Diagramm ist ein Container, ein Behälter für Komponenten. Komponenten besitzen typisierte Parameter und typisierte Ports. Ports lassen sich in Eingangs-. Während der Container später vom Anwender benannt werden darf, haben Komponenten, Ports und Parameter einen fest vorgegebenen Namen.

Komponenten haben zusätzlich eine eindeutige ID beispielsweise eine GUID , eine Kategorie, der sie zugeordnet werden können, einen Gruppennamen, der sie auf sekundärer Ebene mit anderen Komponenten der gleichen Gruppe zusammenfasst, und einen Instanznamen, der vom Anwender für jede Komponente im Diagramm für beschreibende Zwecke festgelegt werden kann.

Ausgangsports können über einen Konnektor mit Eingangsports verbunden werden, das ist ein Pfeil, der den Datenfluss zwischen zwei Ports bezeichnet. Dieser macht aus den Komponenten einen gerichteten Grafen. Gerade in grafischen Editoren ist hingegen eine Werkzeugpalette üblich, in der alle verfügbaren Komponenten aufgezählt werden. Um diesen entscheidenden Vorteil grafischer Editoren implementieren zu können, müssen dem Editor die genannten Informationen bekannt gemacht werden. Damit tut sich ein weiterer Problemraum auf: Das dem Repositorium zugrundeliegende Metamodell ähnelt stark dem Metamodell der Datenflussdiagramme.

Ein Container enthält alle verfügbaren Komponenten. Einzige Unterschiede sind, dass es keine Informationen gibt, die durch den Anwender ediert werden können, und dass Ports nicht miteinander verschaltet werden müssen. Lediglich eine komplexere, hierarchische Typisierung der Ports ist möglich, diese ist für Typprüfungszwecke sinnvoll, muss aber nicht im Diagramm vorhanden sein.

Das Ecore-Modell, das sich aus dem eben geschilderten Sachverhalt ergibt, ist in Bild 4. Weil sie ein datenverarbeitendes Element repräsentieren sollen, ist ihre Schnittstelle auf eine parametrisierbare Operation mit variablen Eingangs- und Ausgangsports festgelegt. Weitere, wichtige Merkmale von Komponentenmodellen zählt Tabelle 4.

Die Typisierung der Ports erfolgt dabei in vielen Fällen über generische Parameter. Eine Komponente repräsentiert eine Operation auf Daten, daher verlangt sie die Definition einer Liste von Eingangsports, einer Liste von Ausgangsports, und die Implementierung einer Operation auf den eingehenden Daten. Semantik Was stellt eine Komponente dar? Manifest-Datei in der Entwurfsphase in der Entwurfsphase in der Entwurfsphase als binäres Artefakt Syntax, möglichst Semantik beliebig, i. Teil des Frameworks Neukompilierung des Frameworks nötig steht noch aus Elemente der datenflussbasierten Programmierung zustandslos, aber: Gemeint sind der lesbare Name der Komponente, die Kategorie, die Gruppe und die typisierte Parameterliste.

Weitere Informationen zu Dokumentationszwecken wären natürlich theoretisch ebenfalls kodierbar. Im Gegensatz zum Klassennamen kann der Name einer. Sämtliche Metainformationen sind via parametrisierte Präprozessormakros kodiert. Eine weitere Makrogruppe ist für die Typbelegung generischer Module zuständig: Um die Komponente nicht für alle möglichen Datentypen neu definieren zu müssen, kann sie generisch definiert werden: Im Folgenden werden alle Makros zur Typbelegung aufgezählt und ihre Bedeutung erklärt: Auch für dieses Makro zeigt Tabelle 4.

Wird keine Endung angegeben, gelten alle Belegungspaare. Auf die Realisierung der dabei notwendigen Transformationen zwischen den Modellen soll nun näher eingegangen werden.

Zwei Transformationsschritte sind dafür vorgesehen, aus den Quelltexten der Komponentenbibliothek das in Abschnitt beschriebene Komponentenrepositorium zu erstellen. Eine erste Transformation extrahiert die Daten aus dem Quelltext in einen konkreten Syntaxbaum, eine zweite Transformation überführt diesen in das Zielmodell, das Repositorium der Komponenten. Dieses soll später zur Laufzeit ausgelesen werden, um die Werkzeugpalette mit Komponenten füllen zu können, da eine Transformation des Repositoriums in die GMF-Modelle, aus denen wiederum der Editor generiert wird, in der Praxis nicht möglich ist.

Später sollen verschiedene Transformationen dazu dienen, aus den im Diagrammeditor erstellten Modellen ausführbare Programme zu generieren. Aufgrund des eingehaltenen Blackbox-Prinzips dürfen sämtliche.

Elemente mit unwichtigen Informationen werden ausgelassen, für das Einlesen der Komponentendefinition sind lediglich die Ableitungsstruktur und einige speziell für die Automation vorgesehene Markierungen relevant, beides wurde im vorangegangenen Abschnitt ausreichend erläutert.

Ausschnitt aus der Grammatikdefinition 1 Content: Von zentraler Bedeutung ist die Backtracking-Funktionalität von Xtext: Eine letzte, auf beliebige Tokens anwendbare Regelalternative lässt es zu, dass mit der eigentlichen Grammatik konforme Tokens überlesen werden. Elemente des Quelltextes, die nicht in der Grammatik enthalten sind, da sie nicht relevante Informationen besitzen, können somit überlesen werden.

Das Nichtterminal AnyToken, letzte Alternative beider Regeln, konsumiert diejenigen Zeichen im Zeichenstrom, für die durch das Probieren aller anderen Alternativen mit beliebiger Verschachtelungstiefe keine Folge von Regelanwendungen gefunden werden kann, die zur Akzeptanz der Grammatik führt. Aus der Xtext-Grammatik lassen sich eine Parserkomponente, ein Metamodell und ein vollständiger Texteditor generieren.

Die für den Einsatz in Workflows vorgesehene Parserkomponente. Generierter Syntaxbaum generiert aus den Klassendeklarationen Instanzen des Metamodells.

Der generierte Texteditor ist in der Lage, Schlüsselwörter der Grammatik einzufärben, Fehler zu markieren und Grammatikelemente anzuzeigen Bild 4.

Ausschnitt aus der Transformation zur Erstellung des Repositoriums 1 [ Node this createcomponent 5 ifds:: Block block, 6 List [ library:: Type ] parametertypes, 7 String name: Durch das Absuchen des Ableitungsbaumes nach bekannten Typen kann herausgefunden werden, ob es sich um eine Komponente handelt.

Ein- und Ausgabeports einer Komponente werden oftmals über Attribute eines bekannten Typs definiert. Wie aus der Deklaration in Listing 4.

Wie in Bild 4. Vererbungsbaum Diagramme aus Komponenten mit typisierten Parametern und typisierten Ein- und Ausgabeports. Ausgangsports können mit Eingangsports mittels Konnektoren verknüpft werden, sodass selbst komplexeste Datenabhängigkeiten in einem gerichteten Grafen beschrieben werden können. Notation der Diagramme am Beispiel Für das Modell eines Datenflussdiagramms wird eine Notation benötigt, die die Entitäten visuell abzubilden vermag.

Komponenten werden als Rechteck dargestellt, das den Namen und die Parameterliste im Inneren enthält; Ports werden als an das Rechteck angeheftete kleine Quadrate dargestellt. Eingänge werden an der linken Seite, Ausgänge an der rechten Seite angebracht. Verbindungen zwischen Ports werden als Pfeil notiert. GMF-Editor mit gefüllter Werkzeugpalette Der fertige Editor soll jedoch nicht Diagramme aus beliebigen Komponenten grafisch bearbeiten können, sondern auf eine eingeschränkte Palette von Komponenten festgelegt sein.

Diese sollen bequem aus Schablonen erstellbar sein, während die Modifizierung erstellter Komponenten und die Erstellung andersartiger Komponenten unterbunden werden soll. Daraus lässt sich folgern, dass die Werkzeugpalette des Editors statt den Komponentenbestandteilen, wie sie im Metamodell der Diagramme enthalten sind, nur fertige Komponenten enthält, wie sie im Komponentenrepositorium deklariert werden.

Wie ein solcher geplanter Editor mit einer derart bestückten Werkzeugpalette später aussehen kann, veranschaulicht Bild 4. Eine Transformation, die die Komponenten des Repositoriums automatisiert in das GMF-Modell überträgt, ist einfach zu schreiben und wurde zu Testzwecken realisiert. Schon ab einer handvoll Komponenten im Test waren es ca. Die Komponenten müssen also unbedingt auf eine andere Art und Weise dem Editor hinzugefügt werden. Die verschiedenen Komponenten werden als Ausprägungen des allgemeinen Komponententyps realisiert.

Das bedeutet, dass mit den GMF- Modellen zunächst nur ein einfacher Diagrammeditor modelliert wird, der beliebige Komponenten erstellen kann, die Werkzeugpalette ist also mit den Entitäten Komponentenknoten, Eingang, Ausgang, Parameter und Konnektor bestückt. Die Erstellung der Spezialisierungstypen und die Befüllung der Palette geschieht zur Laufzeit, ebenso wie die Instanziierung der Komponente, ihren Parametern und ihren Ports entsprechend ihrem Eintrag im Repositorium.

Eine Beschreibung der manuellen Implementierungen, die für die Erweiterung und Anpassung des generierten Editors vonnöten sind, werden im nächsten Kapitel besprochen. Für die Erzeugung von Quelltext, der die im Modell eines Diagramms beschriebenen Komponenten instanziiert und verdrahtet, eignet sich eine Xpand-Transformation. GetOutput 10 , 11 uintsignalstorage.

Die Rücktransformation erfolgt analog zur Hintransformation. Während die Abbildungsfunktion des Wurzelelements alle vorhandenen Konnektoren im Zielmodell erstellt, kümmert sich die Abbildungsfunktion der Komponenten darum, jede Komponente samt ihren Attributen auf das Zielmodell abzubilden.

Das noch fehlende Verknüpfen der Konnektoren im Zielmodell wurde im Ausschnitt ausgespart. AnalysisSetup this createanalysissetup 2 Container container: Component this createcomponent Node node: Manuell zu implementieren sind Teile, die nicht in einer der verwendeten domänenspezifischen Sprachen ausdrückbar sind, etwa weil sie zu domänenspezifisch sind, oder weil sie einer Fremddomäne zugehörig sind.

Codebeispiele für Eclipse-spezifische Probleme enthält [Dau06]. Eclipse Extension Points spezifiziert und implementiert werden. Nur wenn keine Dependency Injection über Erweiterungspunkte möglich ist, sollten Änderungen am Generat in Betracht gezogen werden.

Eine Kernfunktionalität, die von Hand implementiert werden muss, ist das Füllen der Werkzeugbox mit den fertigen Komponenten des Repositoriums und das Konfigurieren der Teile und deren Layout bei der Erstellung im Diagramm. Kleinere Anpassungen zur Erhöhung der Benutzerfreundlichkeit betreffen das Schützen der Komponenten im Diagramm vor Änderungen, die Möglichkeit, Beschriftungen der Komponentenports frei platzieren zu können, und das Deaktivieren der Popup Bars.

Während die meisten Änderungen in einem eigenen Plugin de. In den kommenden Unterabschnitten wird dies. Damit Änderungen nicht bei einem späteren Generatorlauf wieder überschrieben werden, müssen geänderte Abschnitte syntaktisch als geschützte Bereiche Protected Regions gekennzeichnet werden Das Füllen der Werkzeugbox mit Komponenten Wie bereits angedeutet, ist das Füllen der Werkzeugbox des GMF-Editors mit komplexen Diagrammelementen nur sehr eingeschränkt mit den Modellen der GMF Generative modellierbar.

Der Editor wird derart modelliert, dass er zunächst zur Erstellung beliebiger Komponenten nutzbar ist. All diese Elemente sind in der Werkzeugleiste vorhanden, und müssen mühsam und unter Kenntnis der in der Bibliothek definierten Komponenten zusammengesetzt werden. Sie liest das generierte Komponentenrepositorium eine XMI-Datei über dessen Ecore-Schnittstelle aus; jede gelesene Komponente wird der Palette hinzugefügt, wobei Komponenten unter ihrer Kategorie eingeordnet werden im sog.

PaletteDrawer, einem nach der Kategorie benanntem Auszugsfach. Die mit den Komponenten und dem Konnektor gefüllte Werkzeugpalette erstellen.

Über die zusätzliche Elementeigenschaft HintedType können einem Elementtyp nebenbei semantische Hinweise gegeben werden, die die Erstellung seiner Sicht beeinflussen. Folgender Mechanismus soll dafür sorgen, dass keine gewöhnlichen, leeren Komponenten im Diagramm kreiert werden, sondern spezialisierte Komponententypen: Ein Typ HintedSpecializationType wird als ein gewöhnlicher SpecializationType definiert, der die semantischen Hinweise des Elementtyps übernimmt, von dem er erbt, da die Art seiner Darstellung nicht abweichen soll.

Das Attribut librarynode stellt das Objekt der zu konfigurierenden Komponente aus dem Repositorium dar und wurde mit dem Konstruktor übergeben. Wie dies erreicht werden kann, zeigt Listing 5. Hierbei kann eine der vier Seiten zur Anheftung ausgewählt werden; bedauerlicherweise besteht jedoch keine Möglichkeit, den Startpunkt an der Seite und die Richtung der Anordnung zu bestimmen.

Layout von an der Seite angehefteten Knoten verwendet auch die Methode addfixedchild automatisch die lokal definierte Version. Diese ordnet Kindelemente auf Nord- oder Südseite von links nach rechts und auf Ost- oder Westseite von oben nach unten an. Das Schützen der neu definierten Variante vor dem Generator darf nicht vergessen werden Schutz der Komponenten vor Änderungen Die im Diagramm erstellten Komponenten stellen atomare Objekte dar, deren Komposition aus Parametern und Ports nicht weiter modifiziert werden darf.

Aus diesem Grund müssen die vielen Funktionen des Editors zur Manipulation manuell auf Elemente beschränkt werden, die nicht Kindelemente von Komponenten sind. Folgende Features zur Manipulation von Elementen sind zu untersuchen: Die Methode getdragtracker in den EditParts der Ein- und Ausgänge muss daher überschrieben werden, sodass sie einen DragTracker zurückgibt, der kein Cloning unterstützt. Da die Erweiterung am Erweiterungspunkt org. Die Registrierung der Aktionen soll stattdessen im Plugin de.

Die Rückschritttaste ist als Shortcut registriert, mit dem das aktuell fokussierte Element gelöscht werden kann. Um dies für Parameter und Ports zu verbieten, muss der Befehl in der Methode createeditpolicies eines registrierten EditPolicyProviders deaktiviert werden: Dies muss nur für Parameter unterbunden werden.

Innerhalb der Methode createeditpolicies eines für Parameter registrierten EditPolicyProviders reicht folgender Befehl aus: Sie erscheinen über einem Element, wenn der Mauszeiger länger darüber verweilt. Es handelt sich um ein Menü aus grafischen Buttons, die die Erstellung von Kindelementen im Kontext des anvisierten Elements ermöglichen.

In der Grundeinstellung sind Popup Bars für alle Elemente aktiviert. Analog zu den vorigen Änderungen wird auch diese Funktionalität über EditPolicys gesteuert.

Über popupstructuredcontributioncriteria lassen sich die gewünschten Modelltypen Parameter und Ports deklarativ angeben, sodass keine Zeile Javacode nötig ist. Damit die Kindelemente von Komponenten nicht dupliziert werden können, gilt es, am Erweiterungspunkt org.

Für die Beschriftung der Komponentenports führt dieses Layout zu schlechter Lesbarkeit. Um diese Beschränkung aufzuheben, genügt eine Modifikation in den Editorklassen der Ports. Auch hier müssen die am generierten Code geänderten Bereiche als geschützt markiert werden. Ein eigener Projektwizard ermöglicht die Erstellung von Projekten mit Beispieldiagrammen und dem aktuellen Framework. Eine Eigenschaftsseite kümmert sich um die Instandhaltung des Komponentenrepositorium.

Möchte jemand einen Workflow innerhalb der Entwicklungsumgebung testweise ausführen, genügt die Änderung entsprechender Parameter in der Properties-Datei und der Start der Transformation mittels einer Eclipse- Startkonfiguration Run Configuration. Später in der eigenständigen Anwendung ist dieses Vorgehen nicht mehr möglich, weil die Transformationen im Plugin de.

Die Aktionen sind in dem Plugin abgelegt, in dem sich auch die Workflows und Transformationen befinden. Den Ausführungskontext für Workflows bereitet die Helferklasse Transformator. Hier kann ein Verzeichnis. Einbindung der Transformationen in die Umgebung innerhalb des Workspace ausgewählt werden und die Erstellung des Repositoriums durchgeführt werden Bild 5.

Wie schon die Workflows im vorigen Abschnitt, so wird auch dieser Workflow auf Basis der Transformator-Klasse ausgeführt. Stetiges Informieren über Stand und Ergebnis der Transformation ist wichtig, da der Vorgang bei den derzeit über Plugins einige Minuten in Anspruch nimmt und der Nutzer im Fehlerfall informiert werden möchte. Das Erweitern am Erweiterungspunkt org.

Eine Widrigkeit gilt es noch zu lösen: Die einzulesende Schnittstelle besteht aus vielen, über etliche Unterverzeichnisse verteilten. Von Haus aus ist es in einem Workflow nicht möglich, alle Dateien eines Verzeichnisses mit einer bestimmten Dateiendung zu akkumulieren, diese einzulesen und zu einem Modell zu verschmelzen.

Einerseits, um sich über Schnittstelle und Implementierung während der Diagrammerstellung informieren zu können, andererseits, um jederzeit die Möglichkeit zu besitzen, das Komponentenrepositorium neu aus den Quellen erstellen zu können. Für einen schnellen Einstieg in die grafische Programmierung von Diagrammen sind einfache wie auch komplexe Beispieldiagramme nützlich.

Für die Erstellung eines Projekts, das die Bibliothek beinhaltet und eines Projekts, das Beispieldiagramme enthält, ist ein eigener Projektwizard vorgesehen.

Diese registriert sich am Erweiterungspunkt org. Weiterhin sind am Erweiterungspunkt für beide Projekte jeweils eine Zip-komprimierte Datei mit dem Inhalt des Projekts angegeben. Diese komprimierten Dateien, über die der selbst definierte Wizard seine Inhalte bezieht, liegen im Unterverzeichnis examples vor, das beiliegende Ant-Skript gatherexamples.

Folgende Aspekte können geändert werden: Eine eigene Perspektive, die ein Layout der einzelnen Views vorgibt, sodass optimal die Funktionalität des Produkts ausgeschöpft werden kann. All diese einzelnen Aspekte werden innerhalb des Plugins de. Anstatt diese hier aufzuzählen, wird ein eigenes Feature feature. Die wichtigsten Elemente des Brandings.

Die Möglichkeiten des Werkzeugs werden aufgezeigt, und nebenbei werden die Funktionsweise der Erweiterungen und die Bedienung der Oberfläche erläutert. Für zyklische Nachrichten, die auf dem Bus kursieren, soll die Einhaltung eines zeitlichen Höchstabstandes zwischen zwei Nachrichten der gleichen ID überprüft werden. Die zu untersuchenden Nachrichten lassen sich anhand ihrer Nachrichtenkennung ID unterscheiden, hier seien es die IDs 0x, 0x und 0x In Fällen, in denen der Abstand nicht eingehalten wird, soll dies aufgezeichnet werden.

Zusätzlich ist eine Abschätzung der Buslast fortwährend zu berechnen und ebenfalls aufzuzeichnen. Als Busnachrichtenstrom fungiert eine Datei, die über den Parameter LoggerAddress angegeben werden kann. Die Komponente besitzt einige Ausgangsports, über die Informationen signalbasiert empfangen werden können. Datenflussdiagramm eines Programms zur Überwachung zyklischer Nachrichten.

Für jeden zu filternden Nachrichtentyp ist ein IDFilter zuständig, der entsprechend über Id zu parametrisieren ist. Der Ausgang active ist genau dann wahr, wenn eine gefilterte Nachricht am Bus anliegt.

Nimmt active vor Ablauf des Timers ein wiederholtes Mal den Zustand true an, wird die Einhaltung der Deadline über einen held-port im hiesigen Fall nicht verwendet gemeldet, und der Timer läuft wieder von vorne los.

Läuft der Timer vorher ab, wird dies über einen violated-port gemeldet. Die Timerperiode wird in Vielfachen von ns angegeben d. Alle violated-bits werden dank der verschalteten Komponente Signal- Storage zu Visualisierungszwecken aufgezeichnet. Erst wenn die ID mitgespeichert wird, können die Meldungen der violated-bits dem verursachenden Nachrichtentyp zugeordnet werden.

Das Modul verfügt neben dem Ausgangsport load über einen weiteren Ausgangsport periods, auf dem die Anzahl von Bitperioden abgeschätzt wird, die das aktuelle Frame auf dem Bus belegt. Auch hier ermöglicht ein SignalStorage-Modul die Visualisierung der periodisch errechneten Buslast, die am Ausgang load anliegt.

Beim erstmaligen Start ist zuvor noch ein Verzeichnis auszuwählen, in dem der Workspace erstellt wird. Zudem muss die Willkommensseite geschlossen werden, da sie alle übrigen Sichten überdeckt. Ein frischer Workspace präsentiert sich anfangs leer.

Eines davon, nämlich das mit der Endung. Ein neues Diagramm wird wie folgt erstellt: Mit File New Other Anfangs zeigt sich die Zeichenfläche leer, mit der Werkzeugpalette auf der rechten Seite und der Properties View im unteren Bereich. Hier gilt es nun, das Diagramm so einzugeben wie es in Bild 6. Erst werden die nötigen Komponenten in der Werkzeugpalette ausgewählt, wo sie nach Ordnern logisch kategorisiert und gruppiert vorliegen, dann genügt ein Klick auf der Diagrammfläche, um die Komponente hinzuzufügen.

Die Ports lassen sich verbinden, indem das Konnektor- Werkzeug, ein Liniensymbol ganz oben in der Werkzeugleiste, selektiert wird und mit der Maus zwischen zwei zu verbindenden Ports gezogen wird. Beim Speichern des Diagramms werden zwei Dateien aktualisiert: Das eigentliche Modell, das ediert wurde erkennbar an der Dateiendung.

Ein Rechtsklick auf das Modell im Projektexplorer öffnet das Kontextmenü mit den beiden Auswahlmöglichkeiten: In der aufspringenden Konsole erscheinen die Meldungen des Workflows und des durch den Workflow ausgeführten Transformationsskriptes. Eine neue Datei erscheint im Verzeichnis mit angehängter Endung. Ihr Inhalt kann in Listing 6. Die Methode CreateDeadlineMonitorSetup ist für das gesamte Setup zuständig, hier werden die Komponenten deklariert, mit den Parametern instanziiert und die Ein- und Ausgänge miteinander verknüpft.

GetOutput 1 , 32 doublesignalstorage. GetInput 0 ; 33 Connector:: GetOutput 1 , 34 boolsignalstorage. GetInput 0 ; 35 Connector:: GetOutput 2 , 36 cyclicdeadline. GetInput 0 ; 37 [ GetOutput 2 , 39 cyclicdeadline3. Gefilterter Datenstrom Es gibt grundsätzlich zwei Arten der simulativen Ausführung: Für die Simulation lässt sich ein beliebiger Datenstrom für die Eingangsdaten wählen, sofern diese im für den Simulator zugänglichen DBC-Format vorliegen.

Die Ergebnisse, die bei der Filterung der Daten entstehen, können in einem Grafen visualisiert werden Bild 6. Wie wird EMF eingesetzt? Einführung in modellgetriebene Softwareentwicklung Oktober Überblick Was sind die Grundprinzipien der modellgetriebenen Softwareentwicklung? Um die Vorteile effizient nutzen. Konzeption und Implementierung einer automatisierten Testumgebung, Welche Arten von DSL gibt es?

Nicht alle Probleme eignen sich, um mit Standardsprachen beschrieben. Language Workbench Vortrag von:! Definition von domänenspezifischen Sprachen mit Xtext: November Überblick Was ist zu tun, wenn wir selbst einen Ansatz für modellgetriebenen Entwicklung definieren wollen?

Software Factories 3 Modellgetriebene Softwareentwicklung Prof. Modelle werden in der. Einleitung - Was ist MDD? Innovator Anbindung an openarchitectureware Klaus Weber Connect www. Für Innovator Object excellence. Model Driven Software Development Herausforderung: Entwicklungsmethodik und technisches Umfeld Referent: SOA das erste Projekt 2.

Prozesse Ergebnisse aus dem Fachbereich 3. Modellgetriebene Entwicklung eingebetteter Systeme mit Eclipse Dr. Domänenspezifische Sprachen Nutzung vorhandener Sprachen. Jäger Johannes Tietje Wilhelm Schäfer Paderborn, Diese Fragen sollten generell zu Beginn jeder.

Seminar WS04 Komponentenbasierte Softwareentwicklung Karl Pauls Software-Komponente A software component is a unit of composition with contractually specified interfaces and explicit context dependencies. Best Practices für flexible und wartbare Codegeneratoren mit openarchitectureware Karsten Thoms Software Architekt Bei modellgetriebener Softwareentwicklung werden aus kompakten Modellbeschreibungen lauffähige Softwareprogramme generiert.

Michael Gröschel von Hans-Martin. Was ist ein Compiler? Was ist ein Compiler und worum geht es? Wie ist ein Compiler aufgebaut? Warum beschäftigen wir uns mit Compilerbau? Wie ist die Veranstaltung organisiert? Stefan painted a picture of Maja. It was a picture of Maja that Stefan painted. A picture of Maja was painted by Stefan. A picture of Maja Stefan painted. Einführung 10 Koordination Koordination zweier Wortketten.

Nur Wortketten des gleichen Typs können koordiniert werden. Peter sucht essbare Pilze und kleine Walderdbeeren. Peter sucht im Unterholz und am Waldrand. Weglassprobe Schrittweises Weglassen einzelner Worte. Bestandteile einer Konstituente müssen gemeinsam eliminiert werden. Peter sucht essbare Pilze am Waldrand. Die folgenden Konstituenten werden dadurch für das Englische postuliert: Nominalphrase NP bestehend aus z.

Einführung 11 Präpositionalphrase PP bestehend aus z. Diese Darstellungen sind isomorph. Bei der Baumdarstellung werden oft nicht-interessierende Detailinformationen weggelassen und mit einem Dreieck symbolisiert. Geschwisterknoten X und Y sind Geschwisterknoten, wenn sie die selbe Mutter haben. Für Syntaxbäume gelten zwei wichtige Restriktionen: Nur nebeneinander liegende Teile können eine Konstituente bilden.

Keine Konstituente kann gleichzeitig zu zwei Mutterknoten gehören. Diese Restriktionen erleichtern die automatische Verarbeitung und Darstellung, aber sie erschweren die Analyse von Sätzen mit diskontinuierlichen Elementen z. Er stellt sich gern dar. Er versucht, Gabi zu helfen. Deshalb postuliert man eine Zwischenebene N' mit: In alternativer Notation wird ein Querstrich engl. Eine Kategorie, die mit einer Konstituente der Zwischenebene eine Konstituente der phrasalen Ebene bildet, nennt man Spezifikator engl.

Wie steht's mit 'weisen' im obigen Satz? Sie legen fest, was in einer Sprache möglich bzw. Eine PS-Regel hat die Form: Bn Kann gedeutet werden als Verzweigung in einem lokalen Baum oder auch als Bedingung über einem lokalen Baum. Ein lokaler Baum ist ein Baum der Tiefe 1. Rekursive Regeln erlauben die Beschreibung einer unendlichen Anzahl von Sätzen mit endlichen Mitteln. In neueren Arbeiten zur Syntaxtheorie wird argumentiert, dass PS-Regeln nicht notwendigerweise Bestandteil einer Grammatik sein müssen s.

Einführung 15 Regeln und Sätze 1. Die Beschränkung auf genau die vorkommenden Satzstrukturen ist wichtig, sonst: Jedoch ist der Erklärungswert dieser Art von Regeln gleich null. Ziel ist die möglichst einfache Beschreibung der Satzstrukturen. Kleinste Zahl kompakter, ausdrucksstarker Regeln. Ein drittes Ziel besteht darin, Regeln zu finden, die sich möglichst leicht auf andere Sprachen übertragen lassen. Ihr Einsatz wird deshalb problematisch, wenn Phänomene weiter verteilt sind.

Beispiele sind diskontinuierliche Elemente: Who did John believe Mary saw? Stefan stellt uns seinen Freund aus Kindertagen, den er 15 Jahre nicht gesehen hatte, vor. Diese Probleme versucht man in modernen Grammatiktheorien durch den Transport syntaktischer Merkmale im Syntaxbaum oder anderer Kommunikationsart in den Griff zu bekommen. Syntaktische Kategorien In modernen Grammatiktheorien wie z.

Beispielsweise will man zum Wort Mann nicht nur vermerken, dass es sich um ein Nomen handelt, sondern auch, dass diese Form u. Nominativ Singular ist und dass es sich um ein Nomen mit maskulinem Genus handelt.

Numerus, Person, Tempus und Adjektive mit Angaben bzgl. Kasus, Numerus, Genus und Deklination. Phrasale Kategorien werden auch als maximale Projektionen bezeichnet. Verallgemeinerungen über Kategorien Die Eigenschaften nominal und verbal werden als elementar angesehen und dienen zur Definition der Basiskategorien: Damit entspricht jetzt einer Akkusativ-NP die folgende Merkmalstruktur: Einführung 18 Syntaktische Merkmale Syntaktische Kategorien sind also nichts anderes als Mengen syntaktischer Merkmale, genauer: Diese nennt man Merkmalstrukturen.

Jedoch gelten einige zusätzliche Bedingungen. Ein Merkmal in einer Merkmalstruktur kann als Wert erhalten: Einführung 19 Operationen über Merkmalstrukturen Um Regeln anwenden zu können, die komplexe Merkmalstrukturen enthalten, brauchen wir eine Operation, die festlegt, wann zwei Merkmalstrukturen "zusammenpassen". Diese Operation heisst Unifikation. Sie entspricht intuitiv einer Verträglichkeitsprüfung zwischen zwei Merkmalstrukturen und führt im positiven Fall zu einer Vereinigung der Merkmalstrukturen zu einer neuen Merkmalstruktur.

Die Unifikation wird oft über die Subsumptionsrelation eingeführt: Wenn zwei Merkmalstrukturen X und Y in einer Subsumptionsrelation zueinander stehen, können sie immer unifiziert werden. Das Ergebnis ist dann gleich der informationsreicheren Merkmalstruktur.

Sie können aber auch dann unifiziert werden, wenn sie nicht in einer Subsumptionsrelation stehen, ihre Inhalte aber kompatibel sind. Genaueres dazu in der Vorlesung zu den Grundlagen der Merkmallogik. Der Student hat die Übungen gemacht. Mathematische Grundlagen der Computerlinguistik Dozentin: Grundlagen 1 Baumdiagramme Ein Baumdiagramm eines. Phrasen und Phrasenstruktur Übersicht: Februar Inhaltsverzeichnis 4 Übertragung ins e 1 4. Stellen Sie die Konstituentenstruktur der folgenden Sätze als Baumdiagramme dar: Der amtierende Bundeskanzler verzichtet auf eine erneute Kandidatur.

Wann bricht ein Vulkan aus? Verben in Zeitformen check 8. Relativsätze, Teil I Christian Gambel Sehr oft, wenn wir sprechen oder schreiben, möchten wir eine Person oder ein Objekt näher beschreiben. Dafür gibt es verschiedene Möglichkeiten wie zum Beispiel Adjektive.

Grundwissen Deutsch für die 5. OOP Java , 3. Programmiersprachen und Übersetzer Sommersemester April Theoretische Grundlagen Problem Wie kann man eine unendliche Menge von syntaktisch korrekten Programmen definieren? Einführung in die Linguistik: Einführung in die Satzsemantik T. Zimmermann, Lviv, März 1. Linguistik für Kognitionswissenschaften Computerlinguistik: Maschinelle Übersetzung Computerlinguistik Fehlübersetzung von engl. Morphologie ist die Lehre von den Klassen. Gliederung Natürlichsprachliche Systeme I D.

Oktober , c Theoretische Grundlagen der Informatik Vorlesung am Konjunktive und disjunktive Normalformen Nachdem gesprochen wurde, wie man Boolesche Terme unter einer Belegung der Variablen interpretiert und dass somit jeder Boolesche Term eine Boolesche Funktion repräsentiert,.

Hubert Truckenbrodt und Kathrin Eichler: Einführung in die moderne Sprachwissenschaft. Grundlagen der Phrasenstruktur I: Studiengang Bachelor of Arts B. Unterrichtsmaterialien in digitaler und in gedruckter Form Auszug aus: Formale Sprachen und Automaten Kapitel 1: Deskriptives Screen-Profil Handanweisung 1.

Abdullah Eusufzai Referat zum Thema: Wissenschaftliches Arbeiten Quantitative Methoden Prof. Lesen mathematischer Symbole Wissenschaftliche Argumentation Matrizenrechnung. Linguistica tedesca- LS 44S - A. Morphologie und Lexikon SS flexionsmorphologische Glossierung 1 Hinweise zur flexionsmorphologischen Glossierung Allgemeines Die flexionsmorphologische Glossierung steht als zweite Zeile unterhalb.

Lineare Algebra 1 Detlev W. Grundkurs Semantik Sitzung 3: Mengenlehre Andrew Murphy andrew. Reguläre Ausdrücke Karin Haenelt Das ist natürlich keine präzise mathematische Definition und. Einführung in die Linguistik des Deutschen www. Ein Satz ist das Verhältnis. Logische Eigenschaften von Merkmalsstrukturen 1. Logische Eigenschaften von MS Ausgangspunkt: Was erklärt werden soll Hagiwaras Arbeit konzentriert sich.

Die 5 Wortarten aus der Primarschule sind: Kommentierte Lösungen Teil I: Köpfe bestimmen Bestimmen ie die Köpfe in den nachstehend eingeklammerten Konstituenten.

Zu welcher Kategorie gehört die Konstituente. Vorkurs Mediencode Die wichtigsten grammatikalischen Termini Für die Arbeit mit Ihrem Lateinbuch benötigen Sie eine Reihe von grammatikalischen Fachbegriffen und auch ein Grundverständnis wichtiger. Partizip Perfekt per Zirkumfix im Deutschen?

Stellen Sie folgende Sätze im topologischen Feldermodell dar. Analysieren Sie auch eigebettete Sätze. Gestern holte mich Peter von der Bahn ab. Sprachliches Verhalten im Unterricht Aussprache: Spricht deutlich und verständlich Spricht alle Laute oder Lautverbindungen richtig Grammatik: Produziert alle Wörter und setzt sie an die richtigen Stellen.

Verallgemeinerndes Sprechen über Ausdrücke von AL 4. Die Theorie der schwarz-weissen Ketten. Die Theorie der schwarzen Steinchen haben wir jetzt halbwegs vertanden. Statt mit schwarzen Steinen wie die Griechen, wollen wir jetzt mit schwarzen. Theorie der Informatik 6. März Einführung Beispiel: Aussagenlogische Formeln Aus dem Logikteil: Am Anfang war das Wort! Der Begriff Morphologie wurde von Johann Wolfgang von Goethe in einer Tagebuchaufzeichnung für eine neue Wissenschaft geprägt,, die sich mit den Gestaltungsgesetzen.

Induktive Definitionen Induktive Definition: Grenzwerte existieren sicher nur dann, wenn der Zahlbereich vollständig ist, also keine Lücken aufweist. Stoyan KI-Kolloquium am Stefan Bienk Übersicht Aufgabenstellung.