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

相关推荐
镜宇秋霖丶8 小时前
常驻大哥24分法,记得看
前端·javascript·vue.js
心连欣8 小时前
跨越时代的对话:Vue 2 与 Vue 3 的终极对决与环境搭建指南
前端·javascript·vue.js
无限进步_8 小时前
简单聊聊 C++ 中的 unordered_map 和 unordered_set
c语言·开发语言·数据结构·c++·windows·哈希算法·散列表
HYCS8 小时前
用pixijs实现fabricjs(一):FakeCanvasRenderingContext2D
javascript·webgl·canvas
LNN20228 小时前
半导体设备 UI 开发工程师:完整工作执行手册
开发语言·python·ui
ch.ju8 小时前
Java Programming Chapter 2-Nested call
java·开发语言
yqcoder8 小时前
JavaScript 内存揭秘:堆(Heap) vs 栈(Stack)
开发语言·javascript·ecmascript
覆东流8 小时前
第11天:python字典基础
开发语言·后端·python
河阿里8 小时前
深入理解LRU缓存机制:从原理到应用(C++实现
开发语言·c++·缓存
xyq20248 小时前
PHP Date
开发语言