- From: Sampo Syreeni <decoy@iki.fi>
- Date: Mon, 18 Jul 2022 13:35:16 +0300 (EEST)
- To: David Hill <DHill@StudentLoan.org>
- cc: "'www-validator-css@w3.org'" <www-validator-css@w3.org>
- Message-ID: <alpine.DEB.2.21.2207181244590.14778@lakka.kapsi.fi>
On 2022-07-15, David Hill wrote:
> Some build tools will fail to process css with double semicolons such as this
>
> .foo {
> margin-top: 20px;;
> }
Those tools are then stupid. They're by the book.
https://www.w3.org/TR/CSS21/grammar.html
However, people do build their parsers rather into the book, and then
into the other book. Or codebase. They tend to factor their parsers into
Bison and Flex, or whatnot.
One of the things which cannot be handled right here is \epsilon. That
thingy which takes just space, between them semi-colons. It's a
grammatical null, and proructive at that. It's the thing happening
besides the two semicolons, here.
Were it to have a semantic meaning...heaven sakes please do not...it
could be parsed as LALR(1) in text. And it could be parsed well enough
in parsing expressions, efficiently, no matter how many white spaces
there were between.
> On several occasions over the years all local tests pass and we deploy
> to QA to find that the minified CSS is missing.
So do develop a formal grammar of CSS. A parser for it. I for one once
did that towards PICS, and found a *singular* mistake in the vocabulary.
> We plug the CSS into the validator and it comes back all green, no
> warnings, no errors, perfect CSS, so we go looking for other issues
> and it takes much longer than it might to find that the CSS is in fact
> the issue.
Your issue seems to be that you haven't formally parsed your
language/CSS.
Because once you do that, your formal language *does* bite you in the
ass where it should. And I'll tell you how it does.
Once, when I really did formalize PICS as a format, I bumped into the
fact that the language wasn't parsable as LARL(n).. Seriously, not even
as LARL(1) as C or most languages are, but not as even LARL(n). And that
was because of *one* *singular* *stupid* mistake, in the *most*
vestigial part of the language. Basically, in its exception; as a data
language. Some piece of shit nobody had put in *just* the rigth
productions so as to make the language LARL(18) instead of LALR(1). In
one simple, stupid production.
How did I come privy to that? Well, because I had to code over the Bison
warnings, one at a time. Eventually I had to goddamn-fucken put a lot of
state back into the stack, simply because of backtracking. The stack
didn't exactly help me do what I wanted to do. If it wasn't a LARL(1)
stack, but a true Earley or CYK-stack, why not. But since it never is;;
fuck this shit.
> Please consider adding warnings for double semicolons.
No. Please consider utilizing formal methods towards your formal
language. Because this shit might actually help you make your procedures
and reasoning-in-procedure sane for once. And for all.
It's after all just an epsilon between two semicolons. It's eminently
parsable.
--
Sampo Syreeni, aka decoy - decoy@iki.fi, http://decoy.iki.fi/front
+358-40-3751464, 025E D175 ABE5 027C 9494 EEB0 E090 8BA9 0509 85C2
Received on Monday, 18 July 2022 10:35:35 UTC