texttransformer.jpg

Der TextTransformer ist eine visuelle Entwicklungsumgebung in der ein Parsergenerator mit einem einfachen C++-Interpreter und einem interaktiven Debugger kombiniert sind.

Der TextTransformer besitzt eine komfortable Bedienungsoberfläche mit Syntaxhighlighting, unmittelbarer Lokalisierung von Fehlern und einem intergrierten Debugger, der das Testen eines Programms ohne vorherige Kompilierung erlaubt.

Der Hintergrund dieses Konzepts wird im Folgenden beleuchtet.

Was ist ein Parser

Ein Parser ist eine Software, die die syntaktische Struktur von Texten analysiert. Zum Beispiel eine sogenannte CSV-Datei ( Character Separated Values ) besteht aus Zeilen, in denen Daten durch Kommata oder andere Trennzeichen voneinander getrennt sind. Viele Datenbankanwendungen können solche Dateien lesen und schreiben.
Wenn die Daten aus Worten und Zahlen bestehen, würde Struktur im TextTransformer folgendermaßen beschrieben werden:

CSV ::= Zeile*
Zeile ::= ID ( "," ID )* EOL

"ID" und "EOL" sind im TextTransformer vordefinierte, sogenannte Token, die Buchstaben/Zahlen-Folgen und das Zeilenende im Text erkennen. Der Stern '*' bezeichnet eine beliebige Wiederholung des davor stehenden Ausdrucks. Aus der Beschreibung der CSV-Datei erzeugt der TextTransformer bereits einen vollständigen Parser, der Schritt für Schritt alle einzelnen Daten im Text erkennt.

Fall-Beispiel

Wozu braucht man einen Parser

Ein Parser für sich allein ist selten zu gebrauchen. Man könnte mit ihm lediglich die Korrektheit oder Inkorrektheit einer Eingabe, z.B. einer Kreditkarten-Nummer verifizieren. Gemäß obiger Grammatik wäre z.B. eine Datei, die Leerzeilen enthielte, keine CSV-Datei.
Wirklich interessant wird ein Parser erst, wenn man ihn mit sogenannten semantischen Aktionen zu einem Übersetzer, d.h. zu Transformations-Programm ergänzt. Die semantischen Aktionen dienen dazu, die erkannten Textabschnitte zu verarbeiten. Z.B. könnte man eine semantische Aktion in obiges Beispiel einfügen, um die Anzahl der Datensätze, d.h. die Anzahl der Zeilen zu zählen.

CSV ::= ( Zeile {{ m_i++; }} )*
Zeile ::= ID ( "," ID )* EOL

"m_i" ist hier eine Variable, in der die jeweilige Zeilenanzahl gemerkt wird. Immer, wenn eine Zeile erkannt wurde, wird der Wert von m_i um eins heraufgesetzt.

Das Beispiel zeigt, das die Worte "Übersetzer" und "Transformation" hier in einer sehr weiten Bedeutung gebraucht werden. Im Beispiel wird ein Text: die CSV-Datei, in eine Zahl: die Anzahl der Datensätze, transformiert.

Komplexe Transformations-Programme

Das obige Beispiel ist ein sehr einfaches Transformationsprogramm. Das andere Extrem wäre ein Übersetzer im engen Wortsinn, der Texte einer natürlichen Sprache in eine andere Sprache übersetzen könnte. An der Lösung dieser Aufgabe beißen sich heute noch weltweit große Firmen und Universitäten die Zähne aus. Das Prinzip aber ist dasselbe: zunächst wird ein Parser konstruiert, der dann zu einem Transformations-Programm erweitert wird. Der Unterschied liegt in der Komplexität der Grammatiken des Quell- und des Zieltextes.
Wesentlich besser zu bewältigen sind Transformationsprogramme für Texte, deren Grammatik nicht natürlichen Ursprungs ist, sondern deren Syntax vom Menschen geschaffen wurde. Typische Beispiele hierfür sind Übersetzungen von Programmiersprachen in binären Code oder ein einen Interpreter und Konvertierungsprogramme verschiedener Textformate ineinander. Auch diese Aufgaben sind oft sehr komplex, so dass an deren Lösung erfahrene Software-Entwickler mit teuren Software-Werkzeugen viele Monate verbringen. So wurde eine Menge Software entwickelt, um verbreiteter Text-Formate, wie MS-Word-, Excel-, HTML- oder Pdf-Dokumente, ineinander umzuwandeln oder Teile, z.B. Tabellen oder Bilder herauszuextrahieren. Nach Programmen, die weniger populäre Textformate analysieren können, muss man schon intensiv im Internet suchen. Aussichtslos wird eine derartige Suche dann, wenn man es mit speziellen Formaten zu tun hat, die von kleineren Software-Häusern, Krankenkassen, Versicherungen oder anderen Betrieben für ihre spezifischen Aufgaben entworfen wurden. Wie soll man die in einer Textdatei verschachtelten Datensätze in eine Datenbank importieren? Und was tut ein Privatanwender, wenn er einen langen Text eingescannt hat, aber überall sind Zeichen vertauscht und die gleichen Silben sind immer wieder falsch geschrieben?

Der TextTransformer und seine Alternativen

Der TextTransformer ist speziell zur Lösung derartiger Aufgaben entwickelt. Er kann die üblichen teuren Entwicklungswerkzeuge ersetzen und vereinfacht die Entwicklung von Parsern in einem Maße, dass auch Menschen, die sich nicht professionell der Software-Entwicklung widmen, mit ihm ihre speziellen Probleme lösen können.

Ein professioneller Entwickler wird den TextTransformer schätzen, weil er sich mit ihm ganz auf die Entwicklung der Grammatik konzentrieren kann, ohne sich mit den Einzelheiten der Konstruktion des Parsers und des Scanners herumschlagen zu müssen.

Der Vorteil, den die Verwendung des TextTransformer zur Entwicklung eines Parsers hat, wird deutlicher, wenn man die Alternativen gegenüberstellt:

  • den Parser von Hand schreiben, oder
  • eines der unzähligen freien Parser-Generator-Tools zu benutzen

Die letzte Methode hat den unbestrittenen Vorteil, dass dies Werkzeug automatisch versteckte Fehler in der Grammatik erkennt, die bei einem handgeschriebenen Parser oft lange Zeit übersehen werden und später nur noch schwer, wenn überhaupt, zu korrigieren sind. Auch hat die Benutzung eines Parser-Generators den Vorteil, dass sowohl die Parser-Beschreibung als auch der erzeugte Code sehr systematisch sind. Spätere Erweiterungen einer Grammatik sind hier einfacher vorzunehmen als bei dem handgeschriebenen Gegenstück.
Die Arbeit mit einem Parser-Generator wäre sehr angenehm, wenn er nicht eine große Schwäche hätte: tritt ein Fehler beim Parsen auf, so hat man bei der Korrektur eine doppelte Arbeit zu leisten: wird der Fehler zunächst im erzeugten Code korrigiert, so müssen diese Korrekturen dann nochmals in die Parser-Beschreibung übernommen werden. Wenn man hingegen gleich die Beschreibung korrigiert, so erweist sich der Erfolg der Korrektur erst, wenn der Code neu erzeugt, kompiliert und an einem Beispiel getestet hat. So muss bei der Entwicklung eines Parsers ständig zwischen dem Generator und dem Compiler hin und her gewechselt werden. Auch genügt es nicht, den Parser nur an einem Beispiel zu testen. Einen anderen Beispielstext in den Test einzubinden erfordert aber wieder einen kleinen aber nerv-tötenden Aufwand.

Vorteil einer Parser-Generator-IDE

Der TextTransformer - und wenige ähnliche Konkurrenzprodukte - bieten hier den Ausweg. Im TextTransformer können Beispielstexte einfach über einen Auswahldialog geladen werden. Der Parser wird innerhalb des TextTransformers selbst generiert und kann dort unmittelbar ausgeführt und getestet werden. Das Testen, d.h. das Debuggen geschieht hier mit allem Komfort: schrittweise kann in Produktionen hineingesprungen oder über sie hinweggegangen werden, es kann auch unmittelbar an den Punkt gesprungen werden, an dem das nächste Token konsumiert werden wird oder es können Haltepunkte sowohl in der Grammatik wie auch im Eingabetext gesetzt werden. Erkannte Textabschnitte werden markiert, das zuletzt erkannte Token und das erwartete Token werden angezeigt und in einem Fenster lässt sich der Stack der aufgerufenen Produktionen betrachten.

Die Entwicklung eines Parsers wird damit zu einem Spiel und das auch Nicht-Software-Entwicklern Spaß machen wird.

Dennoch bleibt ein Problem: ein Parser für sich ist nutzlos. Mit dem geparsten Text soll etwas getan werden. Deshalb werden sogenannte semantische Aktionen in den Code des Parsers eingefügt, die die erkannten Textstücke verarbeiten. Damit stellt sich das obige Problem der doppelten Fehlerkorrektur aber erneut.

Alleinstellung des TextTransformers

Der TextTransformer ist weltweit der einzige Parser-Generator, der einen Interpreter integriert. Damit eignet sich der TextTransformer nicht nur zur Entwicklung von Parsern, sondern auch zur Entwicklung kompletter Übersetzer.

Schon bei der reinen Parser-Entwicklung kann der integrierte Interpreter von Vorteil sein, da er sich hervorragend zur Ausgabe von Log-Informationen eignet, die den Fortschritt und Zustand des Parsers dokumentieren können.

Seine größte Stärke zeigt der TextTransformer aber dann, wenn es darum geht, ein vollständiges Transformations-Programm zu entwickeln. Der Sprachumfang des Interpreters reicht aus, um viele praktische Aufgaben, wie sie bei einem engagierten Computer-Hacker täglich anfallen, bewältigen zu können. Selbst die Konstruktion von Parse-Bäumen und ihre Auswertung ist möglich.

Für spezifische, professionelle Aufgaben ist es weiterhin möglich, beliebigen C++-Code in die Produktionen einzubetten. Interpreter-Code kann mit anderem Code beliebig kombiniert werden.

Versionen

Den TextTransformer gibt es in drei Versionen: einer freien, einer Standard- und einer Professional Version.

  • Die freie Version (zeitlich nicht limitiert) besitzt bereits nahezu alle Möglichkeiten Texte zu analysieren und umzuformen. Nach der Installation des TextTransformers steht auch die Funktionalität der Standard Version für 30 Tage zum Testen zur Verfügung.
  • Die Standard Version besitzt zusätzlich einen Transformations-Manager um Dateigruppen interaktiv zur Übersetzung auszuwählen. Diese Version verfügt zudem einen erweiterten Interpreter: auf Unterausdrücke von Token kann zugegriffen werden und Container können benutzt werden.
  • In der Professional Version des TextTransformers lässt sich ein fertiges Transformationsprogramm als C++ Programmcode exportieren und so in andere Softwareprodukte einbinden. So ist der Kern des TextTransformers selbsterzeugt.
Technische Details

   english english

 
Letzte Neuigkeiten
28.10.24
Delphi2Cpp 2.5: in Groß- und Kleinschreibung mit Deklarationen übereinstimmende Symbolnamen [more...]

26.08.24
Delphi2Cpp 2.4: Aktualisiert auf RAD Studio 12.1 Athen [more...]



"...Fantastic!!!!

... You have exceeded my expectations and I love your product. We will get a lot of use out of it in the future for other projects."


Charles Finley
xformix 23-02-07


top_prize_winner.png

I was extremely impressed with your components and tools. Not only extremely powerful but very professionally done and well documented, etc. Really quality work, congratulations

mouser (First Author, Administrator)


 
Diese Homepage ist aus einfachen Texten mit [Minimal Website ]generiert.

Minimal Website
Minimal Website ist mit Hilfe des TextTransformers hergestellt.

TextTransformer
Der TextTransformer ist gemacht mit dem Borland CBuilder

  borland