Può Rebol funzione di analisi in grado di creare regole per il parsing completamente CSS2 / CSS3?

StackOverflow https://stackoverflow.com/questions/3484854

Domanda

Ci sono limitazioni al potere Rebol funzione di analisi? Sarebbe in grado di analizzare l'intero CSS2 / css 3 spec o si incontrano impossibilità teorica di formare alcune regole?

Aggiornamento dopo HostileFork risposta: lo dico in regexp penso che sarebbe piuttosto impossibile, è parse molto più potente

Se sì cosa significa che sarebbe possibile costruire un browser in Rebol vid compatibile con HTML5?

È stato utile?

Soluzione

La tua domanda di "Ci sono limiti" è scivoloso. Cercherò di darvi " il risposta" invece di "Sì, certo" ... che sarebbe più opportuno anche se non troppo didattico. :)

Si consideri il seguente frammento di codice. Cattura la posizione parser in x, e quindi esegue ciò che è tra parentesi nel dialetto DO. Tale codice resetta x alla coda dell'ingresso se la funzione css-parser riesce, o al capo dell'ingresso se la funzione fallisce. Infine, esso imposta la posizione parse alla x corrente. E come sappiamo, PARSE restituisce true solo se siamo alla fine della serie di input quando le regole finiscono ...

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

Questo è valido codice parse dialetto e che restituisce vero se (e solo se) la funzione css-parser riesce. Pertanto, se si può scrivere un parser CSS in Rebol a tutti, si può scrivere "in dialetto parse".

(questo porta alla domanda di esso è possibile risolvere un dato problema di calcolo in una funzione Rebol. Per fortuna, gli informatici non devono ri-rispondere a questa domanda ogni volta che un nuovo linguaggio si apre. È possibile calcolare tutto ciò che essere calcolato da una macchina di Turing, e nulla che non possa essere ... e check out Alan Turing propria parole , in parole povere. parsing CSS, non è proprio il problema della terminazione, quindi sì ... si può fare.)

mi prendo una pugnalata a re-inquadrare la tua domanda:

"E 'possibile scrivere un blocco di regole (che non utilizzano PAREN !, SET-WORD !, o GET-parola! Costrutti) che può essere passato alla funzione analizzare e restituire TRUE in qualsiasi valida file CSS e FALSE in qualsiasi malformati uno?"

La specifica formale di ciò che rende bene o nel male CSS è messo fuori dal W3C:

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

Ma notate che anche lì, non è tutto cut-and-dry. La loro specifica "formale" delle costanti di colore non può escludere #abcd, hanno dovuto scrivere su di esso nei commenti, in inglese:

/*
 * 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*
  ;

Questo ci porta a chiedere se ci perdoni Rebol per non essere in grado di fare quel tipo di riconoscimento dopo che abbiamo le mani legate di Parse togliendo PAREN! / GET-WORD! / SET-PAROLA! (Voglio solo far notare questo tipo di problema alla luce della tua domanda).

Come parte del progetto parse Rebol 3 c'è stato un write-up del Teoria della Parse ...

Il dialetto PARSE è una maggiore membro della famiglia di top-down lingue parsing (famiglia TDPL) tra cui il top-down parsing di lingua (TDPL), generalizzato top-down parsing di lingua (GTDPL) e il parsing espressione grammatica (PEG) e utilizza la stessa "scelta ordinato" il metodo di analisi, come gli altri membri della famiglia.

Come sottolineato nel link qui sopra, essere un membro di questa classe fa PARSE di Rebol rigorosamente più potente di entrambe le espressioni regolari e LL parser . Penso che sia più potente di LL (k) e LL * parser pure, ma è stato un po 'che ho studiato questa roba e io non ci scommetterei la mia vita su di essa. :)

Non c'è davvero bisogno di capire che cosa tutto ciò significhi, al fine di fare uso di esso per rispondere alla tua domanda "si può fare". Dal momento che le persone hanno affermato di parse CSS con < a href = "http://en.wikipedia.org/wiki/ANTLR" rel = "noreferrer"> ANTLR e ANTLR è un LL * parser, allora direi Rebol può farlo. PAREN! è l'asso-in-the-hole, che ti permette di fare "qualsiasi cosa", se si colpisce un muro, ma è un pendio scivoloso per iniziare a utilizzare it troppo incautamente.

Altri suggerimenti

Dovrebbe essere perfettamente in grado di analizzare le specifiche, si dovrebbe avere movente e la pazienza di scrivere le regole. Sarebbe un po 'più coinvolto rispetto, ad esempio, un parser JSON, ma sarebbe la stessa idea.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top