返回顶部
首页 > 资讯 > 后端开发 > Python >浅析AST抽象语法树及Python代码实现
  • 929
分享到

浅析AST抽象语法树及Python代码实现

抽象语法代码 2022-06-04 19:06:14 929人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

在计算机科学中,抽象语法树(abstract syntax tree或者缩写为AST),或者语法树(syntax tree),是源代码的抽象语法结构的树状表现形式,这里特指编程语言的源代码。树上的每个节点都

在计算机科学中,抽象语法树(abstract syntax tree或者缩写为AST),或者语法树(syntax tree),是源代码的抽象语法结构的树状表现形式,这里特指编程语言的源代码。树上的每个节点都表示源代码中的一种结构。之所以说语法是“抽象”的,是因为这里的语法并不会表示出真实语法中出现的每个细节。比如,嵌套括号被隐含在树的结构中,并没有以节点的形式呈现;而类似于if-condition-then这样的条件跳转语句,可以使用带有两个分支的节点来表示。
和抽象语法树相对的是具体语法树(concrete syntaxtree),通常称作分析树(parse tree)。一般的,在源代码的翻译和编译过程中,语法分析器创建出分析树。一旦AST被创建出来,在后续的处理过程中,比如语义分析阶段,会添加一些信息。
抽象语法树的结构不依赖于源语言的文法,也就是语法分析阶段所采用的上下文无关文法。因为在Parser工程中,经常会对文法进行等价的转换(消除左递归、回溯、二义性等),这样会给文法引入一些多余的成分,对后续阶段造成不利影响,甚至会使各阶段变得混乱。因此,很多编译器(包括GJC)经常要独立地构造语法分析树,为前、后端建立一个清晰的接口。

python实现
假设对'a + 3 * b'进行解释,其中a=2,b=5
代码很简单,就不再进行详细的解释了。


Num = lambda env, n: n 
Var = lambda env, x: env[x] 
Add = lambda env, a, b:_eval(env, a) + _eval(env, b) 
Mul = lambda env, a, b:_eval(env, a) * _eval(env, b) 
 
_eval = lambda env, expr:expr[0](env, *expr[1:]) 
 
env = {'a':2, 'b':5} 
tree = (Add, (Var, 'a'), 
       (Mul, (Num, 3), 
          (Var, 'b'))) 
 
print _eval(env, tree) 

输出结果为17

--结束END--

本文标题: 浅析AST抽象语法树及Python代码实现

本文链接: https://lsjlt.com/news/14789.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 浅析AST抽象语法树及Python代码实现
    在计算机科学中,抽象语法树(abstract syntax tree或者缩写为AST),或者语法树(syntax tree),是源代码的抽象语法结构的树状表现形式,这里特指编程语言的源代码。树上的每个节点都...
    99+
    2022-06-04
    抽象 语法 代码
  • JS如何实现AST抽象语法树
    小编给大家分享一下JS如何实现AST抽象语法树,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!前端中的AST抽象语法树问题四则运算正则表达式词法分析语法分析完整代码...
    99+
    2023-06-06
  • Vue编译器AST抽象语法树源码分析
    目录引言baseCompile主要核心代码如何写一个程序来识别 Tokenparse 函数解析模板字符串引言 接上篇  Vue编译器源码分析compile 解析 baseC...
    99+
    2024-04-02
  • Python Ast抽象语法树的介绍及应用详解
    目录引言1. AST简介 2. 创建AST2.1 Compile函数2.2 生成ast 3. 遍历AST3.1 ast.NodeTransfer3.2 ast.N...
    99+
    2024-04-02
  • 详解使用抽象语法树AST实现一个AOP切面逻辑
    目录开篇一、实现目的1、work.js2、aop.js二、利用语法树添加切面事件三、总结与思考开篇 AST 功能很灵活,可以通过改变一些自定义结构便可以输入自定义的功能,下面简单的...
    99+
    2023-05-14
    AST抽象语法树实现AOP AOP切面逻辑
  • 怎么使用抽象语法树AST实现一个AOP切面逻辑
    这篇文章主要介绍了怎么使用抽象语法树AST实现一个AOP切面逻辑的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用抽象语法树AST实现一个AOP切面逻辑文章都会有所收获,下面我们一起来看看吧。一、实现目的将...
    99+
    2023-07-05
  • Java语言中的抽象类与继承实例代码分析
    这篇文章主要介绍“Java语言中的抽象类与继承实例代码分析”,在日常操作中,相信很多人在Java语言中的抽象类与继承实例代码分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java语言中的抽象类与继承实例代...
    99+
    2023-07-04
  • 详解B+树的原理及实现Python代码
    B+树是自平衡树的高级形式,其中所有值都存在于叶级中。B+树所有叶子都处于同一水平,每个节点的子节点数量≥2。B+树与B树的区别是各节点在B树上不是相互连接,而在B+树上是相互连接的。 B+树多级索引结构图 B+树搜索规则 1、从...
    99+
    2024-01-24
    B树的概念
  • Python语法实例代码分析
    这篇文章主要介绍了Python语法实例代码分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python语法实例代码分析文章都会有所收获,下面我们一起来看看吧。执行 Python 语法正如我们在上一节中学习到的...
    99+
    2023-07-05
  • Java抽象类、继承及多态和适配器的实现代码
    Java继承 方法重写是Java语言多态的特性,必须满足以下条件 在子类中,方法名称与父类方法名称完全相同 方法的参数个数和类型完全相同,返回类型完全相同 ...
    99+
    2024-04-02
  • 深入解析B树算法及其Python实现
    B树,和二叉搜索树很像,每个节点可以包含多个节点,但B树的子节点可以超过两个。 B树数据结构 B树可以在单个节点中存储许多键,并且可以有多个子节点。 B树搜索算法BtreeSearch(x,k) i=1 while i≤...
    99+
    2024-01-23
    B树的概念
  • 详解字典树Trie结构及其Python代码实现
    字典树(Trie)可以保存一些字符串->值的对应关系。基本上,它跟 Java 的 HashMap 功能相同,都是 key-value 映射,只不过 Trie 的 key 只能是字符串。 Trie 的强...
    99+
    2022-06-04
    字典 详解 结构
  • python实现决策树分类算法代码示例
    目录前置信息1、决策树2、样本数据策树分类算法1、构建数据集2、数据集信息熵3、信息增益4、构造决策树5、实例化构造决策树6、测试样本分类后置信息:绘制决策树代码总结前置信息 1、决...
    99+
    2024-04-02
  • Python伪代码分析点赞器实现原理及代码
    目录前言一、简介1.适用场景2.核心逻辑二、代码实现1.模拟登录2.点赞接口分析3.点赞器伪代码实现三、总结前言 许多社区类平台都具备点赞功能,应运而生的就是自动点赞器,今天用Pyt...
    99+
    2024-04-02
  • 红黑树的原理及特点及其在Python中的代码实现
    红黑树和B+树一样,是平衡二叉搜索树。红黑树每个节点都是有颜色的,要么是红色,要么黑色,但树的根是黑色,最底部的叶也是黑色的。还需要注意的是,红黑树任何节点到叶的直接路径包含相同数量的黑色节点。 红黑树如何保持自平衡的特性? ...
    99+
    2024-01-23
  • Python实现印章代码的算法解析
    目录1.题目2.代码3.代码解析1.题目 2.代码 #共有n种图案的印章,每种图案的出现概率相同。小A买了m张印章,求小A集齐n种印章的概率。 n,m=map(int,input(...
    99+
    2024-04-02
  • Python中实现堆排序算法的概念及代码
    了解堆排序算法的前提是要知道完全二叉树和堆数据结构。堆排序算法是将数组可视化为完全二叉树,因此也被称之为“堆”。 堆排序算法原理 1、根据最大堆属性,数据组中最大的项存储在根节点 2、去掉根元素,放到数组的末尾(第n个位置),把...
    99+
    2024-01-22
    算法的概念
  • python静态web服务器实现方法及代码详解
    1、编写TCP服务器程序。 2、获取浏览器发送的http请求消息数据。 3、读取固定的页面数据,将页面数据组装成HTTP响应消息数据并发送给浏览器。 4、HTTP响应报文数据发送完成...
    99+
    2022-11-21
    python 静态 web服务器
  • DEMATEL-ISM模型的Python实现——方法介绍以及代码复现
    DEMATEL-ISM模型的Python实现——方法介绍以及代码复现 前言DEMATEL-ISM分析方法方法简介步骤明确系统要素确定直接影响矩阵规范影响矩阵计算综合影响矩阵计算各个要素的影响度...
    99+
    2023-09-06
    python 开发语言 人工智能
  • python实现语音常用度量方法的代码详解
    语音信号处理一般都要进行主观评价实验和客观评价实验。 主观评价:邀请测听者对语音进行测听,给出主观意见得分 客观评价:根据算法来衡量语音质量 主观投票受多种因素影...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作