Puede REBOL función de análisis sea capaz de crear reglas para analizar css2 / CSS3 totalmente?

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

Pregunta

¿Hay limitación de potencia REBOL función de análisis? ¿Sería capaz de analizar toda la especificación CSS2 / CSS 3 o va a encontrarse con imposibilidad teórica para formar algunas reglas?

Actualizar después de la respuesta HostileFork:? Quiero decir, en expresión regular Creo que sería más bien imposible, es mucho más potente de análisis

En caso afirmativo qué significa que sería posible construir un navegador en rebol Vid compatible con HTML5?

¿Fue útil?

Solución

Su pregunta "¿existen límites" es resbaladizo. Voy a tratar de darte " la respuesta" en lugar de simplemente "sí, claro" ... lo que sería más conveniente aunque no demasiado educativo. :)

Considere el siguiente fragmento. Captura la posición analizador en x, y luego ejecuta lo que está entre paréntesis en el dialecto DO. Ese código re-conjuntos x a la cola de la entrada si la función css-parser tiene éxito, o al jefe de la entrada si la función falla. Por último, se establece la posición de análisis a la x actual. Y como sabemos, PARSE devuelve true sólo si estamos en el final de la serie de entrada cuando las reglas terminan ...

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

Esto es válido código dialecto de análisis y que devuelve verdadero si (y sólo si) la función css-parser tiene éxito. Por lo tanto, si se puede escribir un analizador CSS en Rebol en absoluto, se puede escribir "en el dialecto de análisis".

(esto lleva a la cuestión de que es posible resolver un problema de computación dada en función de Rebol. Afortunadamente, los informáticos no tienen que volver a responder a esa pregunta cada vez que un nuevo idioma aparece. Puede nada de cómputo que se calcula por una máquina de Turing, y nada que no pueda ser ... y echa un vistazo a Alan Turing propio palabras, en términos simples. CSS análisis no es precisamente el problema de la parada, así que sí ... se puede hacer.)

Me va a tomar una puñalada en la re-elaboración de su pregunta:

"¿Es posible escribir un bloque de reglas (que no utilizan PAREN !, SET-PALABRA !, o GET-PALABRA! Construcciones) que se puede pasar a la función de análisis y regresar TRUE en cualquier válida archivo CSS o falso en cualquier formato incorrecto de uno?"

La especificación formal de lo que hace para bien o mal CSS se pone por el W3C:

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

Pero aviso que incluso allí, no todo es cortar y seco. Su especificación "formal" de constantes de color no se puede descartar #abcd, que tenía que escribir sobre ello en los comentarios, en Inglés:

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

Este nos lleva a preguntar si nos perdone Rebol por no ser capaz de hacer ese tipo de reconocimiento después de que hemos atado las manos de análisis sintáctico mediante la eliminación de PAREN! / GET-PALABRA! / SET-PALABRA! (Sólo quiero señalar este tipo de problema a la luz de su pregunta).

Como parte del proyecto de análisis Rebol 3 se hay un relato de la teoría de Parse ...

El dialecto PARSE es un miembro mayor de la familia de arriba hacia abajo idiomas análisis sintáctico (familia TDPL), incluyendo el análisis sintáctico descendente idioma (TDPL), la generalizada análisis sintáctico descendente idioma (GTDPL) y el análisis sintáctico gramática de expresión (PEG), y usa el mismo "elección ordenado" método de análisis sintáctico como los demás miembros de la familia.

Como se señaló en el enlace anterior, al ser un miembro de esta clase hace PARSE de Rebol estrictamente más potente que ambas expresiones regulares y LL analizadores . Supongo que es más poderoso que LL (k) y LL * analizadores así, pero ha sido un tiempo desde que he estudiado esto y yo no apostaría mi vida en él. :)

No se necesita realmente para entender lo que todo lo que significa el fin de hacer uso de ella para responder a su pregunta "¿puede hacerse". Dado que las personas han afirmado a CSS de análisis con < a href = "http://en.wikipedia.org/wiki/ANTLR" rel = "noreferrer"> antlr y antlr es un analizador LL *, entonces yo diría que Rebol puede hacerlo. PAREN! es el as en el agujero que le permiten hacer "nada" si se golpea una pared, pero es un terreno resbaladizo para empezar a utilizar it demasiado descuidadamente.

Otros consejos

En caso de ser perfectamente capaz de analizar la especificación, en caso de tener motivo y paciencia para escribir las reglas. Sería un poco más complicado que, por ejemplo, un analizador JSON, pero sería la misma idea.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top