【问题标题】:RFC 2068 allows comments nested within comments?RFC 2068 允许评论嵌套在评论中吗?
【发布时间】:2012-08-17 19:15:09
【问题描述】:

根据:RFC 2068

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

以下是相关规则:

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

在 cmets 内部发表评论?这似乎很愚蠢。我的主张是: (1) cmets 不需要嵌套在 cmets 中。 (2) 如果是这样,评论规则最好表述为:

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

我的声明正确吗?如果没有,嵌套 cmets 何时实际使用?其他图书馆在乎吗?你知道这方面的历史/评论吗? (尝试使用“RFC 2068 嵌套 cmets”进行网络搜索并不是很有帮助。)

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

附:为简单起见,我现在有意不深入探讨另一条规则quoted-string 的细节。

2012-08-20 更新:下面的一个答案很有帮助地引用了 RFC 2068 的较新版本。这有助于澄清解析规则。但是,它并没有解决我的其他观点:

  1. 我看不出任何令人信服的理由让规范将 cmets 包含在 cmets 中。这似乎是不必要的——也许是过度设计的,也许是被忽视的。这既烦人又重要,因为递归规则使格式成为非常规语言。这是规范编写者通常应该注意的事情,对吧?

  2. 我还没有(还没有?)在野外看到在 cmets 中使用 cmets 的示例。如果是这样的话,世界已经含蓄地说“嵌套的 cmets 并不重要。”

【问题讨论】:

    标签: grammar rfc ragel


    【解决方案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 ")">
    

    所以是的,嵌套的 cmets 是明确允许的 :)

    【讨论】:

    • 谢谢。 RFC 2616 淘汰了 RFC 2068。不久之后,RFC 2616bis 将淘汰 RFC 2068,对吧?
    • 我想他们想处理:(ABC (DEF) EFG)。对我来说,它更多的是允许内部()'s - 它实际上不是在另一个评论中“嵌入”评论的任何语义概念。
    • 你见过野外嵌套的 cmets 吗?
    猜你喜欢
    • 2021-09-09
    • 2012-09-17
    • 1970-01-01
    • 1970-01-01
    • 2014-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多