Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

Site Map
Tags
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:

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?

Anschnallen: Die Bausteine


  • Installation
sudo port install ragel

Beispiel: SVG Path Parser

Beispiel: XML Parser

Ausblick: Zustandsautomaten

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