首页 > 编程语言 >[oeasy]python0135_python_语义分析_ast_抽象语法树_abstract_syntax_tree

[oeasy]python0135_python_语义分析_ast_抽象语法树_abstract_syntax_tree

时间:2023-04-16 17:26:14浏览次数:45  
标签:140 ast python tree 注释 添加 Guido 图片

语义分析_抽象语法树_反汇编 回忆

  • 上次回顾了一下历史
  • python 是如何从无到有的
  • 看到 Guido 长期的坚持和努力
  ​   添加图片注释,不超过 140 字(可选)  
  • python究竟是如何理解
  • print("hello")的?
  • 这些ascii字母如何被组织起来执行?
  纯文本
  • 首先编写Guido的简历
print("1982------Guido in cwi") print("1995------Guido in cnri") print("2000------Guido in beopen") print("2005------Guido in google") print("2012------Guido in dropbox") print("2020------Guido in microsoft")
  • 并保存为Guido.py
生成token流
  • 回到shell之后
  • 从字符流生成token流
  ​   添加图片注释,不超过 140 字(可选)  
  • 这个过程叫做分词
分词
  • 首先把一个个字符组成词
  • 分析一下哪些字可以组成词
  • 术语叫词法分析(lexical analysis)
  ​   添加图片注释,不超过 140 字(可选)  
  • 词分析出来之后呢?
组词
  • 词分析出来就是怎么组词的问题
  • 哪些词和哪些词先组合
  • 哪些词和哪些词后组合
 
  • 生成一棵抽象语法树
  • AST(Abstract Syntax Tree)
  ​   添加图片注释,不超过 140 字(可选)  
  • 我能看看这棵ast树么?
引入ast模块 ​   添加图片注释,不超过 140 字(可选)  
  • 具体怎么做呢?
流程
  • 先把这个ast模块导入(import)进来
  • 第一句就是import ast
  • 回车之后没有任何报错
  • 那就是执行成功了
  • 后面也一样
  • 没有报错就是执行成功了
  ​   添加图片注释,不超过 140 字(可选)  
  • 然后读取guido.py并送到s
  • 然后对于s进行语法分析(parse)
​   添加图片注释,不超过 140 字(可选)  
  • 再把分析(parse)的结果进行转储(dump)
  • 看起来有点乱
  • 可以清晰一些么?
  升级Python
  • 目前lanqiao.cn上面的python是3.8
  • 这个清晰缩进的格式需要在3.9以上完成
  • 需要升级
sudo apt update sudo apt install python3.9
  • 升级之后就可以使用Python3.9了
​   添加图片注释,不超过 140 字(可选) 缩进换行
  • 只能在本地演示一下
​   添加图片注释,不超过 140 字(可选)  
  • 这个就是把词组成语法树的样子
  • 如何理解这棵树呢?
  • 我们看一个例子
表达式运算
  • 如果给的表达式为 1 2 3
​   添加图片注释,不超过 140 字(可选)  
  • 结合序为下图
​   添加图片注释,不超过 140 字(可选)  
  • 前两个先结合
  • 得到的结果作为下一个运算的左操作数
  • 然后和第3个结合
结合序
  • 如果把 第一个* 改成 + 号
  • 其他什么也没加
​   添加图片注释,不超过 140 字(可选)  
  • 表达式是1 + 2 * 3
​   添加图片注释,不超过 140 字(可选)  
  • 后两个会先结合
  • 得到的结果 作为下一个运算的 右操作数
  • 然后再和1 进行 加法运算
 
  • 有了 语法树
  • 下一步 要做什么呢?
 
  • 这棵语法树 我们能看懂
  • 但是cpu 需要的是
  • 能执行的 一条条字节码指令
    翻译成 字节码
  • 要把源程序 翻译成字节码 才能执行
  • 字节码 对应着cpu的指令
 
  • 怎么把ast 转化为字节码(指令) 呢?
  • 需要 编译(compile)
 
  • 从一种语言 到 另一种语言
  • 从py文件
  • 到字节码(指令)
  • 就是编译
  • compile
    ​   添加图片注释,不超过 140 字(可选) compile ​   添加图片注释,不超过 140 字(可选)  
  • 我可以看看这个编译过程么?
指令
  • instruction
  • python3 -m dis Guido.py
  • -m 代表使用模块
  • dis 代表反编译(disassemble)
  ​   添加图片注释,不超过 140 字(可选)  
  • 我们可以看见
  • 前面是行号
  • 每行对应4条指令
  • LOAD_NAME 装载(函数)名字
  • LOAD_CONST 装载常量
  • CALL_FUNCTION 调用函数
  • POP_TOP 弹栈
    编译结果
  • 先看看这个pyc文件
  • 注意他在__pycache__文件夹下
  ​   添加图片注释,不超过 140 字(可选)  
  • :%!xxd
  • 把文件转化为字节形态
  ​   添加图片注释,不超过 140 字(可选)  

相关文章

  • FastGCN Fast Learning with Graph Convolutional Networks via Importance Sampling
    目录概符号说明MotivationFastGCN方差分析代码ChenJ.,MaT.andXiaoC.FastGCN:fastlearningwithgraphconvolutionalnetworksviaimportancesampling.ICLR,2018.概一般的GCN每层通常需要经过所有的结点的propagation,但是这是费时的.像普通的深度学习方法一......
  • 使用Python代码远程连接服务器
    目录一、paramiko模块的介绍二、基本使用(用户名密码登录)三、用公钥私钥连接一、paramiko模块的介绍模块介绍使用Python的第三方模块paramiko实现远程连接服务器功能:通过python代码连接服务器并执行相关操作并且支持用户名密码连接和公钥私钥连接模块安装pipinstall......
  • PYTHON 读STATA
    #导入stata_setup模块frompandasimportjson_normalizeimportpandasaspdimportstata_setup,json#通过stata_setup.config关联Stata17stata_setup.config(r"D:\Stata17","mp")#填入Stata17的本地路径及版本类型frompystataimportstata#stata.run(r&......
  • 谈一谈Python中的装饰器
    1、装饰器基础介绍1.1何为Python中的装饰器?Python中装饰器的定义以及用途:装饰器是一种特殊的函数,它可以接受一个函数作为参数,并返回一个新的函数。装饰器可以用来修改或增强函数的行为,而不需要修改函数本身的代码。在Python中,装饰器通常用于实现AOP(面向切面编程),例如日志记录......
  • 【Python无伤速通】第一话:语言基础
    目录目录Python基础标识符coding=utf-8关键字print()函数sep参数sep缺省给sep传参end参数链式赋值模块模块:介绍导入模块方法一方法二数据类型进制表示科学计数法复数类型布尔类型布尔类型介绍布尔:示例数字类型的相互转换隐式转换显......
  • Qt5.9 UI设计(五)——将Tabwidget与treeWidget相互关联
    前言前面一章介绍了ControlTabWidgetControlTreeWidgetmaintitlebar三个子页面同时布局到mainwindow的方法,本章介绍如何将ControlTreeWidget与ControlTabWidget联动。(一)TabWidget子页面实现在maincontent目录下创建otaparatarnsmittelnettester五个目录,用来......
  • Pythonic魔法——变量与常量
    Python作为一门直译式语言,变量和常量在其中尤其重要。本篇将介绍Python中变量和常量的使用方法。变量在Python中,变量是可以被修改的。定义变量时,Python会自动根据值的类型进行设置。x=5y="HelloWorld"上面的代码中,x是整型变量,y是字符串类型变量。需要注意的是,在Python中,变量......
  • Pythonic魔法——数据类型
    在Python中,数据类型是指数据的种类和格式,不同的数据类型具有不同的操作和特性,对不同的应用场合和数据处理有着重要的作用。Python支持多种常用的数据类型,包括数字、字符串、列表、元组、集合和字典等。本文将对这些数据类型进行介绍。 数字类型在Python中,数字类型主要包括整......
  • Pythonic魔法——命名空间
    什么是Python命名空间?Python命名空间是一个变量名和对象之间的映射,其中包含了所定义的函数、类和变量等的名称和值。在Python中,命名空间包括以下三种类型:内置命名空间(built-innamespace):它包含了Python中的内置函数和异常等,这些对象可以在任何时候直接访问,而无需导入任何......
  • Python输出函数需要注意的问题
    问题描述我是使用的print里面的f执行的相关的输出语句,然后就发现str类型的输出就自动带上了括号,就感到挺离谱的问题解决发现使用f进行输出的话,非数字数值的数据就会带上括号(在类里面),可以直接使用print(self.name)直接输出......