RFC 2068允许嵌套在注释中的注释?

时间:2012-08-17 19:15:10

标签: grammar rfc ragel

根据:RFC 2068

  

注释可以通过环绕包含在某些HTTP标头字段中   带括号的注释文本。评论仅允许在   包含“comment”作为其字段值定义的一部分的字段。   在所有其他字段中,括号被视为字段的一部分   值。

以下是相关规则:

comment        = "(" *( ctext | comment ) ")"
ctext          = <any TEXT excluding "(" and ")">

评论内的评论?这看起来很傻。我的主张是:(1)没有必要在评论中嵌套评论。 (2)如果是这样,评论规则将更好地表达为:

comment        = "(" *( ctext ) ")"

我的说法是否正确?如果没有,实际使用嵌套注释的时间是什么时候?其他图书馆在乎吗?你知道吗?有这方面的历史/评论吗? (尝试使用“RFC 2068嵌套注释”进行Web搜索并不是很有帮助。)

(动机:我很关心,因为我正在为RFC 2068编写词法分析器(使用Ragel)。如果注释确实需要嵌套,那就意味着递归规则,据我所知,这不是Ragel的最佳选择。我已经读过一些迹象表明Ragel在某些情况下可以处理递归规则,但我对此并不十分清楚。另外,我也在看Unicorn Ragel代码,这很有帮助。)

P.S。为简单起见,我有意不再深入研究另一条规则的细节quoted-string,现在。

更新2012-08-20 :下面的一个答案有助于引用更新版本的RFC 2068.这有助于澄清解析规则。但是,它没有解决我的其他问题:

  1. 我认为规范在评论中包含评论没有任何令人信服的理由。这似乎是不必要的 - 也许是过度设计,也许是被忽视的。这既烦人又重要,因为递归规则使格式成为非常规语言。这是规范作者通常应该防范的东西,对吧?

  2. 我还没有(但是)看到过在评论中使用评论的野外例子。如果是这种情况,世界已暗中说“嵌套评论并不重要。”

1 个答案:

答案 0 :(得分:1)

看看RFC2616:

http://www.w3.org/Protocols/rfc2616/rfc2616-sec2.html

Comments can be included in some HTTP header fields by surrounding the comment
text with parentheses. Comments are only allowed in fields containing "comment" 
as part of their field value definition. In all other fields, parentheses are 
considered part of the field value.

       comment        = "(" *( ctext | quoted-pair | comment ) ")"
       ctext          = <any TEXT excluding "(" and ")">

是的,明确允许嵌套注释:)