Benutzer-Werkzeuge

Webseiten-Werkzeuge


cocoaheads:ragel

View page as slide show


Diese Wiki Seite sieht etwas verhagelt aus, da sie in erster Linie im Präsentationsmodus funktionieren muß.

Browser im Kiosk Modus: * Safari: keine Ahnung * Firefox recht gut per Plugin: https://addons.mozilla.org/de/firefox/addon/1568 * Opera von Haus aus

= Parser mit Ragel

komplizierte Grammatiken und rattenschnelles XML

Vortrag am 22. September 2010

If you graph these numbers, patterns emerge. Max Cohen, PI


== Warum Parser bauen?

trotz XML, JSON, YAML etc.: * eigene maßgeschneiderte Protokolle, * 3rd Party Libs nicht vorhanden, * nicht gut genug oder * Lizenzprobleme.

== Was spricht gegen Ad-Hoc Parsing (a.k.a. Gefrickel)?

* der Parser sollte korrekt sein, * Wartbarkeit, * BNF Grammatik ist meist schon da, * fast immer schlechter als ein humorloser Zustandsautomat.

== Quelltext Impression

z.B. die XML Spec sagt:

document    ::= prolog element Misc*
prolog      ::= XMLDecl? Misc* (doctypedecl Misc*)?
XMLDecl     ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>'
VersionInfo ::= S 'version' Eq ("'" VersionNum "'" | '"' VersionNum '"')

Ragel will:

VersionInfo   = S 'version' Eq ("'" VersionNum "'" | '"' VersionNum '"');
XMLDecl	      = '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>';
prolog        = XMLDecl? Misc*;
document      = prolog elem_query Misc*;

und natürlich noch ein paar Zaubersprüche rundrum.

== Wie komme ich drauf?

* Experiment ob SVG (Path Syntax!) als Speicherformat für piccolo2d.org, eine Java 2D Scenegraph API taugt. Dann könnten Designer die Screens direkt mit Illustrator oder Inkscape bauen. Ergebnis: evtl., * iPhone App soll ca. 500K einfaches XML schneller als NSXMLParser parsen (14 Sec.). Ergebnis: 0.3 Sec.

== Anschnallen: Die Bausteine

* die Grammatik (BNF-artig) * „Actions“ bzw. Callbacks in die eigene Logik * Treiber Code um das ganze loszutreten * ragel Kommandozeile per Makefile

  • Zustandsautomat in C compilieren
  • Zustandsautomat via Graphviz visualisieren

* Installation

sudo port install ragel

== Beispiel: SVG Path Parser

* Grammatik beim W3C * Ragel Input * Ragel Output (Objective C) * Ragel Output (Zustandsautomat PDF)


http://gist.github.com/579192#file_path_parser.rl == Beispiel: XML Parser

* Grammatik beim W3C * RelaxNG Schema * Ragel Input * Ragel Output (Objective C) * Ragel Output (Zustandsautomat PDF)

== Ausblick: Zustandsautomaten

* UTU Hub State

== Vielen Dank

für Eure Aufmerksamkeit.

Feedback willkommmen an Marcus Rohrmoser

Die Folien zum Nachlesen gibt's hier:

http://mro.name/go/cocoaheads_ragel


cocoaheads/ragel.txt · Zuletzt geändert: 2021/02/01 11:37 von mro