Skip to content

Latest commit

 

History

History
 
 

Week03

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

学习笔记

抽象语法树(AST)

定义:在计算机科学中,抽象语法树(Abstract Syntax Tree,AST),或简称语法树(Syntax tree),是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。

个人理解,vue和react的虚拟Dom,就是一种Dom的抽象语法树,AST是js的抽象语法树,都是把标准或自定义的语法,转换为用对象数组表示可表明原代码结构,可以进行重新赋值、规整,最后再按照自己的意愿生成机器可识别的代码。

也在网上搜了搜抽象语法树,搜出了很多工具,来生成AST、再编辑、再生成代码,核心原理都是一样的,不一样的是处理的过程而已。

正则表达式的exec方法

// 首先声明一个正则表达式,比如课程中的:
let regexp = /([0-9\.]+)|([ \t]+)|([\r\n]+)|(\*)|(\/)|(\+)|(\-)/g

let string = '1024 + 10 * 25'
// 然后用这个正则表达式,对字符串进行检索:
let result = regexp.exec(string)

// result将返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null

当正则表达式regexp非全局时(没有加g标记),result

  • 第 0 个元素:是与正则表达式相匹配的文本
  • 第 1 个元素:是与「正则表达」的第 1 个子表达式相匹配的文本(如果有的话)
  • 第 2 个元素:是与「正则表达」的第 2 个子表达式相匹配的文本(如果有的话)
  • ……以此类推
  • index 属性:声明的是匹配到的文本的第一个字符的位置
  • input 属性:存放的是被检索的字符串 string

当正则表达式regexp为全局时(加了g标记),result

  • 首先,非全局时的数据,这里也都有
  • lastIndex 属性:从指定索引的字符处开始检索字符串,匹配后,此值会更新为匹配文本的最后一个字符的下一个位置,也就是说,可以多次调用 exec()方法,来遍历字符串中的所有匹配文本,当 exec() 再也找不到匹配的文本时,它将返回 null,并把 lastIndex 属性重置为 0