C# 在摸索CSS 2.1语法时遇到困难

C# 在摸索CSS 2.1语法时遇到困难,c#,grammar,w3c,css,C#,Grammar,W3c,Css,我正在编写一个手工编码的css2.1解析引擎(用C#),并且直接使用w3css2.1语法()。然而,有一个标记我不太明白: url ([!#$%&*-~]|{nonascii}|{escape})* ... "url("{w}{url}{w}")" {return URI;} "url("{w}{string}{w}")" {return URI;} 我不明白URL产品应该做什么。它似乎是一个只包含!#$%的字符串&*-~、非ascii或转义unicode代码点。这是

我正在编写一个手工编码的css2.1解析引擎(用C#),并且直接使用w3css2.1语法()。然而,有一个标记我不太明白:

url     ([!#$%&*-~]|{nonascii}|{escape})*

...

"url("{w}{url}{w}")"    {return URI;}
"url("{w}{string}{w}")" {return URI;}
我不明白URL产品应该做什么。它似乎是一个只包含<代码>!#$%的字符串&*-~、非ascii或转义unicode代码点。这是一个怎样的URL?这部作品真的是名不副实吗?它应该有什么用途


谢谢你的帮助。仅供参考,我添加C#标记只是为了增加实际程序员的受众,他们可能遇到过这种情况或有见解-如果你认为我不应该申请,我很抱歉。

伙计,你读过关于这个表达的上下文了吗

baduri1         url\({w}([!#$%&*-\[\]-~]|{nonascii}|{escape})*{w}
baduri2         url\({w}{string}{w}
baduri3         url\({w}{badstring}
嗯。。。糟糕,糟糕,糟糕。有点赠品,嗯什么?一般来说,如果文档中的某些内容对您来说没有意义,或者看起来完全错了,那么它可能就没有意义了?对所以你读了一遍。。。获取正确的上下文

我不明白URL产品应该做什么。它似乎只是一个字符串!#$%&*-~,非ascii或转义unicode代码点。这是一个怎样的URL?这部作品真的是名不副实吗?它应该有什么用途

第一行将
url
定义为正则表达式:

url     ([!#$%&*-~]|{nonascii}|{escape})*
第二行将
URI
定义为lexer可以生成/返回的令牌:

"url("{w}{url}{w}")"    {return URI;}
第二行表示如果lexer看到
url(
然后
{w}
然后
{url}
然后
{w}
然后
,那么它已经找到了一个URI

{w}
表达式是可选的空白

因此,根据定义,
{url}
是一个正则表达式:它定义了
URI
标记中允许哪些字符,在初始
url(
和最终
[!#$%&*-~]之间,细分为:

$
%
&
,加上字符范围
*
-
~

这将接收大多数可打印的ASCII字符,包括大写、小写、数字和一系列标点字符

列出此正则表达式不匹配的可打印ASCII字符更容易:

双引号
、单引号
、括号
;即可打印的ascii字符减去分隔符。这使得解析不包含引号的url成为可能。例如
url(http://example.com)
,而不是
url(“http://example.com)

简洁,但狡猾

注意,令牌名称也令人困惑。更好的名称应该是:
url\u string
url\u arg


编辑2015年2月令牌的最新名称
url未引用

以及该产品的内容?
导入:导入SYM S*[STRING | URI]S*media_list?;'S*
我不理解的是,如果产品引用了URI,而URI只由这两个表达式返回,那么baduri在哪里发挥作用呢?语法似乎是说,在解析导入时,类似于
url(!\35;$\ abcdef)的URI
是完全有效的。FLEX对前缀为“bad”或其他东西的产品是否有一些特殊的、自动的含义?