bnf与abnf(BNF与ABNF).docVIP

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
bnf与abnf(BNF与ABNF)

bnf与abnf(BNF与ABNF) bnf 巴科斯范式 (bnf: backus - naur form 的缩写) 是由 john backus 和 peter naur 首先引入的用来描述计算机语言语法的符号集.现在, 几乎每一位新编程语言书籍的作者都使用巴科斯范式来定义编程语言的语法规则. 在bnf中, 双引号中的字 (word) 代表着这些字符本身.而double _ quote用来代表双引号. 在双引号外的字 (有可能有下划线) 代表着语法部分. : 内包含的为必选项. []: 内包含的为可选项. {}: 内包含的为可重复0至无数次的项. |: 表示在其左右两边任选一项, 相当于 or 的意思. :: =: 是 被定义为 的意思 ...: 术语符号 [...]: 选项: 最多出现一次 {...}: 重复项: 任意次数, 包括 0 次 (...): 分组 |: 并列选项, 只能选一个 斜体字: 参数, 在其它地方有解释 下面是是用bnf来定义的java语言中的for语句的实例: for _ statement:: = for ( (variable _ declaration | (expression ;) | ;) [expression] ; [expression] ; ) statement abnf rfc2234 定义了扩展的巴科斯范式 (abnf).近年来在internet的定义中abnf被广泛使用.abnf做了更多的改进.扩充巴科斯 - 瑙尔范式 (abnf) 基于了巴科斯 - 瑙尔范式 (bnf), 但由它自己的语法和推导规则构成.这种元语言的发起原则是描述作为通信协议 (双向规范) 的语言的形式系统.它建档于 rfc 4234 中通常充当 ietf 通信协议的定义语言. abnf 规定是一组推导规则, 写为 规则 = 定义; 注释 cr lf 这里的规则是大小写敏感的非终止符, 定义由定义这个规则的符号序列, 一个文档注释组成, 并结束于回车换行. 规则名字是大小写不敏感的 rulename rulename: , , , rulename 和 rulename 都提及同一个规则.规则名字由开始于一个字母的字母、数字和连字符组成.不要求用尖括号 ( and ) (如 bnf 那样) 包围规则名字.但是它们可以用来界定规则名字, 比如在冗文中识别出规则名字的时候.abnf 使用 7 - 位 ascii 编码, 在 8 位域中把高位置零. 终结符由一个或多个数值字符指定.数值字符可以指定为跟随着基数 (b = 二进制, d = 十进制, x = 十六进制) 的一个百分号 %, 随后是这个数值, 或数值的串联 (用 . 来指示).例如回车可以指定为十进制的% d13 或十六进制的% x0d.回车换行可以指定为% d13.10. 文字正文通过使用包围在引号 () 中字符串来指定.这些字符串是大小写不敏感的, 使用的字符集是 us ascii.所以字符串 abc 将匹配 abc, abc, abc, abc, abc, abc, abc 和 abc.对于大小写敏感匹配, 必须定义明确的字符: 要匹配 abc 定义将是% d97%% d99 d66. 操作符 空白被用来分隔定义的各个元素: 要使空格被识别为分割符则必须明确的包含它. 串联 规则1 规则2 规则可以通过列出一序列的规则名字来定义. 要匹配字符串 aba 可以使用下列规则: 1.fu =% x61; a 2. 酒吧= % x62;B 3.mumble =福福吧 选择 规则规则1 / 2 规则可以通过用反斜杠(“/”)分隔的多选一规则来定义。 要接受规则赋或规则酒吧可构造如下规则: 1.fubar =福/酒吧 递增选择 规则1 = 2 /规则 可以通过使用在规则名字和定义之间的”=“来向一个规则增加补充选择。 规则 1.ruleset = ALT1和ALT2 / alt3 / Alt4 / alt5 等价于 1.ruleset = ALT1和ALT2 2.ruleset = / alt3 3.ruleset = / Alt4 / alt5 值范围 C # # - # # 数值范围可以通过使用连字符(“-”)来指定。 规则 1.octal =“0”、“1”、“2”、“3”、“4”、“5”、“6”、“7” 等价于 1.octal = % x30-37 序列分组 (1规则规则2) 元素可以放置在圆括号中来组合定义中的规则。 要匹配”元素搞一团糟”或”元素的情况完全混乱一团糟”可以构造下列规则: 1.group =元(搞一团糟/情况完全混乱) 要匹配”元素的“苦差”或情况完全混乱一团糟”可以构造下列规则: 1.group =元搞/情况完全混乱一

您可能关注的文档

文档评论(0)

jgx3536 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档