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

相关推荐
wjs20242 分钟前
迭代器模式
开发语言
知识浅谈2 分钟前
国密算法SM2与SM3在Java项目中的实践指南
java·开发语言·安全
bulucc2 分钟前
使用Flask框架实现 webhook 和 api,并对比区别
开发语言·python
醉风塘4 分钟前
Python基础语法完全指南:从零入门到掌握核心概念
开发语言·python
whm27774 分钟前
Visual Basic 键盘事件
开发语言·visual studio
2401_860494707 分钟前
如何在React Native中,开发一个类似于鸿蒙组件(Hong Kong component)的NoticeBar(通知栏)组件呢?
javascript·react native·react.js·ecmascript·kong·harmonyos
qq_419854058 分钟前
vant组件封装
前端·javascript·vue.js
渔舟唱晚@10 分钟前
从原理到实现:基于 Y.js 和 Tiptap 的实时在线协同编辑器全解析
开发语言·javascript·编辑器
Boop_wu12 分钟前
[Java EE] 网络编程套接字
开发语言·单片机·php
亮子AI13 分钟前
chart.js 雷达图顶部标题怎样消除?
开发语言·前端·javascript·chart.js