加入收藏 | 设为首页 | 会员中心 | 我要投稿 梅州站长网 (https://www.0753zz.cn/)- 行业物联网、云备份、数据工具、云计算、智能推荐!
当前位置: 首页 > 站长资讯 > 传媒 > 正文

没有AST, IDE中的错误提示、自动补全、重构、语法检查......

发布时间:2021-05-05 17:46:37 所属栏目:传媒 来源:互联网
导读:. 把parsetInt不标准的调用改为标准用法 parseInt(xxx)- parseInt(xxx,10) 对不熟悉JS的同学稍微解释一下: JS在比较两个变量的时候,双等号将执行类型转换; 三等号将进行相同的比较,而不进行类型转换 (如果类型不同, 只是总会返回 false ); parseInt(a,10)

. 把parsetInt不标准的调用改为标准用法 parseInt(xxx)-> parseInt(xxx,10)

对不熟悉JS的同学稍微解释一下:

JS在比较两个变量的时候,双等号将执行类型转换; 三等号将进行相同的比较,而不进行类型转换 (如果类型不同, 只是总会返回 false );

parseInt(a,10) 表示以十进制的方式来解析。

对于这些任务,张大胖脑海中马上闪现出了解决办法:字符串替换。

对***个任务: 找到'==',替换成'==='就行 。

对第二个任务: parseInt(xxx) 改成parseInt(xxx,10), 没法直接替换,得写个正则表达式,找到那些只有一个参数的parseInt字符串,然后加上一个新的参数:10 。

张大胖对自己的正则表达式能力不太自信,如果考虑得不周全,代码就可能被改坏了。

有没有别的办法?

01抽象语法树

使用正则表达式,只能把JavaScript源代码当做文本来处理,能力很弱,无法触及到JavaScript的语法层面,正则表达式没法知道这个地方是变量,那个地方是函数名.....

如果能把JavaScript源码转化成结构化的对象,就可以精确地知道一段代码中有哪些变量名,函数名,参数...... 这样就可以写程序就可以进行处理了。

张大胖想起来自己没有考及格的《编译原理》,里边讲到了抽象语法树(AST)不就是所谓结构化的东西吗?

比如表达式 result = 6+7*3 , 用抽象语法树来表示就是:

如果把所有的JavaScript代码都转化成这样一颗AST的树,那代码的一切都尽在掌握, 可以任意修改了。

么从文本形式的源代码形成这么一个AST ?

让自己写程序实现那就太难了,得做词法分析,语法分析等等。

2. 如何遍历这个AST,来修改这颗树的枝枝叶叶?

比如我想在AST这棵树中添加一个新的节点,该怎么做?

3. 修改完成以后,怎么再次把AST变成文本的源代码?

张大胖赶紧打开Google 搜索,很快便找到了三个开源的工具,正好完成对应的三个功能:

esprima : 从JavaScript源代码形成AST

estraverse:遍历树的节点并修改

escodegen : 把修改完的AST再次转化为源代码。

02创建AST

说干就干,张大胖准备了一段代码来做实验:

(编辑:梅州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读