Pregunta

Estoy escribiendo un analizador HTML para mi propia diversión y quería probar M.

baso este trabajo en el estándar HTML 4.01 y allí se dice

  

Aunque el estilo y los elementos SCRIPT   CDATA utilizar para su modelo de datos, por   estos elementos, CDATA deben ser manejados   de manera diferente por los agentes de usuario. marcado y   las entidades deben ser tratados como texto sin formato   y pasa a la aplicación como es.   La primera aparición del carácter   secuencia "

pienso en ello durante un tiempo y realmente lo que quiero hacer es algo como esto

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

Me encuentro mi auto descubrimiento que quiero llevar a cabo algún tipo de regla que tokenización partidos hasta llegar a un soporte de ángulo abierto

Si la secuencia de escape era un solo carácter esto no sería un problema porque entonces yo podría haber escrito esto.

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

Y que quiere trabajar, no estoy seguro si voy de este por el camino correcto, pero el problema es una especie de relación con que tengo un lenguaje incrustado en otro pero no se preocupan por el lenguaje de script en este caso, por lo simplemente quiero saltar una cabeza.

¿Fue útil?

Solución

me di cuenta de este truco, que no era del todo evidente ...

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

Ahora que MGrammar válida, lo que se traduce en:

  • No tome '<' o tomar '<' No seguida de '/'

Lo que consumiría nada hasta que un

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