Парсинг CSS с ANTLR - пограничные случаи

Можно сделать это при установке display:block. Но в html 4.01, строгом, необходимо определить седла и строки, но я думаю, что можно переопределить их с css.

8
задан molf 30 May 2010 в 22:01
поделиться

2 ответа

Попробуйте переместить # в вашем файле лексера из COLOR в его собственный объект, как таковой:

LLETTERS: ( 'a'..'z' )
ULETTERS: ( 'A'..'Z' )
NUMBERS: ( '0'..'9' )
HASH : '#';

Затем в ваших правилах парсера вы можете сделать это следующим образом:

color: HASH (LLETTERS | ALPHANUM)+;
selector: HASH (ULETTERS | LLETTERS) (ULETTERS | LLETTERS | NUMBERS)*;

и т. Д.

Это позволяет вам указать разницу грамматически, что можно грубо описать как контекстуально, а не лексически, что примерно можно описать как внешность. Если значение чего-то меняется в зависимости от того, где оно находится, это различие следует указывать в грамматике, а не в лексическом анализаторе.

Обратите внимание, что цвет и селектор - это одно и то же определение. Лексеры обычно являются отдельным этапом от модуля, который переводит входную строку в грамматику, поэтому недопустимо иметь неоднозначную лексику (как было указано, bbb может быть шестнадцатеричным или строчной буквой). Таким образом, проверка достоверности данных должна выполняться в другом месте.

8
ответ дан 5 December 2019 в 17:39
поделиться

Аналогично тому, что сказал Уолт, Приложение G. Грамматика CSS 2.1 сообщает lex HASH , а затем (в зависимости от его положения относительно других token) для анализа HASH либо как simple_selector , либо как hexcolor .

Лексер определяет следующий токен ...

"#"{name}       {return HASH;}

.. ..и грамматика включает следующие правила ...

hexcolor
  : HASH S*
  ;

simple_selector
  : element_name [ HASH | class | attrib | pseudo ]*
  | [ HASH | class | attrib | pseudo ]+
  ;

Это означает, что синтаксический анализатор, основанный на грамматике, допускает использование не-шестнадцатеричного цвета.

Я обнаружил бы не-шестнадцатеричный цвет позже, в коде, который анализирует / интерпретирует лексированное + проанализированное синтаксическое дерево.

2
ответ дан 5 December 2019 в 17:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: