{"id":25,"date":"2015-03-06T12:02:50","date_gmt":"2015-03-06T11:02:50","guid":{"rendered":"http:\/\/localhost\/wordpress\/?page_id=25"},"modified":"2015-03-10T15:31:39","modified_gmt":"2015-03-10T14:31:39","slug":"compilerbau","status":"publish","type":"page","link":"http:\/\/bj-ig.de\/leistungen\/compilerbau\/","title":{"rendered":"Compilerbau"},"content":{"rendered":"
Compiler sind Programme, die eine (Programmier-) Sprache in eine andere \u00fcbersetzen. Alle Compiler bestehen aus den Softwareteilen Front-End und Back-End.<\/p>\n
Das Front-End wird durch die Struktur der Eingabesprache bestimmt. Zum Front-End geh\u00f6ren die Lexikalische Analyse, die Syntaktische Analyse und die Semantische Analyse. Ein Repository \u00fcbergibt die Ergebnisse der Analyse an das Back-End, das aus Optimierer und Code-Generator besteht.<\/p>\n
Die Lexikalische Analyse liest die Eingabe durch und klassifiziert diese nach Eingabest\u00fccken wie W\u00f6rter, Zahlen und Zeichen.<\/p>\n
Die Syntaktische Analyse analysiert diesen \u201eWortstrom\u201c und erkennt S\u00e4tze der Eingabesprache. Das hei\u00dft, sie \u00fcberpr\u00fcft, inwieweit die Eingaben der Programmiersprache zugeh\u00f6ren und erstellt den Syntaxbaum.<\/p>\n
W\u00e4hrend der Semantischen Analyse wird mit Hilfe dieses Syntaxbaumes untersucht, ob die Konstrukte sinnvoll sind. Zus\u00e4tzlich wird ein Repository mit Informationen zu Objekten und Symbolen aufgebaut.<\/p>\n
Der Optimierer erkennt im Syntaxbaum die gespeicherten Konstrukte und markiert, welche Art der Ausgabe das Back-End schlie\u00dflich w\u00e4hlen soll.<\/p>\n
Der Codegenerator erzeugt den Zielcode. Dabei eine spezielle Beschreibungssprache zum Einsatz zu bringen, ist eine von uns entwickelte Technologie, die im Rahmen unserer wissenschaftlichen Arbeiten entstand.<\/p>\n
Viele Compiler \u00fcbersetzen eine Programmiersprache (z.B. C oder C++) in Maschinensprache (Assembler) oder erzeugen z.B. aus Java Code f\u00fcr eine Virtuelle Maschine. Dabei geht Abstaktion verloren – es entsteht Code, der nicht weiter bearbeitet werden kann und soll.<\/p>\n
Migrations-Compiler hingegen versuchen eine Programmiersprache in eine andere Programmiersprache auf dem gleichen Abstraktionsniveau zu \u00fcbersetzen – Entwicklung soll auch in dieser Sprache m\u00f6glich sein. Migrationscompiler sind deshalb eine gr\u00f6\u00dfere Herausforderung an den Compilerbauer.<\/p>\n
F\u00fcr alle g\u00e4ngigen Programmiersprachen und Dialekte gibt es heute nat\u00fcrlich schon Compiler zu kaufen oder gar kostenlos. Allerdings gibt es viele Projekte, die in Sprachen wie ROSI-SQL, INFORMIX-4GL, COBOL oder anderen exotischen Programmiersprachen erstellt wurden. Hier sind oft viele tausend Mannjahre Entwicklungszeit in Systemen investiert, die keine Zukunft haben oder gro\u00dfe Wartungsaufwendungen erfordern.<\/p>\n
An solchen Stellen setzen Migrationscompiler an und erlauben, die Investitionen in gro\u00dfe Softwaresysteme weiter auf neuen Plattformen zu nutzen. So konnte zum Beispiel durch die Erstellung eines Migrationscompilers (R2C) das Toyota H\u00e4ndlersystem\u00a0 \u201eTOPCO\u201c von ROSI-SQL nach C++ migriert werden. Die Entwicklung von Compiler- und Laufzeitsystemen macht nat\u00fcrlich auch dann Sinn, wenn beim Deployment der Software ein Vorteil erzielt werden kann. Bei der Entwicklung des 4GL-Compilers f\u00fcr INFORMIX-4GL lag das Augenmerk vor allem auf einer Erweiterung der F\u00e4higkeiten des Systems um grafische Oberfl\u00e4chen und variablere Datenbankanbindung.<\/p>\n
Im Bereich Compilerbau-Technologie sind wir auch theoretisch t\u00e4tig. In Zusammenarbeit mit der TU Ilmenau betreuten wir bis jetzt vier Diplomarbeiten:<\/p>\n
Auftragsentwicklung von Migrations-Compilern Was ist ein Compiler, was ist Compilerbau? Compiler sind Programme, die eine (Programmier-) Sprache in eine andere \u00fcbersetzen. Alle Compiler bestehen aus den Softwareteilen Front-End und Back-End. Das Front-End wird durch die Struktur der Eingabesprache bestimmt. Zum Front-End geh\u00f6ren die Lexikalische Analyse, die Syntaktische Analyse und die Semantische Analyse. Ein Repository \u00fcbergibt […]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":5,"menu_order":0,"comment_status":"closed","ping_status":"open","template":"index-blue.php","meta":{"footnotes":""},"_links":{"self":[{"href":"http:\/\/bj-ig.de\/wp-json\/wp\/v2\/pages\/25"}],"collection":[{"href":"http:\/\/bj-ig.de\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"http:\/\/bj-ig.de\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"http:\/\/bj-ig.de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/bj-ig.de\/wp-json\/wp\/v2\/comments?post=25"}],"version-history":[{"count":2,"href":"http:\/\/bj-ig.de\/wp-json\/wp\/v2\/pages\/25\/revisions"}],"predecessor-version":[{"id":279,"href":"http:\/\/bj-ig.de\/wp-json\/wp\/v2\/pages\/25\/revisions\/279"}],"up":[{"embeddable":true,"href":"http:\/\/bj-ig.de\/wp-json\/wp\/v2\/pages\/5"}],"wp:attachment":[{"href":"http:\/\/bj-ig.de\/wp-json\/wp\/v2\/media?parent=25"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}