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

相关推荐
John_ToDebug7 小时前
从 window.external 到 Mojo深度解析 Chromium 中 JS 与 C++ 的 7 种通信机制
javascript·chrome·mojo
老前端的功夫7 小时前
TypeScript 类型守卫:从编译原理到高级模式
前端·javascript·架构·typescript
派大鑫wink7 小时前
Stream 流:简化集合操作的利器
java·开发语言
小小8程序员7 小时前
除了 gcc/g++,还有哪些常用的 C/C++ 编译器?
c语言·开发语言·c++
亓才孓7 小时前
java中的Math.Radom拓展
开发语言·python·算法
lkbhua莱克瓦247 小时前
基础-SQL-DQL
java·开发语言·数据库·笔记·mysql·dql
laocooon5238578867 小时前
Rust 编程语言教学目录
开发语言·后端·rust
lkbhua莱克瓦247 小时前
基础-SQL-DCL
开发语言·数据库·笔记·mysql·dcl
小希smallxi7 小时前
Rust语言入门
开发语言·后端·rust
未来之窗软件服务7 小时前
幽冥大陆(七十二) 东方仙盟-在线IP归属地自己封装—东方仙盟练气期
前端·javascript·tcp/ip·仙盟创梦ide·东方仙盟·阿雪技术观