Python的词法分析与语法分析


Posted in Python onMay 18, 2013

词法分析(Lexical Analysis):分析由字符组成的单词是否合法,如果没有问题的话,则产生一个单词流。

语法分析(Syntactic Analysis):分析由单词组成的句子是否合法,如果没有问题的话,则产生一个语法树。

在词法分析器分析源代码文本的时候,有一个概念需要明确:

1.物理行:由回车字符序列(在Windows上是CR LF,在Unix上是LF)结尾的字符序列组成一个物理行。

2.逻辑行:由一个或者多个物理行组成,可以明确地使用反斜杠(\)来连接多个物理行使之成为一个逻辑行;或者,处在圆括号,中括号,花括号内的表达式可以跨越多个物理行,但是被当作一个逻辑行。

词法分析器是面向逻辑行的,也就是说,对于词法分析器而言,只有逻辑行才算是一行,它只在逻辑行结束之处才产生NEWLINE这个单词或者说token。

对于每一处缩进,不管它有多少个空白字符,词法分析器只会产生一个INDENT单词或者说token,代表缩进一级,每当要退出一级缩进的时候,词法分析器就会产生一个DEDENT单词或者说token。注意,单词DEDENT并没有一个或一组字符与之对应,它是完全的逻辑概念。

Python使用稍作修改的BNF(巴科斯范式)来表示词法与语法规则。

下面重点说一下需要注意的地方,以避免发生一些低级但是隐蔽的编程错误。

1.标识符是区分大小写的,但是仍然不要仅仅用大小写不同来区分两个变量。

2.不要使用那些在其它编程语言中是关键字的标识符作为变量名,因为它们很可能会成为Python的关键字。

3.不要使用Python明确声明有特殊意义的标志符作为变量名(这类变量一般以下划线开头),除非明确自己要使用那个特殊含义。

4.不要在Python中使用$和?(字符串中除外),它们不是合法的字符。

5.不要混用Tab和空格来表示缩进,只使用其中一种,并养成习惯。

6.整数字面常量有10,16,8,2几种表示方法,如果使用16进制,请写0xa或者0Xa;如果使用8进制,请写0o7或者0O7;如果使用2进制,请写0b1或者0B1;总之,不要省略掉那个标识进制的字母,建议只使用小写字母。

7.在整数字面常量后加一个l或者L就形成了一个长整数,建议只使用L,因为小写l看起来像数字1.

8.整数使用32位表示,但是长整数并不限于多少位表示,在内存允许的情况下,它可以表示任意大小的整数,这与C语言等是不一样的。

9.如果一个整数字面常量的值超过32位整数的表示范围,那么Python会自动将它升级为长整数,但是在早期的Python实现中可能并非如此,因此如果你预计需要一个很大的整数值,请明确使用长整数。

10.浮点数字面常量只有10进制形式。

Python 相关文章推荐
python中print的不换行即时输出的快速解决方法
Jul 20 Python
详解python eval函数的妙用
Nov 16 Python
Python实现的圆形绘制(画圆)示例
Jan 31 Python
详解如何在python中读写和存储matlab的数据文件(*.mat)
Feb 24 Python
解决python写入带有中文的字符到文件错误的问题
Jan 31 Python
Python爬虫实现验证码登录代码实例
May 10 Python
python opencv摄像头的简单应用
Jun 06 Python
Windows 安装 Anaconda3+PyCharm的方法步骤
Jun 13 Python
Python通过2种方法输出带颜色字体
Mar 02 Python
matplotlib quiver箭图绘制案例
Apr 17 Python
详解pandas.DataFrame.plot() 画图函数
Jun 14 Python
Python基于Webhook实现github自动化部署
Nov 28 Python
简单文件操作python 修改文件指定行的方法
May 15 #Python
Python代理抓取并验证使用多线程实现
May 03 #Python
50行代码实现贪吃蛇(具体思路及代码)
Apr 27 #Python
Python的lambda匿名函数的简单介绍
Apr 25 #Python
python批量下载图片的三种方法
Apr 22 #Python
如何运行Python程序的方法
Apr 21 #Python
python读取注册表中值的方法
Apr 08 #Python
You might like
网上抓的一个特效
2007/05/11 Javascript
借用Google的Javascript API Loader来加速你的网站
2009/01/28 Javascript
一段实现页面上的图片延时加载的js代码
2010/02/11 Javascript
JS字符串处理实例代码
2013/08/05 Javascript
javascript中的变量作用域以及变量提升详细介绍
2013/10/24 Javascript
JavaScript中函数(Function)的apply与call理解
2015/07/08 Javascript
JS将滑动门改为选项卡(需鼠标点击)的实现方法
2015/09/27 Javascript
js+ajax实现获取文件大小的方法
2015/12/08 Javascript
JavaScript_object基础入门(必看篇)
2016/06/13 Javascript
JS基于onclick事件实现单个按钮的编辑与保存功能示例
2017/02/13 Javascript
jQuery输入框密码的显示隐藏【代码分享】
2017/04/29 jQuery
Ionic + Angular.js实现图片轮播的方法示例
2017/05/21 Javascript
深入剖析Node.js cluster模块
2018/05/23 Javascript
详解javascript 正则表达式之分组与前瞻匹配
2018/05/30 Javascript
基于JS实现一个随机生成验证码功能
2019/05/29 Javascript
Python编程中用close()方法关闭文件的教程
2015/05/24 Python
TensorFlow模型保存和提取的方法
2018/03/08 Python
Windows下将Python文件打包成.EXE可执行文件的方法
2018/08/03 Python
Pyinstaller打包.py生成.exe的方法和报错总结
2019/04/02 Python
python二进制读写及特殊码同步实现详解
2019/10/11 Python
python Django框架实现web端分页呈现数据
2019/10/31 Python
Python迭代器Iterable判断方法解析
2020/03/16 Python
Python如何截图保存的三种方法(小结)
2020/09/01 Python
法国奢华女性时尚配饰网上商店:Monnier Frères
2016/08/27 全球购物
《美丽的田园》教学反思
2014/03/01 职场文书
金融学专业大学生职业生涯规划
2014/03/07 职场文书
竞选演讲稿范文大全
2014/05/12 职场文书
上课不认真检讨书
2014/09/17 职场文书
村长党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
六查六看剖析材料
2014/10/06 职场文书
领导干部整治奢华浪费之风思想汇报
2014/10/07 职场文书
拾金不昧表扬信怎么写
2015/05/04 职场文书
委托收款证明
2015/06/23 职场文书
学习新党章心得体会2016
2016/01/15 职场文书
2016大学生暑期三下乡心得体会
2016/01/23 职场文书
python神经网络编程之手写数字识别
2021/05/08 Python