我想为文件格式编写语法,其内容可以包含除US字符以外的其他字符。既然我习惯了ABNF,我就试着用它.
然而,没有一个RFCs 五二三四和七四零五对不使用美国ASCII的人非常友好。
事实上,我正在寻找一个ABNF版本(可能还有一些基本规则),它是面向字符的,而不是面向字节的;RFC 5234对此唯一要说的是在2.4节中:
2.4. External Encodings
External representations of terminal value characters will vary
according to constraints in the storage or transmission environment.
Hence, the same ABNF-based grammar may have multiple external
encodings, such as one for a 7-bit US-ASCII environment, another for
a binary octet environment, and still a different one when 16-bit
Unicode is used. Encoding details are beyond the scope of ABNF,
although Appendix B provides definitions for a 7-bit US-ASCII
environment as has been common to much of the Internet.
By separating external encoding from the syntax, it is intended that
alternate encoding environments can be used for the same syntax.这并不能真正澄清问题。
是否有某个版本的ABNF是面向代码点的,而不是面向字节的?
发布于 2015-03-11 07:27:46
如果您正在编写的ABNF是用于人类阅读的,那么我会说,只需使用正常的语法,引用代码点而不是字节即可。您可以查看各种允许在源文本中使用Unicode的语言规范,例如C#、Java、PowerShell等。它们都有语法,它们都必须在某个地方定义Unicode字符(例如用于标识符)。
例如,PowerShell语法有如下所示的行:
双引号-字符:
"(U+0022) (U+201C) (U+201D) . (U+201E)双低报价标志
或者在Java规范中:
UnicodeInputCharacter: UnicodeEscape RawInputCharacter UnicodeEscape:
\UnicodeMarker HexDigit HexDigit UnicodeMarker:uUnicodeMarkeruRawInputCharacter: . character =‘character 2’> HexDigit:其中之一0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F这里的\、u和十六进制数字都是ASCII字符。
请注意,周围有解释意图的文本--这总比抛出一堆语法给某人好。
如果是用于自动生成解析器,最好是找到一个工具,允许您以Unicode和类似ABNF的形式指定语法,并将其发布。不过,写解析器的人也应该明白这一点。
发布于 2015-03-13 21:41:11
请参阅RFC 5234第2.3节,它说:
规则解析为一串终端值,有时称为字符。在ABNF中,字符只是一个非负整数.在某些上下文中,将指定将值映射(编码)到字符集(如ASCII)。
Unicode只是一组非负整数,通过U+0000通过U+10FFFF减去代理范围D800-DFFF,并且有不同的RFCs相应地使用ABNF。RFC 3987就是一个例子。
https://stackoverflow.com/questions/28980706
复制相似问题