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

相关推荐
你真是饿了7 分钟前
1.C++入门基础
开发语言·c++
天天进步201511 分钟前
Python全栈项目:实时数据处理平台
开发语言·python
Tipriest_12 分钟前
Python中is关键字详细说明,比较的是地址还是值
开发语言·python
sheji341613 分钟前
【开题答辩全过程】以 基于Python的餐饮统计系统的设计和实 现为例,包含答辩的问题和答案
开发语言·python
elseif12314 分钟前
【C++】并查集&家谱树
开发语言·数据结构·c++·算法·图论
catchadmin14 分钟前
2026 年 PHP 前后端分离后台管理系统推荐 企业级方案
开发语言·php
Byron070718 分钟前
从 0 到 1 搭建 Vue 前端工程化体系:提效、提质、降本实战落地
前端·javascript·vue.js
LGL6030A23 分钟前
Java学习历程26——线程安全
java·开发语言·学习
遨游xyz25 分钟前
排序-快速排序
开发语言·python·排序算法
傻啦嘿哟1 小时前
Python操作PDF页面详解:删除指定页的完整方案
开发语言·python·pdf