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 分钟前
React Native 鸿蒙跨平台开发:实现一个计时器工具
javascript·react native·react.js
Dragon Wu3 分钟前
ReactNative MMKV和React Native Keychain存储本地数据
javascript·react native·react.js·前端框架
lly2024063 分钟前
AJAX PHP 实践指南
开发语言
Never_Satisfied5 分钟前
在JavaScript / HTML中,cloneNode()方法详细指南
开发语言·javascript·html
huwei8537 分钟前
python设计通用表格类 带右键菜单
开发语言·windows·python
Remember_9939 分钟前
深入理解 Java String 类:从基础原理到高级应用
java·开发语言·spring·spring cloud·eclipse·tomcat
—Qeyser12 分钟前
Flutter组件 - BottomNavigationBar 底部导航栏
开发语言·javascript·flutter
hxjhnct13 分钟前
CSS 伪类和伪元素
前端·javascript·css
666HZ66615 分钟前
数据结构3.0 栈、队列和数组
开发语言·数据结构·算法
bing.shao15 分钟前
Golang 在OPC领域的应用
开发语言·后端·golang