Frage

Ich bin ein HTML-Parser für meine eigene Unterhaltung zu schreiben, und ich wollte M ausprobieren.

Ich stütze diese Arbeit auf dem HTML 4.01-Standard und dort heißt es

  

Obwohl der STYLE und SCRIPT-Elemente   verwenden CDATA für ihr Datenmodell für   diese Elemente, CDATA muss behandelt werden   unterschiedlich von Benutzerprogrammen. Markup und   Einheiten müssen als Rohtext behandelt werden   und auf die Anwendung als übergeben.   Das erste Auftreten des Zeichens   Sequenz "

Ich denke über den es für eine Weile und wirklich das, was ich will, ist so etwas wie dies

syntax Main 
    = "<script>" Script "</script>"
    ;
token Script
    = TakeWhileNot("</") // this is not valid M grammar
    ;

ich meine Selbstfindung feststellen, dass ich eine Art tokenization Regel ausgeführt werden soll, dass Streichhölzer, bis ich erreichen einen offenen Winkel

Wenn die Escape-Sequenz ein einzelne Zeichen ist, würde dies kein Problem sein, denn dann könnte ich diesen geschrieben habe.

token Script
    = ScriptEscape+
    ;
token ScriptEscape
    = !"<"
    ;

Und das funktionieren würde, nicht sicher, ob ich darüber den richtigen Weg gehe, aber das Problem ist eine Art zu dem im Zusammenhang, dass ich eine Sprache in einer anderen eingebettet, aber ich kümmere mich nicht um die Skriptsprache in diesem Fall so ich möchte einfach einen Kopf überspringen.

War es hilfreich?

Lösung

dachte ich diesen netten Trick aus, die nicht ganz klar war, ...

syntax Main 
    = "<script>" Script* "</script>"
    ;
token Script
    = !('<')
    | '<' !('/')
    ;

Nun, da der gültige MGrammar, die in übersetzt:

  • Nehmen Sie nicht die '<' OR nehmen '<' NICHT '/'

Welche etwas, bis ein

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top