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

相关推荐
吃好睡好便好几秒前
在Matlab中绘制非默认峰值图
开发语言·学习·算法·matlab
qq_40170041几秒前
Qt如何 发送带结构体数据的信号
开发语言·qt
NagatoYukee4 分钟前
Java 商品交易实验(第二版)
java·开发语言
浮生望6 分钟前
《JavaScript语言精粹》第3章:对象——JS世界的基石
javascript
阳光九叶草LXGZXJ14 分钟前
自制数据库迁移工具-C版-07-HappySunshineV1.6-(支持PG、达梦、Gbase8a)
linux·c语言·开发语言·数据库·学习·postgresql
不吃土豆的马铃薯15 分钟前
5.SGI STL 二级空间配置器 _S_chunk_alloc核心函数解析
开发语言·c++·vscode·c·内存池
学掌门15 分钟前
JavaScript:为什么命名参数比位置参数更好
开发语言·javascript·ecmascript
码界筑梦坊17 分钟前
124-基于Python的航空旅客满意度数据可视化分析系统
开发语言·python·信息可视化·数据分析·flask·毕业设计
XMYX-017 分钟前
31 - Go url 解析:从字符串到结构化请求的完整路径
开发语言·golang
hhb_61817 分钟前
PHP开发实战:高频难点解析与优化方案
开发语言·php