js解析成语法树以及还原

js 复制代码
const {parse} = require("@babel/parser");
const traverse = require("@babel/traverse").default;
const generator = require("@babel/generator").default;

// 1.定义要处理的代码
const jscode = `function square(n) {
  return n * n;
}`;

// 2.使用@babel/parser模块解析代码
const ast = parse(jscode);

// 3.使用@babel/traverse模块遍历代码,如果遇到名为"n"的标识符,则将其名称更改为"x"
traverse(ast, {
  enter(path) {
    if (path.isIdentifier({ name: "n" })) {
      path.node.name = "x";
    }
  },
});

// 4.使用@babel/generator模块生成代码
let { code } = generator(ast);

// 打印生成的代码
console.log(code);

ast应用在语法高亮,格式化的思路:

  1. 读取语言文件
  2. 使用语言解析器解析成语法树
  3. 对语法树遍历处理(加高亮,格式化)
  4. 对语法树进行还原
  5. 将源码写回语言文件

也可以应用在语言混淆以及加密上。

ast混淆概念参考

相关推荐
JAVA学习通2 小时前
北京明光云振铎数据科技Java面经
java·开发语言·科技
jerryinwuhan8 小时前
基于各城市站点流量的复合功能比较
开发语言·php
迈巴赫车主8 小时前
Java基础:list、set、map一遍过
java·开发语言
ZC跨境爬虫9 小时前
跟着MDN学HTML_day_48:(Node接口)
前端·javascript·ui·html·音视频
南 阳10 小时前
Python从入门到精通day66
开发语言·python
十八旬11 小时前
快速安装ClaudeCode完整指南
开发语言·windows·python·claude
前进的李工11 小时前
EXPLAIN输出格式全解析:JSON、TREE与可视化
开发语言·数据库·mysql·性能优化·explain
Byron Loong12 小时前
【c++】为什么有了dll和.h,还需要包含lib
java·开发语言·c++
kyriewen12 小时前
半夜三点线上崩了,AI替我背了锅——用AI排错,五分钟定位三年老bug
前端·javascript·ai编程
独隅12 小时前
CodeX + Visual Studio Code 联动的全面指南
开发语言·php