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混淆概念参考

相关推荐
转转技术团队1 天前
前端工程化实践:打包工具的选择与思考
前端·javascript·webpack
Kristen_YXQDN1 天前
PyCharm 中 pytest 运行 python 测试文件报错:D:\Python_file\.venv\Scripts\python.exe: No module named pytest
运维·开发语言·python·pycharm·pytest
IMPYLH1 天前
Lua 的 Debug(调试) 模块
开发语言·笔记·python·单元测试·lua·fastapi
哆啦A梦15881 天前
商城后台管理系统 03 规格参数配置
javascript·vue.js·elementui
九死九歌1 天前
【Sympydantic】使用sympydantic,利用pydantic告别numpy与pytorch编程中,tensor形状带来的烦人痛点!
开发语言·pytorch·python·机器学习·numpy·pydantic
知其然亦知其所以然1 天前
JavaScript 变量的江湖恩怨:一篇文章彻底讲清楚
前端·javascript·面试
Kiri霧1 天前
Go切片详解
开发语言·后端·golang
小番茄夫斯基1 天前
使用 pnpm + Workspaces 构建 Monorepo 的完整指南
前端·javascript·vue.js
shuaijie05181 天前
两个表格进行相互联动
前端·javascript·vue.js
二进制coder1 天前
C++ 中的 Interface:概念、实现与应用详解
开发语言·c++