【发布时间】: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 的较新版本。这有助于澄清解析规则。但是,它并没有解决我的其他观点:
我看不出任何令人信服的理由让规范将 cmets 包含在 cmets 中。这似乎是不必要的——也许是过度设计的,也许是被忽视的。这既烦人又重要,因为递归规则使格式成为非常规语言。这是规范编写者通常应该注意的事情,对吧?
我还没有(还没有?)在野外看到在 cmets 中使用 cmets 的示例。如果是这样的话,世界已经含蓄地说“嵌套的 cmets 并不重要。”
【问题讨论】: