2011-12-28 25 views
6

Desde mi horrible experiencia con cssparser, me he propuesto la tarea de implementar un analizador de CSS en Java usando Parboiled. Ya tengo todas las especificaciones de color cubiertas, pero por supuesto necesito todo el resto ...¿Qué hace el? significa en la sección de tokenización de la especificación CSS W3C?

Así que fui a buscar la especificación CSS y la encontré en el W3C website. Ahora estoy en el proceso de escribir las reglas para todos los "átomos", pero encontré algo preocupante en this section:

UNICODE-RANGE u\+[0-9a-f?]{1,6}(-[0-9a-f]{1,6})? 

La parte que me molesta es el signo de interrogación en [0-9a-f?].

El encabezado del párrafo dice que las expresiones regulares usadas aquí son de estilo Lex. El ? no tiene un significado especial en una clase de personaje (gracias @scizzo para la confirmación). Entonces, ¿esto es un error tipográfico en la especificación W3C, o es realmente ? permitido en un rango Unicode? Si es así, ¿qué significa?

Concluir: Tengo mi respuesta. Sin embargo, la especificación es errónea: un "rango Unicode de interrogación" solo puede ser por sí mismo. Dada la expresión regular anterior, esta expresión estaría permitida mientras que es claramente ilegal: u+4??-733f

Respuesta

4

Sí, eso es un signo de interrogación literal. From the Flex documentation:

Tenga en cuenta que dentro de una clase de caracteres, todos los operadores de expresiones regulares pierden su significado especial excepto el escape de ('\') y los operadores de clase de caracteres, '-', ']', y, al el comienzo de la clase, '^'.

Ahora, de acuerdo con el W3C, ? can be used as a kind of wildcard:

? caracteres implica 'cualquier valor dígitos' (por ejemplo, U + 4 ??)

+0

Esto es una cosa confirmó, lo que significa el signo de interrogación debe ser de alguna manera legal en un rango Unicode ... Pero no puedo encontrar lo que significa:/ – fge

+0

Acaba de editar, ¿pero? es básicamente un comodín. – sczizzo

+0

¡Muchas gracias por el enlace! – fge