Frage

Gibt es Einschränkung Parse-Funktion Macht Rebol? Wäre es der Parsen der ganzen css2 / CSS 3 spec fähig sein oder wird es theoretische Unmöglichkeit begegnen, einige Regeln zu bilden?

Update nach HostileFork Antwort: Ich meine in regexp halte ich es für eher unmöglich wäre, ist Parse viel mächtiger

Wenn ja bedeutet es, es möglich wäre, ein Browser in Rebol kompatibel vid zu bauen mit html5?

War es hilfreich?

Lösung

Ihre Frage „Gibt es Grenzen“ ist rutschig. Ich werde versuchen, und geben Sie „ die Antwort“ statt nur „ja, sicher“ ... was allerdings nicht zu Bildungs ??mehr sinnvoll sein würde. :)

Betrachten Sie den folgenden Code-Schnipsel. Es erfasst die Parser Position in x, und dann läuft was im DO Dialekt in Klammern ist. Dieser Code Wieder Sätze x an den Schwanz des Eingangs, wenn die css-parser Funktion erfolgreich ist, oder auf den Kopf des Eingangs, wenn die Funktion fehlschlägt. Schließlich setzt er die Parse-Position auf die aktuelle x. Und wie wir wissen, gibt PARST nur wahr, wenn wir am Ende der Eingabereihe sind, wenn die Regeln beenden ...

parse my-css [x: (x: either css-parser x [tail x] [head x]]) :x]

Das ist gültig Parse-Dialekt-Code und es wahr, wenn (und nur dann) die css-parser Funktion erfolgreich ist. Deshalb, wenn Sie einen CSS-Parser in Rebol überhaupt schreiben können, können Sie es schreibt „in dem Parse-Dialekt“.

(Dies führt zu der Frage, es ist möglich, ein bestimmtes Rechenproblem in einer Rebol Funktion zu lösen. Zum Glück, Informatiker hat nicht zu re-Antwort diese Frage jedes Mal, wenn eine neue Sprache ich öffnet. Können Sie compute etwas, dass durch eine Turing-Maschine berechnet werden, und nichts, was nicht sein kann ... und schauen Sie sich Alan Turings eigenen Worte , in juristischer Hinsicht. CSS-Analyse ist nicht genau das Halteproblem, also ja ... es kann getan werden.)

Ich werde einen Stich nehme bei Wieder Gestaltung Ihrer Frage:

"Ist es möglich, einen Block von Regeln (die PAREN nicht verwenden !, SET-WORD !, oder GET-WORD! Konstrukte) zu schreiben, die in die SYNTAX-Funktion übergeben werden kann, und gibt TRUE zurück auf einem beliebigen gültigen CSS-Datei und FALSCH auf jeder malformed ein?“

Die formale Spezifikation das, was für gute oder schlechten CSS wird vom W3C löscht:

http://www.w3.org/TR/CSS2/grammar.html

Beachten Sie aber, dass auch dort, es ist nicht alles cut-and-dry. Ihre „formale“ Spezifikation der Farbkonstanten können nicht ausschließen #abcd, hatten sie darüber in den Kommentaren zu schreiben, in Englisch:

/*
 * There is a constraint on the color that it must
 * have either 3 or 6 hex-digits (i.e., [0-9a-fA-F])
 * after the "#"; e.g., "#000" is OK, but "#abcd" is not.
 */
hexcolor
  : HASH S*
  ;

Das führt uns zu fragen, ob wir Rebol für nicht in der Lage zu sein vergeben würden diese Art von Anerkennung zu tun, nachdem wir PARSEN Hände durch Wegnehmen PAREN! / GET-WORD! / SET-WORD gebunden sind! (Ich will nur diese Art von Problem hinweisen, in Anbetracht Ihrer Frage).

Im Rahmen des Rebol 3 Parse-Projektes wird es ein Zuschreibung von Theorie der Parse ...

Die PARSE Dialekt ist ein erweitertes Mitglied der Familie der Top-Down-Parsing-Sprachen (TDPL Familie), einschließlich der Top-down-Sprache (TDPL) Parsen, die generali Top-down-Parsing-Sprache (GTDPL) und der Parsing Ausdruck Grammatik (PEG) und verwendet die gleiche „geordnete Wahl“ Parsen Verfahren wie die anderen Mitglieder der Familie.

Wie bereits oben in der Verbindung aus, wobei ein Mitglied dieser Klasse Rebol macht, PARST streng leistungsstärker als die beiden regulären Ausdrücken und LL-Parser . Ich nehme an, es ist viel stärker als LL (k) und LL * Parser als gut, aber es ist ein gewesen Weile her, seit ich das Zeug studiert habe und ich würde mein Leben darauf nicht wetten. :)

Sie haben nicht wirklich braucht, um zu verstehen, was all das bedeutet, um zu nutzen es Ihre Antwort „es kann getan werden“ Frage. Da die Menschen haben Parse CSS beansprucht mit < a href = "http://en.wikipedia.org/wiki/ANTLR" rel = "noreferrer"> ANTLR und ANTLR ist ein LL * Parser, dann würde ich sagen, Rebol es tun kann. PAREN! ist das Ass-in-the-Loch, das Sie tun „etwas“, wenn Sie eine Wand zu fahren, aber es ist ein rutschiger Abhang starten lässt i mitt zu nachlässig.

Andere Tipps

Sollte durchaus in der Lage die Spezifikation der Parsen, sollten Sie Motiv und Geduld haben, die Regeln zu schreiben. Es wäre ein bisschen mehr beteiligt sein, als, sagen wir, einen JSON-Parser, aber es wäre die gleiche Idee.

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