调转符号
为了方便后面处理 ,我们先将所有的 二项表达式 进行预处理,将标识符放在左边, 数字放在右边, 比较简单,不多解释
转换逗号表达式
这里还原逗号表达式就要简单很多,主要是还原三元外的逗号表达式
处理后结果如下
最后将上面的合并起来,就是完整的将 三元转换成 if 语句了
转换 if else 结果图
转换变量声明语句+收集变量名
先看一下效果
遍历==变量声明语句==VariableDeclaration(var x, x2, x3),然后我们判断它声明的变量是不是大于1,如果是大于一的话,他就有可能含有赋值语句(x3 = "str"),就需要进行处理,如果只有一个的话,不需要管它,将这个变量名收集就好
在进行处理前,先定义两个变量,一个用来存储没有初始值的(1),一个用来存储有初始值的(2)
之后遍历声明遍历的数组,然后判断他的初始值是不是为 null,是就添加到 init_arr 里,不是就添加到 arr 里,顺便将这个变量名进行收集
-
将声明器添加到 arr 里的时候,要将他修改成只有一个声明器的声明语句,之后再添加,声明的类型和当前节点一致 O = "bi" ---> var O = "bi"
-
最后就在当前节点的下方插入 含有初始值的数组,然后没有初始值的数组里有没有数据,没有的话就删掉当前节点,有的话就将当前节点声明变量的 declarations 数组修改成 init_arr
有想交流或者交个朋友的可以加我
let v = Died_in2021
本期还原后代码已放在星球中,有需要自行取用