antlr4 用の適切な CSS 文法はありますか? antlr3 にはいくつかの文法があることは知っていますが、v4 で追加された「レクサー モード」なしでは CSS を解析するのは簡単ではないことがわかりました。なんで?
次の CSS セレクターを検討してください。
.hello.world { /* ... */ }
.hello .world { /* ... */ }
ほとんどの文法では、空白は単純に無視されます。しかし、空白を無視すると、上記の 2 つのセレクターをパーサー レベルで区別できなくなります。
もう一度言いますが、空白を無視しないと、WS で文法がおかしくなりますか? 空白は、セレクター内で発生しない限り、ほとんど意味がないためです。
ここで antlr4 のモードが登場します。レクサー モードのサポートにより、異なるコンテキストに入るたびにレクサーの新しいルールを定義できるためです (つまり、「セレクター」コンテキスト内の空白を無視しないでください)。
とは言っても、antlr3 が空白を適切に処理する限り、任意の文法を受け入れます。とにかくそれが現在使用しているバージョンです ;-)