pggrammar

Momentan habe ich die Überlegung, Teile der Funktionen des UniCC Parser Generators über ein objektorientiertes API in die libphorward einzubinden. Derzeut ist das zwar noch “closed source”, da es erst mal ein wenig Gestalt annehmen soll, der erste Ansatz funktioniert aber schon, und basiert auf den TBNF-Ideen von vor ein paar Monaten.

Ein erster Dump der aufgebauten Grammatik kann sich eigentlich auch schon sehen lassen:

ptestMal sehen ob ich dran festhalte. Die Funktions-/Objektnamen sind noch etwas lang, pgproduction oder pgnonterminal lässt sich nicht so fix schreiben, ist aber sprechend.

Naja… dann kann man jetzt erst mal die LALR(1) Tabellengenerierung aus UniCC mit einfließen lassen und danach die TBNF-Erweiterungen. Natürlich soll es auch möglich sein, die Grammatik direkt über einen String in BNF-Notation zu definieren, so daß man nicht erst diese extrem vielen Funktionsaufrufe benötigt.

Zellenwart GFK

Gestern hab ich den letzten Tag eines viertägigen Lehrgangs erfolgreich absolviert. Jetzt darf ich mich als Zellenwart für Flugzeuge in GFK-Bauweise bezeichnen. Das ist zwar noch nicht so cool wie Werkstattleiter, aber ich bin zumindest schon ein wenig mit der Materie vertraut.

Wenn ich ehrlich bin finde ich das Thema sogar sehr interessant. Man kann aus Glasfasern (bzw. auch Kohlefasern) bzw. Geweben und Kunstharz extrem wiederstandsfähige Teile bauen – vom Steuerknüppel bis hin zum kompletten Flugzeug. Auf jeden Fall möchte ich mich damit weiterhin beschäftigen.

astir_fluegelMein Dank gilt auch unserem Lehrgangsleiter Siegfried Piontkowski. Er hat auf dem Gebiet echt viel Ahnung, und war maßgeblich am Aufbau des Prototypen der LS-11 (Akaflieg Köln) beteiligt. Der Lehrgang hat sehr viel Spaß gemacht, und ich hoffe dass ich aus dem gewonnen Wissen ein paar sinnvolle Ideen umsetzen und weiter ausbauen kann. Es waren vier sehr lehrreiche und interessante Tage!

LS-11 Akaflieg Köln

A Perfect Circle … ohhh ya!

Parallel zum neuen Celldweller Album sauge ich zur Zeit die drei Alben Emotive, Mer De Noms und Thirtheens Step der Band A Perfect Circle wie in Extase in mich rein. Ob auf der Arbeit, Unterwegs per Kopfhörer oder Zuhause läuft diese Musik (vielen Dank an meinen Freund Andi für den guten Tipp!!!).

A-Perfect-Circle-2560x1024A Perfect Circle ist ein Musik-Projekt u.a. von Tool-Sänger Maynard James Keenan. Die Musik orientiert sich am Progressive-Rock. Ich glaube, da ich ja inzwischen auch Tool lieben gelernt habe, habe ich diese Musik gleich regelrecht in mich aufgesogen. Der Stil ist wie Tool… das erkennt man vor allem an so Liedern wie The Hollow, Judith oder The Outsider… doch einige Lieder sind noch viel Ruhiger… noch Entspannender… ich sag nur Vanishing, Orestes oder Annihilation.

Bei vielen Liedern muss ich irgendwie immer an ferne Landschaften in Alaska und Kanada denken. Stille. Freiheit. Menschenlos.

A Perfect Circle hat’s raus…

Frohes Neues!

Moin moin!

Sooooo, dann mal ein Frohes Neues Jahr 2013!

Bin ich froh das diese Scheiße nun erst mal vorbei ist und man wieder erhobenen Hauptes der Zukunft entgegen blicken kann. Vorerst stehen zum Glück keine Weihnachtsgeschenkemarathons mehr in total überfüllten Läden und auf Weihnachtsmärkten an sowie das Ärgernis mit Zustelldiensten, die nicht pünktlich liefern können … dann ist diese blöde Ballerei endlich zu Ende… ja und zu guterletzt steht auch kein weiterer Weltuntergang mehr vor der Tür.

Also: Entspannend zurücklehnen und sich wieder vom Alltag berieseln lassen!

Was ich mir für dieses Jahr vornehmen:

  • Mehr Fliegen (mehr, mehr, MEHR, NOCH MEEEEEHR!!!!)
  • Weniger Trinken

… hm… muss ich mich bald wohl in Pilotbier umbenennen, was? 😉

Dann mal … Frohes Schaffen oder so…

Noch ein Parser Generator?

Nun, da die Segelflugsaison inzwischen leider vorbei ist beschäftige ich mich mal wieder ein wenig mit dem Programmierkram ausserhalb der Arbeit (auch wenn man dazu nach der Arbeit kaum noch Lust zu hat… leider!).

Mitte des Jahres habe ich das Programm UniCC, ein LALR(1) Parser Generator, veröffentlicht. An sich ist diese Software genial, da sie eben genau das kann, was ich an solch ein Programm an Anforderungen und Erwartungen stelle. Aber vielleicht hab ich mich damit auch selbst etwas übernommen, da UniCC einen Nachteil hat: Sich selbst! Der Parser Generator ist nämlich nun doch so flexibel, komplex, vielseitig und universell, das er schon wieder viel zu kompliziert ist. Eben eine typische, eierlegende Wollmilchsau.

Was ich zur Zeit lieber hätte wäre eine Möglichkeit einen Parser für einfache Sprachen, die man “mal eben” parsen möchte, direkt im C-Code zu beschreiben.

Mein Augenmerk fiel dabei auf EBNF, also die Extendend Backus-Naur Form. Sie beschreibt bereits fast vollständig einen rekursive Absteigenden Parser, wenn man einen entsprechenden Parser Generator dafür schreibt.

Zuerst hatte ich überlegt, das ganze als Kommentare zu erlauben, die dann von einem Parser Generator (der natürlich dafür geschrieben werden müsste) geparst wird. Das hat aber auch wieder den Nachteil, das man seinen C-Code nicht direkt an den Compiler schicken kann um ihn dann auszführen, ein Zwischenschritt mit Zwischendatei ist notwendig.

Ok – dann wohl doch eher eine Library? Hier mal ein Enwurf für die Verewendung einer  Mini-Library die einen Parser in EBNF einlesen und parsen kann. Die Funktion der lexikalischen Analyse übernehmen natürlich die genialen Regular Expression Funktionen der Phorward Foundation Library 😀 …

Natürlich kann man das nicht im C-Code in einen rekursiv absteigenden Parser umsetzen. Was man aber machen könnte wäre es, einen Parse-Tree daraus zu erzeugen. Das gestaltet sich aber auch nicht so einfach, wenn man sich mal überlegt wie das ganze dann als Baum aussehen müsste, denn für alle Klammern in einer EBNF-Grammatik müsste man wieder anonyme Nichtterminale im Hintergrund erzeugen, die dann dort eingesetzt werden – und dann pack da mal noch Code für eine Baumdefinition rein… vergiss es!

Bei meinen Recherchen bin ich dann aber auf TBNF gestoßen. TBNF steht für “Translational Backus Naur Form”. Der Gedanke dahinter ist, Syntax und Abstract Syntax Tree (AST) der Sprache in einer einzelnen Definition zu hinterlegen – genial! Das wäre quasi das komplette Compiler-Frontend bis zur Zwischensprache in einer Definition. Dafür gibt es einen Artikel bei ACM (Association for Computer Machinery), den ich mir dann auch mal kostenpflichtig gegönnt habe.

Tja, so wie es aussieht würde ich das mal probieren, als C-Library umzusetzen. Eine TBNF-Sprache als Eingabe, die man so ähnlich benutzt wie die o.g. Library. Das würde aber bedeuten, daß der Parser auch LALR(1) wird, weil man das als Rekursive Descent eben nicht so schön umsetzen kann – erst recht nicht in Form eines ASTs.

Das Ergebnis eines Parse-Prozesses ist dann ein AST als Datenstruktur, den man dann direkt mit einer weiteren Funktion transferieren kann. Zur Traversierung könnte das Projekt Mantra, das ich ebenfalls dieses Jahr begonnen und dann mangels Nutzen eingestellt hatte, noch interessant werden.

Hier mal ein rudimentärer Entwurf.

Interessant sind die Funktionen r_set_node(), die einen AST-Knoten definieren. Die dort möglichen Emit-Ereignisse sind

  • BOTTOMUP beim Eintritt in den Knoten
  • PASSOVER beim Durchlaufen der Unterknoten
  • TOPDOWN beim Austritt aus dem Knoten

Auch UniCC könnte im Nachhinein davon Profitieren, wenn man über Optionals solch eine Funktionaltität im Parser Template unterstützen würde.

Gut, das wäre dann der vierte Parser-Generator den ich schreiben würde… neben min_lalr1, JS/CC und UniCC… mal schauen wo der Wahninn dann noch hinführt. Aber dieses TBNF ist schon eine coole Sache, die ich in jedem Fall mal implementieren möchte.

Eisregen

… mal ein Funpic in Eigenregie. Ich habs leider nie veröffentlicht, aber fand den Gedanken dahinter ganz witzig, das aus der Schlagzeile von den Ruhr Nachrichten zu bauen! Ich glaube das war 2010 als ich das Bild gemacht hatte.