Selektory#

Gramatyka#

Poniższa gramatyka (grammar) definiuje składnię Selektorów. Jest stosowana dla strumienia słów (stream of tokens), zwracanego przez tokenizer zdefiniowany w dokumencie "CSS Syntax Module Level 3". Jest ona globalnym LL(1) i może być lokalnym LL(2), ale trzeba pamiętać, że większość aplikacji klienckich nie powinna jej używać bezpośrednio, ponieważ nie wyraża konwencji parsowania. Format produkcji jest zoptymalizowany dla przetwarzania ludzkiego i niektóre skrócone zapisy spoza Yacc są używane:

Produkcje zapisane wielkimi literami są definiowane przez "CSS Syntax Module Level 3" i odpowiadają słowom o tych samych nazwach. Dosłowne (literalne) łańcuchy znakowe odpowiadają ogranicznikom słów z przekazanymi wartościami. Produkcja "S" reprezentuje słowo białych znaków (whitespace). Produkcja wqname_prefix pochodzi ze specyfikacji "CSS Namespaces Module".

Produkcjami są:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
complex_selector_list #
  : complex_selector [ COMMA S* complex_selector ]*
  ;

scope_relative_selector_list #
  : scope_relative_selector [ COMMA s* scope_relative_selector ]*

scope_relative_selector #
  : combinator? complex_selector
  ;

complex_selector #
  : compound_selector [ combinator compound_selector ]* S*
  ;

combinator #
  /* combinators can be surrounded by whitespace */
  : S+ | S* [ '>' | '+' | '~' | COLUMN | '/' IDENT '/' ] S*
  ;

compound_selector_list #
  : compound_selector S* [ COMMA S* compound_selector ]* S*

compound_selector #
  : type_selector [ id | class | attrib | pseudo ]*
    | [ id | class | attrib | pseudo ]+
  ;

simple_selector_list #
  : simple_selector S* [ COMMA S* simple_selector ] S*

simple_selector #
  : type_selector | id | class | attrib | pseudo

type_selector #
  : wqname_prefix? element_name
  ;

element_name
  : IDENT | '*'
  ;

id #
  : HASH
  ;

class
  : '.' IDENT
  ;

attrib #
  : '[' S* attrib_name ']'
    | '[' S* attrib_name attrib_match [ IDENT | STRING ] S* attrib_flags? ']'
  ;

attrib_name
  : wqname_prefix? IDENT S*

attrib_match
  : [ '=' |
    PREFIX-MATCH |
    SUFFIX-MATCH |
    SUBSTRING-MATCH |
    INCLUDE-MATCH |
    DASH-MATCH
  ] S*

attrib_flags #
  : IDENT S*

pseudo #
  /* '::' starts a pseudo-element, ':' a pseudo-class */
  /* Exceptions: :first-line, :first-letter, :before and :after. */
  /* Note that pseudo-elements are restricted to one per selector and */
  /* occur only in the last compound_selector. */
  : ':' ':'? [ IDENT | functional_pseudo ]
  ;

functional_pseudo
  : FUNCTION S* value ')'
  ;

W ramach ułatwienia tworzenia gramatyk właściwości następujące produkcje gramatyk zostały zdefiniowane:

<selector> #

Produkcja complex_selector_list reprezentująca listę selektorów.

<relative-selector> #

Produkcja scope_relative_selector_list reprezentująca listę selektorów zawierającą selektory relatywne.

<compound-selectorr> #

Produkcja compound_selector_list reprezentująca listę selektorów zawierającą selektory złożone.

<id-selector> #

Produkcja id reprezentująca selektor identyfikatora.

Pasek społecznościowy

SPIS TREŚCI AKTUALNEJ STRONY

Selektory (H1) Gramatyka (H2)