AST(Abstract Syntax Tree抽象语法树)

1,572 阅读2分钟

抽象语法树(Abstract Syntax Tree)也称为AST语法树,指的是源代码语法所对应的树状结构。

也就是说,对于一种具体编程语言下的源代码,通过构建语法树的形式将源代码中的语句映射到树中的每一个节点上。

什么是语法树

程序代码本身可以被映射成为一棵语法树,而通过操纵语法树,我们能够精准的获得程序代码中的某个节点。例如声明语句,赋值语句,而这是用正则表达式所不能准确体现的地方。

其实内部逻辑分为了两部分:词法分析和语法分析

词法分析(扫描scanner)

当词法分析源代码的时候,会一个一个字母的读取代码,当遇到空格、操作符或者特殊符号的时候,会认为一个话已经完成了,会解析成一个词。

语法分析(解析器)

将词法分出来的数据转换成树形表达式。同时,验证语法,语法出错,抛出语法错误。解析器100%覆盖所有代码结构生成树叫做CST(具体语法树)

Javascript 代码中的语法单元主要包括以下这么几种:

  • 关键字:例如 var、let、const等
  • 标识符:没有被引号括起来的连续字符,可能是一个变量,也可能是 if、else 这些关键字,又或者是 true、false 这些内置常量
  • 运算符: +、-、 *、/ 等
  • 数字:像十六进制,十进制,八进制以及科学表达式等语法
  • 字符串:因为对计算机而言,字符串的内容会参与计算或显示
  • 空格:连续的空格,换行,缩进等
  • 注释:行注释或块注释都是一个不可拆分的最小语法单元
  • 其他:大括号、小括号、分号、冒号等

原理

应用

javascript转译、代码压缩、css预处理器、elint、pretiier