Etwas planlos…

pglexer erzeugt nun pgtoken. Schön, hm?

Jedenfalls funktioniert das Ergebnis gut bisher. Es ist möglich, aus verschiedenen Datenquellen (“sources”) zu lesen, z.B. aus einem Dateistrom, String, wide-character String oder über eine Funktion, z.B. getchar(). pglexer übernimmt dabei automatisch das Buffering.

IMG_20140114_231421Aktueller Stand (so wie hier auf SourceForge).

Naja soooo viel hat sich im Grunde nicht getan in der libphorward.
Was aber nun schon mal geht ist:

  • Grammatiken über API-Funktionen definieren
  • Parse-Tabellen für LR(0), LR(1) und LALR(1) mit table compression werden erzeugt
  • Lexer wie oben beschrieben
  • Regex-Library sehr stark verbessert: benutzt jetzt kein llist mehr, nurnoch plist :-), und alle bisher aufgetretenen Bugs sind gefixt.

Todo:

  • pgparser auf einen Stand bringen der erstmal nur UTF-8 unterstützt aber läuft mit dem Ziel, einen Parser direkt über die libphorward zu definieren
  • Rückgabe des Parsetrees als pgast-Struktur, später TBNF-basierte Konstruktion eines AST (abstract syntax tree).
  • Funktion in pggrammar implementieren, die eine Grammatik über sich selbst parst und zurückgibt (pg_grammar_parse()).

UniCC wird auch noch auf plist umgestellt bzw. auf die neue Funktion pregex_dfa_to_matrix() umgeschrieben. Zur Zeit lässt sich der UniCC nicht mit der aktuellen libphorward 0.18 linken, auch wenn er bereits schon auf einige 0.18-spezifische Neuerunge umgebaut worden ist.