- From: Tab Atkins Jr. <jackalmage@gmail.com>
- Date: Sun, 3 Feb 2013 16:17:40 -0800
- To: Simon Sapin <simon.sapin@kozea.fr>
- Cc: "www-style@w3.org" <www-style@w3.org>
On Sun, Feb 3, 2013 at 3:48 PM, Simon Sapin <simon.sapin@kozea.fr> wrote:
> Le 03/02/2013 14:41, Tab Atkins Jr. a écrit :
>> Technically, the parser is a deterministic pushdown automata, so it
>> is, by definition, possible to represent with a context-free grammar.
>> Can you elaborate on what problems you've been having with the
>> declaration branches?
>
>
> My knowledge of parsing theory is weak, but "not all context-free languages
> are LL(k) languages."
>
> Source: https://en.wikipedia.org/wiki/LL%28k%29
Ah yes, you're right. Sorry.
> I’m talking about the "page" production of the grammar in css3-page:
> http://dev.w3.org/csswg/css3-page/#syntax-page-selector
>
> The interesting part is:
>
> '{' S*
> [ [ declaration? ';' S* ] | page_margin_box ]*
> [ declaration ]?
> '}'
>
> So for example after you’ve consumed '{' based on the next token you can
> know if what you have next is an at-rule or a declaration. But for
> declarations at this point, you need unbounded look-ahead to decide whether
> to go into the second line’s branch (a declaration ending with ';') or the
> third line’s branch (declaration ending with '}')
>
> The trick is, it doesn’t matter because what you do with a declaration is
> the same in either case. But I don’t know how to express that in a grammar.
I think this would work without unbounded lookahead:
page-block-body = '' | at-rule page-block-body | page-declaration;
page-declaration= declaration [ ';' page-block-body? ]?
It captures that after a list of declarations, you can either end the
rule immediately, add a trailing semicolon, or add a semicolon and
continue from there, and requires finite, small lookahead.
> Then again: should we care? I’d like to have feedback from other
> implementers.
I don't care all that much, because WebKit uses a state-machine
parser. But I'm not sure what other browsers think.
~TJ
Received on Monday, 4 February 2013 00:18:27 UTC