问题标签 [abnf]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
87 浏览

http - HTTP 1.1 标头值的格式是什么?

我阅读了 rfc7230 第 3.2 节。删除过时的规则后,关于 header 字段的规范是:

我对 的定义感到困惑field-content。它似乎匹配 1 或 2 VCHARs,其间有任意数量的空格,但匹配后不会匹配另一个空格field-content

例如 for name:a<sp>b<sp>c,field-name会匹配name, 但是field-content会匹配a<sp>b然后 next<sp>不能被 another 匹配field-content, 因此这个 header 是无效的。

但是,name:a<sp>bc<sp>d是有效的,因为field-content,a<sp>b和有两个匹配项c<sp>d

我认为这是不一致的。这是故意的还是我误解了什么?

0 投票
0 回答
245 浏览

macros - 扩展 SPF 宏

我正在尝试基于 SPF RFC7208 实现 check_host 函数。它几乎准备好了,剩下的就是第 7 节(https://www.rfc-editor.org/rfc/rfc7208#section-7)中详述的宏扩展。我知道有现成的解决方案,但为了示例或实践,我想实现自己的算法。这样做时,我遇到了www.example.com不符合 ABNF 描述的问题。我认为这是因为我的推理错误,这就是我寻求帮助的原因。

这是从文档中复制的 ABNF:

我认为将 domain-spec 应用于www.example.com将遵循以下路径: domain-spec -> macro-string -> macro-literal (repeated) 这将耗尽整个字符串,然后 domain-end 将永远不会匹配.

我哪里错了?

编辑1:

我想我得到了答案,原来的问题更像是一个确认请求。ABNF 中的重复是贪婪的,但可能允许后退 - 即如果这会导致匹配,请少吃。查看 RFC5234 ( https://www.rfc-editor.org/rfc/rfc5234 ),虽然不是全部,但我无法确定地发现这一点。任何人都可以确认吗?

0 投票
1 回答
59 浏览

data-structures - 是否有一种类似于 BNF 的元语言可以简洁地描述自描述数据?

比如说我有一个自我描述的数据集。前几个结构良好的记录定义了数据类型 ID,其中包括记录的名称和长度,然后是内容记录,内容记录以数据 ID 开头并包含可变数量的数据,具体取决于 ID。

使用 BNF、EBNF 或 ABNF 来描述定义记录很容易......但是如何简洁地描述内容记录,其长度在定义记录中定义?

这是一个使用类似 BNF 的表示法描述经典 NetCDF 数据格式的示例,但并不简洁,因为在前面的定义中没有将 的长度指定为data recs数据的函数。dimvar

0 投票
1 回答
146 浏览

grammar - ABNF 规则 `zero = ["0"] "0"` 匹配 `00` 但不匹配 `0`

我有以下 ABNF 语法:

我希望这与字符串匹配000但它似乎只匹配00?为什么?

repl-it 演示:https ://repl.it/@DanStevens/abnf-rule-zero-0-0-matches-00-but-not-0

0 投票
1 回答
183 浏览

http - 应该如何解析 HTTP 标头字段?

我正在尝试根据RFC 7230 的相关部分中header-field指定的 ABNF 规则解析 HTTP 标头字段。这些规则是:

obs-text只是高位字节 0x80 到 0xff)。

我面临的问题是,header-field当应用 chrome 在响应模式下设置的用户代理字符串时,规则似乎失败了:

问题源于唯一的“5”:当解析器到达“Nexus”中的最后一个“s”时,它会同时占用“s”、以下空格和“5”。这会将解析光标直接留在后面的空格处。那是

由于feild-content不提供前导空格,因此该规则无法匹配整个标头字段,从而导致解析器无法解析消息的其余部分。

对我来说很明显,HTTP 标头应该能够包含被空格包围的单个字符。但是,根据我对规范的阅读,这似乎是不允许的。

我在网上搜索过,但没有找到任何相关的东西。所以我假设这是我的错误。我的错误在哪里?该规则实际上应该如何解释?

0 投票
1 回答
92 浏览

bnf - RFC 822 的 BNF 规则中的 & 符号是什么意思?

IETF RFC 822具有以下 BNF 规则:

我想知道与符号&在这些规则中的含义。& 符号不是由 RFC 822 自己的 Notational Conventions 部分(第 2 节)定义的。我假设 RFC 822 将 RFC 733 用于其 BNF/ABNF,但 RFC 733 也没有定义 & 符号的含义。

根据上下文,我确定 &号并不意味着以下任何一种:

  • 列表项分隔符(这就是逗号的用途,并且 & 号不代表牛津逗号样式表达式中的最后一个连词,因为我们在规则中看到了&先于最后一个)。 ,text
    • 如果它是一个列表项分隔符,在 的情况下应该如何解释dtext
  • 连接(因为连接是通过两个相邻的生产规则来描述的,它们之间没有运算符)。
    • 另外因为已经是 CR 和 LF 的串联,但 RFC 822在规则中CRLF区分了CRLF和。bare CR & bare LFtext

在 RFC 822 的勘误表中没有提到这一点 - 并且 RFC 的后续 RFC (如 2822)用全新的规则替换了与符号的规则,所以我也无法从新语法中推断出它的含义。

那么是什么&意思呢?

0 投票
1 回答
62 浏览

http - 由 HTTP 增强的 ABNF:#symbol 的规范性参考

语境

解决一个CORS问题,我想知道 HTTP 响应标头的有效值是什么Access-Control-Allow-Headers

Whatwg CORS 标头语法规范在 ABNF 中告诉我:

Access-Control-Allow-Headers = #field-name

RFC7230告诉我:

此外,Whatwg 指出

ABNF 表示 ABNF 由 HTTP(特别是添加 #)和 RFC 7405 增强。[RFC7405]

好的,我现在知道这个响应头是无效的:

Access-Control-Allow-Headers: Origin, Content-Type, content type, Accept, Authorization

字段名不应包含空格,但这会导致我的问题:

问题

#symbolwhatwg ABNF的规范参考在哪里?这不是定义 ABNF 语法的RFC5234 。我把它当作逗号分隔的字段,但我没有找到真正的参考。

PS:问题不是“什么是有效值Access-Control-Allow-Headers

0 投票
1 回答
33 浏览

sip - 以下 sintax rfc 3261 是否兼容?

您能否告诉我以下语法是否与 rfc3261 兼容?谢谢。

401 未经授权:

或者应该是

我正在尝试使用“https://github.com/nygge/abnfc/blob/master/samples/sip/rfc3261.abnf”进行分析,但没有成功。

拜托,你能帮我理解这个吗?对不起我的英语不好。谢谢。

0 投票
1 回答
62 浏览

bnf - Purescript 是否有可用的 BNF 类型语法?

有语言的BNF类型语法描述Purescript吗?

当语法被埋藏并分散在各种概念和意图等文档中时,很难很好地处理语言。

0 投票
0 回答
60 浏览

parsing - 如何根据一组 ABNF 语法规则对输入进行标记

我已阅读有关ABNF 规范的 RFC,并且很难理解如何使用一组 ABNF 规则从与语法匹配的某些输入字符串中可靠地提取标记。似乎该规范从未提及令牌或 AST,因此它可能不关心这一点,但我相信这将是应用任何 BNF 语法的最终目标,除非我弄错了。

在规范中,他们列出了解析邮政地址的示例规则:

还有一个核心规则列表,我不会在此处发布描述预期的常用规则。

最终,我想做的是找出接受输入所需的规则

并生成我认为正确的令牌序列,即:

[ "John", " ", "H", ".", "Doe", "\r\n", "12345", " ", "Fakestreet", "\r\n", "Springfield", ",", " ", "IL", " ", "55555", "\r\n"] (我认为空格和 CRLF 需要作为“令牌”返回,因为它们在某些规则中被指定为要求)

我正在考虑的一些问题:

  1. “Fakestreet”应该是它自己的标记是有道理的,但根据定义,它是可见字符核心规则的可变重复。理想情况下,我不想将每个字母作为其自己的标记(“F”、“a”、“k”等)读出,因此(假设核心规则可以被视为终端?)任何潜在的标记字符串都会需要对照整个理论上无限的规则定义1*VCHAR来检查它是否匹配。有些规则比这更复杂,比如 zip-code's 5DIGIT ["-" 4DIGIT],但是任何潜在的标记也需要根据这个规则进行检查(“12345”和“12345-6789”都是有效的标记)。所以似乎整个规则元素连接也需要完全检查,除非“12345-6789”"12345""-", "6789"] 哪个...可能是正确的?
  2. 我假设我们不想完全检查引用其他规则的规则,否则我们最终可能会将整个邮政地址标记为“邮政地址”类型的单个标记。也许不应该检查引用其他规则的规则?也许有诸如“终端规则”之类的东西,它不包括规则参考(不包括核心规则)?
  3. 偶尔在规则中,终端值与规则引用结合,例如在“personal-part”的定义中,即文字“.”。被定义为。因此,虽然我们可能不想将任何潜在的标记字符串与整个“个人部分”规则定义进行匹配,但似乎我们确实想尝试将其与文字“.”进行匹配。因为它是解析个人部分所需的令牌。也许在非终端规则中,应该考虑列出的终端值?

我意识到这是一个冗长的问题,但似乎 EBNF 和 ABNF 之类的 BNF 超集正在用于此类事情,但我找不到如何从 ABNF 语法进行标记的标准规范。