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:
- * - 0 lub więcej
- + - 1 lub więcej
- ? - 0 lub 1
- | - oddziela alternatywy
- [] - grupowanie
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ą:
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.