Peut rebol Parse fonction pouvoir créer des règles pour l'analyse syntaxique CSS2 / CSS3 pleinement?

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

Question

Y at-il limitation rebol pouvoir fonction parse? Serait-il capable de toute analyse syntaxique CSS2 / CSS3 spécifications ou il sera impossible de rencontrer pour former des théorique règles?

Mise à jour après HostileFork réponse: Je veux dire dans regexp Je pense que ce serait plutôt impossible, est Parse beaucoup plus puissant

Si oui ce que cela signifie qu'il serait possible de construire un navigateur compatible avec rebol vid html5?

Était-ce utile?

La solution

Votre question de « sont là des limites » est glissante. Je vais essayer de vous donner « réponse » au lieu de « ouais, bien sûr » ... ce qui serait plus utile mais pas trop éducatif. :)

Considérons l'extrait suivant. Il saisit la position de l'analyseur en x, puis exécute ce qui est entre parenthèses dans le dialecte DO. Que le code re-ensembles x à la queue de l'entrée si la fonction css-parser réussit, ou à la tête de l'entrée si la fonction échoue. Enfin, il définit la position d'analyse syntaxique à la x actuelle. Et comme nous le savons, parse retourne vrai que si nous sommes à la fin de la série d'entrée lorsque les règles fini ...

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

Ce code est valide dialecte Parse il retourne vrai si (et seulement si) la fonction css-parser réussit. Par conséquent, si vous pouvez écrire un analyseur CSS dans Rebol du tout, vous pouvez l'écrire « dans le dialecte d'analyse syntaxique ».

(ce qui conduit à la question de il est possible de résoudre un problème de calcul donné dans une fonction Rebol. Heureusement, les informaticiens ne doivent pas re-réponse à cette question chaque fois qu'une nouvelle langue apparaît. Vous pouvez tout calcul qui est calculé par une machine de Turing, et rien qui ne peut pas être ... et consulter Alan Turing propre mots , en termes simples. parsing CSS est pas précisément le problème de l'arrêt, alors oui ... il peut être fait.)

Je vais prendre un coup de couteau à re-cadrage de votre question:

"Est-il possible d'écrire un bloc de règles (qui ne pas utiliser PAREN !, SET-PAROLE !, ou GET-PAROLE! Constructions) qui peuvent être transmis dans la fonction parse et retourne vrai sur tout valide fichier CSS et FAUX sur tout difformes un? »

La spécification formelle de ce qui fait pour bon ou mauvais CSS est publié par le W3C:

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

Mais remarquez que même là, ce n'est pas tout coupé et sec. Leur spécification « formelle » des constantes de couleur ne peut pas exclure #abcd, ils devaient écrire à ce sujet dans les commentaires, en anglais:

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

Cela conduit nous demander si nous pardonner Rebol pour ne pas être en mesure de faire ce genre de reconnaissance après que nous avons les mains liées Parse en enlevant PAREN! / GET-PAROLE! / SET-PAROLE! (Je veux juste signaler ce genre de question à la lumière de votre question).

Dans le cadre du projet d'analyse Rebol 3 il y a eu une écriture d' Théorie de Parse ...

Le dialecte PARSE est membre améliorée de la famille de Top-down langues d'analyse syntaxique (famille de TDPL), y compris la langue analyse descendante (TDPL), l'analyse descendante Généralisé langue (GTDPL) et le parsing grammaire d'expression (PEG) et utilise le même « choix ordonné » la méthode de l'analyse que les autres membres de la famille.

Comme indiqué dans le lien ci-dessus, étant membre de cette classe fait parse de Rebol strictement plus puissant que les deux expressions régulières et LL parseurs. Je suppose qu'il est plus puissant que LL (k) et LL * parseurs aussi bien, mais il a été un moment que je l'ai étudié ce genre de choses et je ne parierais pas ma vie là-dessus. :)

Vous n'avez pas vraiment besoin de comprendre ce que tout cela signifie afin de faire usage de celui-ci pour répondre à votre question « peut-il être fait ». Étant donné que les ont prétendu Parse CSS avec < a href = "http://en.wikipedia.org/wiki/ANTLR" rel = "noreferrer"> ANTLR et ANTLR est un analyseur LL *, alors je dirais que Rebol peut le faire. PAREN! est l'as-in-the-trou qui vous permet de faire « quelque chose » si vous frappez un mur, mais il est une pente glissante de commencer à utiliser it trop négligemment.

Autres conseils

doit être parfaitement capable de l'analyse des spécifications, si vous avez raison et la patience d'écrire les règles. Ce serait un peu plus impliqué que, par exemple, un analyseur de JSON, mais ce serait la même idée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top