Python的抽象语法树(一)

之前三章的内容,我们分别谈及了语法分析中涉及到的文法定义、文法分析以及消除左递归等内容。

今天我们来谈谈语法分析的另一大部分内容:抽象语法树。

抽象语法树

简单来说,抽象语法树是在语法分析过程中,对词法符号进行文法分析后,选择某一条产生式进行展开后的结果。

假设我们有如下代码:

a - (b + c)

这里我们忽略a, b, c三者的值

首先得到词法分析的结果,Token流:

NAME MINUS LPAR NAME PLUS NAME RPAR

结合我们在Python的语法分析(一)提到的文法定义,分析出来的大致的抽象语法树如下图所示:

感兴趣推导过程的读者可以自行尝试推导一次,涉及到的文法定义如下:

// 重点区块1

test: or_test ['if' or_test 'else' test] | lambdef

test_nocond: or_test | lambdef_nocond

lambdef: 'lambda' [varargslist] ':' test

lambdef_nocond: 'lambda' [varargslist] ':' test_nocond

or_test: and_test ('or' and_test)*

and_test: not_test ('and' not_test)*

not_test: 'not' not_test | comparison

comparison: expr (comp_op expr)*

// 重点区块2

expr: xor_expr ('|' xor_expr)*

xor_expr: and_expr ('^' and_expr)*

and_expr: shift_expr ('&' shift_expr)*

shift_expr: arith_expr (('<>') arith_expr)*

// 重点区块3

arith_expr: term (('+'|'-') term)*

term: factor (('*'|'@'|'/'|'%'|'//') factor)*

factor: ('+'|'-'|'~') factor | power

python 抽象语法树_Python 的抽象语法树(一)相关推荐

  1. python抽象语法树_Python AST –抽象语法树

    python抽象语法树 Abstract Syntax Tree is a very strong features in Python. Python AST module allows us to ...

  2. java抽象语法树(ast),AST 抽象语法树

    AST 抽象语法树简介 AST(Abstract Syntax Tree)是源代码的抽象语法结构树状表现形式,Webpack.ESLint.JSX.TypeScript 的编译和模块化规则之间的转化都 ...

  3. python ast_python AST 抽象语法树

    Abstract Sytax Tree 暂时用到的原因:在模型量化中,需要量化某些操作符带来的运算效果,比如 '+', '-','*', '/' 等等,这些就需要对源代码进行查询,因此就要需要将pyt ...

  4. 理解Babel是如何编译JS代码的及理解抽象语法树(AST)

    Babel是如何编译JS代码的及理解抽象语法树(AST) 1. Babel的作用是?    很多浏览器目前还不支持ES6的代码,但是我们可以通过Babel将ES6的代码转译成ES5代码,让所有的浏览器 ...

  5. java抽象语法树(ast),【你应该了解的】抽象语法树AST

    团队:skFeTeam  本文作者:李世伟 作为前端程序员,webpack,rollup,babel,eslint这些是不是经常用到?他们是打包工具,代码编译工具,语法检查工具.他们是如何实现的呢?本 ...

  6. python 抽象语法树_抽象语法树(Abstract Syntax Tree)

    一般来说,程序中的一段源代码在执行之前会经历下面三个步骤 1 分词/词法分析 这个过程会将由字符组成的字符串分解成有意义的代码快,这些代码块被称为词法单元.例如 var a = 4:会被分解成 var ...

  7. python树代码_浅析AST抽象语法树及Python代码实现

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

  8. 语法树与抽象语法树(parse tree abstract syntax tree)

    1 语法树(parse tree): 是在parsing阶段,derivation的图像化表示,parser tree focus on grammar的actual implemment,包括像wh ...

  9. JavaScript的语法解析与抽象语法树

    抽象语法树(Abstract Syntax Tree)也称为AST语法树,指的是源代码语法所对应的树状结构.也就是说,对于一种具体编程语言下的源代码,通过构建语法树的形式将源代码中的语句映射到树中的每 ...

最新文章

  1. 数据院携手汽车工程系,女生节尽展清华大数据风采~
  2. 量子信息之父辞世,开山论文写完14年才被发表,晚年去当建筑工人
  3. 零基础入门学python 第二版-《零基础入门学习Python》第二版和第一版的区别在哪里呢?...
  4. html固定table表头的实现思路
  5. problem-solving-with-algorithms-and-data-structure-usingpython(使用python解决算法和数据结构) -- 基本数据结构(一)...
  6. 吴恩达 coursera ML 第十六课总结+作业答案
  7. 《剑指offer》数组中出现次数超过一半的数字
  8. 10000个科学难题书籍介绍
  9. excel粘贴时出现故障_Workfine——快速整理数据的能力甩了excel几条街
  10. 关键字synchronized与volatile详解
  11. com.itextpdf.text.exceptions.IllegalPdfSyntaxException: Unbalanced begin/end text operators.
  12. javascript中document用法
  13. 东风风行t5evo噪音测试软件,【图】百公里加速9.5秒 实测东风风行T5 EVO_汽车江湖...
  14. python 判断excel单元格为空_用python检测空白Excel单元格
  15. 利用URL地址实现页面间传输数据和获取数据
  16. Java下bug经历汇总
  17. 小米pad MI PAD 开发者选项、USB调试开启方式
  18. 68页智慧管廊项目建设解决方案
  19. 变态而有趣的微软面试题及答案
  20. Python os.walk 遍历指定深度的方法

热门文章

  1. 电脑借液晶电视显示器出现雪花点的另类解决办法
  2. Microsoft WiFi与Skype WiFi有什么不同?
  3. bootstrap validator简单非空校验(data-bv-notempty)
  4. word里面表格显示不全解决办法,随手记
  5. Katalon之介绍及安装_辉机(第一篇)
  6. Unity批量更改脚本名字
  7. Django pickling
  8. ethernet phy 的 strap pin 电阻值的确定
  9. 51单片机内部ram
  10. vue打包部署axios跨域问题