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

相关推荐
刘新明19894 分钟前
算法还原案例4-OLLVM_MD5
开发语言·前端·javascript·1024程序员节
wjs20244 分钟前
空对象模式(Null Object Pattern)
开发语言
诚实可靠王大锤15 分钟前
react-native实现多列表左右滑动+滚动TabBar悬停
javascript·react native·react.js·1024程序员节
Cherry Zack18 分钟前
FastAPI 入门指南 :基础概念与核心特性
开发语言·python·fastapi·1024程序员节
疯狂的沙粒1 小时前
前端开发【工具函数】基于dayjs 封装的DateUtils工具函数,可以直接拿着使用
前端·javascript·vue.js·1024程序员节
jingling5551 小时前
CSS进阶 | 不用一行JS!用纯CSS打造会动的现代化单页应用(3D翻转卡片)
前端·javascript·css
你的电影很有趣1 小时前
lesson76:Vue.js 核心特性详解:事件处理、计算属性与侦听器
javascript·vue·1024程序员节
没有bug.的程序员1 小时前
Spring Boot 起步:自动装配的魔法
java·开发语言·spring boot·后端·spring·1024程序员节
面向星辰2 小时前
windows配置hadoop环境
java·开发语言
重铸码农荣光2 小时前
JavaScript 变量声明:从 var 到 let/const 的进化与深思
javascript