大家好,欢迎来到IT知识分享网。
BNF具有一些变体,如EBNF和ABNF。
BNF规则及其组成部分
BNF规则的格式通常如下:
::= expression
其中
<symbol>:符号是一个非终止符变量,通常用<>括起来。::=: 表示左边的非终止符会被右边的表达式替换。expression:表达式由一系列终止符、非终止符和其它符号组成。
在构建BNF规则时,你可以定义一些符号表示不同含义,例如:
| 符号 | 含义 |
|---|---|
"" |
将终止符括起来 |
<> |
表示非终止符 |
() |
表示一组有效选项 |
+ |
指定上一个元素中的一个或多个 |
* |
…零个或多个 |
? |
…零个或一个 |
[x-z] |
字母或数字区间 |
下面我们尝试自定义一些BNF规则。
一般示例:全名的语法
<full_name> ::= <first_name> ” ” (<middle_name> ” “)? <family_name>
规则的左侧部分是一个非终止符变量,用于标识人员的全名。::= 符号表示 <full_name> 将替换为规则的右侧部分。
规则的右侧部分有几个组成部分。首先是first name,使用<first_name>非终止符定义。
接下来是一个空格。为了定义空格,要使用一个终止符,即" "。
接下来,我们有一个可选的middle_name,使用(<middle_name> " ")?定义。
最后,我们有一个家庭名,使用<family_name>定义。
我们还需要定义<first_name>, <middle_name>, <family_name>的规则。
- 只接受字母
- 首字母大写,其余小写
我们又引入了大写字母和小写字母两个非终止符,需要进一步定义:
接着,我们可以定义<first_name>, <middle_name>, <family_name>的规则:
<first_name> ::= <uppercase_letter> <lowercase_letter>*
您可以按照相同的模式来构建 <middle_name> 和 <family_name> 规则。
与编程相关的示例:标识符
- 第一个字符是字母、下划线。
- 其余字符可以是字母、下划线或数字。
可以写出相应的BNF规则:
::= ( | )*
其中<char>和<digit>进一步定义:
我们可以在
BNF Playground网站中测试这个规则。
Python的BNF变体
Python 使用 BNF 表示法的自定义变体来定义语言的语法。
Python 的 BNF 变体使用以下样式:
| 符号 | 含义 |
|---|---|
name |
规则或非终止符的名称 |
::= |
意味着 |
| ` | ` |
* |
零个或多个 |
+ |
一个或多个 |
[] |
零个或一个,即可选项 |
() |
分组 |
space |
仅对分隔令牌有意义 |
这些符号定义了 Python 的 BNF 变体。与常规 BNF 规则的一个显着区别是Python不使用尖括号( <> )来括起非终端符号。它仅使用非终端标识符或名称。这使得规则更简洁易读。
另外,[]的含义不再是字符集,而是可选项。要定义类似于BNF的[a-z],需要使用"a"..."z"。
在Python文档经常会遇到BNF代码片段,有必要学习如何阅读它们。
从 Python 的文档中读取 BNF 规则:示例
pass 和 return 语句
这是Python的pass语句
pass_stmt ::= “pass”
这里,pass_stmt是一个规则的名称,使用::=指示规则扩展为"pass"。"pass"是一个终止符,意味着语句本身由单词pass组成。
因此,pass语句只是一个单词
pass
另一个常见的语句是return语句:
return_stmt ::= “return” [expression_list]
return语句由"return"和[expression_list]组成。expression_list是一个非终止符,[]表示它是可选的。
因此你可以这样使用return语句
如果你进入expression_list的定义,你会看到
expression_list ::= expression (“,” expression)* [“,”]
又出现了一个非终止符expression,你可以继续查看expression的定义。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)
感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的:
① 2000多本Python电子书(主流和经典的书籍应该都有了)
② Python标准库资料(最全中文版)
③ 项目源码(四五十个有趣且经典的练手项目及源码)
④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)
⑤ Python学习路线图(告别不入流的学习)
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
② Python标准库资料(最全中文版)
③ 项目源码(四五十个有趣且经典的练手项目及源码)
④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)
⑤ Python学习路线图(告别不入流的学习)
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-A2P7J5Lt-58)]
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/122182.html
![[译]BNF 表示法:深入了解 Python 的语法_bnf 语法,2024年最新系列教学插图1 img](https://i-blog.csdnimg.cn/blog_migrate/e8988f76644d8303f0b115112fafce7d.png)
![[译]BNF 表示法:深入了解 Python 的语法_bnf 语法,2024年最新系列教学插图3 img](https://i-blog.csdnimg.cn/blog_migrate/602e2dea5f95a2d7609344502e3a95f0.png)
![[译]BNF 表示法:深入了解 Python 的语法_bnf 语法,2024年最新系列教学插图5 [译]BNF 表示法:深入了解 Python 的语法_bnf 语法,2024年最新系列教学](https://i-blog.csdnimg.cn/blog_migrate/ad7909a4730b780656545eb9552a5320.png)
![[译]BNF 表示法:深入了解 Python 的语法_bnf 语法,2024年最新系列教学插图7 [译]BNF 表示法:深入了解 Python 的语法_bnf 语法,2024年最新系列教学](https://i-blog.csdnimg.cn/blog_migrate/16e27ee7dfd6e25a4f43c8cc6ef06aa7.png)
![[译]BNF 表示法:深入了解 Python 的语法_bnf 语法,2024年最新系列教学插图9 [译]BNF 表示法:深入了解 Python 的语法_bnf 语法,2024年最新系列教学](https://i-blog.csdnimg.cn/blog_migrate/3443f3d934f11d6666b3767ac0897763.png)
![[译]BNF 表示法:深入了解 Python 的语法_bnf 语法,2024年最新系列教学插图11 [译]BNF 表示法:深入了解 Python 的语法_bnf 语法,2024年最新系列教学](https://i-blog.csdnimg.cn/blog_migrate/0426b4c2e3d69852ceb846faa8ff365f.png)
![[译]BNF 表示法:深入了解 Python 的语法_bnf 语法,2024年最新系列教学插图13 img](https://i-blog.csdnimg.cn/blog_migrate/b2f869eeea93a413eeb296065e278e0d.png)
![[译]BNF 表示法:深入了解 Python 的语法_bnf 语法,2024年最新系列教学插图15 在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/30dbefa7f311a757b18ab8f5ab6e9073.jpeg)
![[译]BNF 表示法:深入了解 Python 的语法_bnf 语法,2024年最新系列教学插图17 img](https://i-blog.csdnimg.cn/blog_migrate/fb7c636728256369d0364de8b0054f62.png)