Benutzer-Werkzeuge

Webseiten-Werkzeuge


cocoaheads:ragel

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
cocoaheads:ragel [2010/11/12 10:30] – [Vielen Dank] mrococoaheads:ragel [2021/02/01 11:37] (aktuell) – [Beispiel: SVG Path Parser] mro
Zeile 9: Zeile 9:
  * Firefox recht gut per Plugin: https://addons.mozilla.org/de/firefox/addon/1568  * Firefox recht gut per Plugin: https://addons.mozilla.org/de/firefox/addon/1568
  * Opera von Haus aus  * Opera von Haus aus
 +
 = Parser mit Ragel = Parser mit Ragel
  
Zeile 26: Zeile 27:
  * nicht gut genug oder  * nicht gut genug oder
  * Lizenzprobleme.  * Lizenzprobleme.
 +
 == Was spricht gegen Ad-Hoc Parsing (a.k.a. Gefrickel)? == Was spricht gegen Ad-Hoc Parsing (a.k.a. Gefrickel)?
 +
  * der Parser sollte korrekt sein,  * der Parser sollte korrekt sein,
  * Wartbarkeit,  * Wartbarkeit,
  * [[http://de.wikipedia.org/wiki/EBNF|BNF Grammatik]] ist meist schon da,  * [[http://de.wikipedia.org/wiki/EBNF|BNF Grammatik]] ist meist schon da,
  * fast immer schlechter als ein humorloser Zustandsautomat.  * fast immer schlechter als ein humorloser Zustandsautomat.
 +
 == Quelltext Impression == Quelltext Impression
 +
 z.B. die [[http://www.w3.org/TR/2008/REC-xml-20081126/#NT-document|XML Spec]] sagt: z.B. die [[http://www.w3.org/TR/2008/REC-xml-20081126/#NT-document|XML Spec]] sagt:
 +
 <code bnf>document    ::= prolog element Misc* <code bnf>document    ::= prolog element Misc*
 prolog      ::= XMLDecl? Misc* (doctypedecl Misc*)? prolog      ::= XMLDecl? Misc* (doctypedecl Misc*)?
Zeile 42: Zeile 48:
 prolog        = XMLDecl? Misc*; prolog        = XMLDecl? Misc*;
 document      = prolog elem_query Misc*;</code> document      = prolog elem_query Misc*;</code>
 +
 und natürlich noch ein paar Zaubersprüche rundrum. und natürlich noch ein paar Zaubersprüche rundrum.
- 
  
 == Wie komme ich drauf? == Wie komme ich drauf?
- * Experiment ob SVG ([[http://www.w3.org/TR/SVG11/paths.html#PathDataBNF|Path Syntax!]]) als Speicherformat für [[:jugm:p2d|piccolo2d.org, eine Java 2D Scenegraph API]] taugt. Dann könnten Designer die Screens direkt mit Illustrator oder Inkscape bauen. [[http://code.google.com/p/piccolo2d/source/browse/piccolo2d.java/branches/svg2009/svg/src/main/ragel/PathParser.rl|Ergebnis: evtl.]],+ 
 + * Experiment ob SVG ([[http://www.w3.org/TR/SVG11/paths.html#PathDataBNF|Path Syntax!]]) als Speicherformat für [[:jugm:p2d|piccolo2d.org, eine Java 2D Scenegraph API]] taugt. Dann könnten Designer die Screens direkt mit Illustrator oder Inkscape bauen. [[https://github.com/piccolo2d/piccolo2d.java/blob/svg/svg/src/main/ragel/PathParser.rl|Ergebnis: evtl.]],
  * iPhone App soll ca. 500K einfaches XML schneller als [[http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSXMLParser_Class/Reference/Reference.html|NSXMLParser]] parsen (14 Sec.). Ergebnis: 0.3 Sec.  * iPhone App soll ca. 500K einfaches XML schneller als [[http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSXMLParser_Class/Reference/Reference.html|NSXMLParser]] parsen (14 Sec.). Ergebnis: 0.3 Sec.
 +
 == Anschnallen: Die Bausteine == Anschnallen: Die Bausteine
 +
  * die [[http://www.complang.org/ragel/|Grammatik (BNF-artig)]]  * die [[http://www.complang.org/ragel/|Grammatik (BNF-artig)]]
  * "Actions" bzw. Callbacks in die eigene Logik  * "Actions" bzw. Callbacks in die eigene Logik
Zeile 57: Zeile 66:
  
 ---------- ----------
 +
 * Installation * Installation
 +
 <code bash>sudo port install ragel</code> <code bash>sudo port install ragel</code>
 +
 == Beispiel: SVG Path Parser == Beispiel: SVG Path Parser
  
  * [[http://www.w3.org/TR/SVG11/paths.html#PathDataBNF|Grammatik beim W3C]]  * [[http://www.w3.org/TR/SVG11/paths.html#PathDataBNF|Grammatik beim W3C]]
- * [[http://github.com/mro/MROGeometry/blob/master/PathParser.rl|Ragel Input]] + * [[https://codeberg.org/mro/MROGeometry/src/branch/master/MROGeometry/PathParser.rl|Ragel Input]] 
- * [[http://github.com/mro/MROGeometry/blob/master/PathParser.m|Ragel Output (Objective C)]] + * [[https://codeberg.org/mro/MROGeometry/src/branch/master/MROGeometry/PathParser.m|Ragel Output (Objective C)]] 
- [[http://drop.mro.name/dev/PathParser.pdf|Ragel Output (Zustandsautomat PDF)]]+ {{:cocoaheads:pathparser.pdf|Ragel Output (Zustandsautomat PDF)}}
  
 ------ ------
-http://gist.github.com/579192#file_path_parser.rl 
  
 +http://gist.github.com/579192#file_path_parser.rl
 == Beispiel: XML Parser == Beispiel: XML Parser
  
  * [[http://www.w3.org/TR/REC-xml/#NT-document|Grammatik beim W3C]]  * [[http://www.w3.org/TR/REC-xml/#NT-document|Grammatik beim W3C]]
- * [[http://gist.github.com/591942#file_schema.rnc|RelaxNG Schema]] + * [[https://gist.github.com/mro/591942#file-schema-rnc|RelaxNG Schema]] 
- * [[http://gist.github.com/591942#file_xml_loader_ragel.rl|Ragel Input]] + * [[https://gist.github.com/mro/591942#file-xmlloaderragel-rl|Ragel Input]] 
- * [[http://gist.github.com/591942#file_xml_loader_ragel.m|Ragel Output (Objective C)]] + * [[https://gist.github.com/mro/591942#file-xmlloaderragel-m|Ragel Output (Objective C)]] 
- [[http://gist.github.com/591942#file_xml_loader_ragel.pdf|Ragel Output (Zustandsautomat PDF)]]+ {{:cocoaheads:xmlloaderragel.pdf|Ragel Output (Zustandsautomat PDF)}}
  
 == Ausblick: Zustandsautomaten == Ausblick: Zustandsautomaten
 +
  * [[http://zedshaw.com/essays/ragel_state_charts.html|UTU Hub State]]  * [[http://zedshaw.com/essays/ragel_state_charts.html|UTU Hub State]]
  
 {{ http://zedshaw.com/essays/HubState_small.png }} {{ http://zedshaw.com/essays/HubState_small.png }}
- 
 == Vielen Dank == Vielen Dank
  
-{{ http://www.cocoaheads.org/dev/cocoahead_sm2.png}}+{{ :cocoaheads:cocoaheads-logo.svg?200}}
 für Eure Aufmerksamkeit. für Eure Aufmerksamkeit.
  
cocoaheads/ragel.1289554259.txt.gz · Zuletzt geändert: 2010/11/12 10:30 von mro