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

相关推荐
qq_3363139320 小时前
java基础-IO流(随机点名器)
java·开发语言·python
—Qeyser20 小时前
Flutter 生命周期完全指南:从出生到死亡的全过程
前端·javascript·flutter
2501_9481226320 小时前
React Native for OpenHarmony 实战:Steam 资讯 App 帮助中心实现
javascript·react native·react.js·游戏·ecmascript·harmonyos
古城小栈20 小时前
Cargo.toml
开发语言·后端·rust
心语星光20 小时前
用LibreOffice实现批量将pptx文件转换为pdf文件
开发语言·pdf·ppt
鱼蛋-Felix20 小时前
C#浮点数在部分国家解析失效问题
开发语言·unity·c#
念念不忘 必有回响20 小时前
Vue页面布局与路由映射实战:RouterView嵌套及动态组件生成详解
前端·javascript·vue.js
冰暮流星21 小时前
javascript数据类型转换-转换为数字型
开发语言·前端·javascript
4***175421 小时前
Python 小游戏实战:打造视觉精美的数独小游戏
开发语言·python·pygame
3***g20521 小时前
MATLAB高效算法设计原则利用MATLAB内置函数
开发语言·算法·matlab