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

 更新时间:2016年06月06日 15:08:39   作者:mattkang  
Abstract Syntax Tree抽象语法树简写为ATS,是相当于用树结构将代码程式表现出来的一种数据结构,这里我们就来浅析AST抽象语法树及Python代码实现

在计算机科学中,抽象语法树(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

相关文章

  • 基于python + django + whoosh + jieba 分词器实现站内检索功能

    基于python + django + whoosh + jieba 分词器实现站内检索功能

    这篇文章主要介绍了基于python + django + whoosh + jieba 分词器实现站内检索功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • Flask框架使用DBUtils模块连接数据库操作示例

    Flask框架使用DBUtils模块连接数据库操作示例

    这篇文章主要介绍了Flask框架使用DBUtils模块连接数据库操作,结合实例形式较为详细的分析了flask框架使用DBUtils模块连接数据库的常见操作技巧与相关注意事项,需要的朋友可以参考下
    2018-07-07
  • 关于python中逆序的三位数

    关于python中逆序的三位数

    这篇文章主要介绍了关于python中逆序的三位数,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • Python实战之设计一个多功能办公小工具

    Python实战之设计一个多功能办公小工具

    这篇文章主要介绍了通过Python制作一个多功能的办公小工具,可以实现应用、网页直达以及天气查询,代码具有一定学习价值,需要的小伙伴可以了解一下
    2021-12-12
  • matplotlib绘制动画代码示例

    matplotlib绘制动画代码示例

    这篇文章主要介绍了matplotlib绘制动画代码示例,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • Python tkinter常用操作代码实例

    Python tkinter常用操作代码实例

    这篇文章主要介绍了Python tkinter常用操作代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • Python环境的安装以及PyCharm编辑器配置教程详解

    Python环境的安装以及PyCharm编辑器配置教程详解

    优质的教程可以让我们少走很多弯路,这一点毋庸置疑。这篇文章主要为大家介绍了纯净Python环境的安装以及PyCharm编辑器的配置,需要的可以参考一下
    2023-04-04
  • Python利用自带模块实现屏幕像素高效操作

    Python利用自带模块实现屏幕像素高效操作

    这篇文章主要为大家详细介绍了Python如何利用自带模块实现屏幕像素高效操作,文中的示例代码讲解详,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-02-02
  • Sanic框架路由用法实例分析

    Sanic框架路由用法实例分析

    这篇文章主要介绍了Sanic框架路由用法,结合实例形式较为详细的分析了Sanic框架路由的原理、请求参数、请求类型、重定向等相关操作技巧,需要的朋友可以参考下
    2018-07-07
  • python opencv 图像处理之图像算数运算及修改颜色空间

    python opencv 图像处理之图像算数运算及修改颜色空间

    这篇文章主要介绍了python opencv 图像处理之图像算数运算及修改颜色空间,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-08-08

最新评论