AST学习入门

news2024/9/21 22:05:56

AST学习入门

1.AST在线解析网站
https://astexplorer.net/

img

1.type: 表示当前节点的类型,我们常用的类型判断方法t.is********(node)**,就是判断当前的节点是否为某个类型。

2**.start**:表示当前节点的开始位置

3.end:当前节点结束

4.loc : 表示当前节点所在的行列位置,里面也有start与end节点,这里的start与上面的start是不同的,这里的start是表示节点所在起始的行列位。置,而end表示的是节点所在末尾的行列位置

**注:**重点关注type,start,end以及它的子节点,其他属性一般还原的时候用不到

console. log(“Hello,AST!”);

它是一个 ExpressionStatement类型的节点,可以看成是一个表达式块,大家多多解析就明白了,这个节点一定会有一个 expression 的子节点,所以我们在构造节点的时候,只需构造它必有的节点即可。至于start,end以及loc,babel会帮你自动处理好。

这里 expression节点的类型是 CallExpression,它同时又包含了callee和arguments两个子节点,callee可以理解为函数名,而 arguments 则是它的参数。

callee 节点包含了object,property和computed节点,object表示对象,property表示其属性,而computed表示其方式。

arguments 节点,是一个Array类型,因此单词是复数形式。在这里它只有一个元素,说明该函数只有一个实参,实参是一个 StringLiteral类型的节点,也就是字面量。

1.安装babel

npm install @babel/core --save-dev

利用AST解混淆先导知识:简单介绍path和node

https://mp.weixin.qq.com/s/vd3u-JM_QVFZRVpMB-ZYkw

  • let用于声明变量,用法与var类似

  • const用于声明常量:

    与变量不同,常量是一个恒定的值,只读,不可修改
    在这里插入图片描述

2.js代码转语法树

读取js文件

const fs = require("fs")
let jscode = fs.readFileSync(encode_file, {encoding: "utf-8"});

将JavaScript代码,转成AST语法树

const parser = require("@babel/parser");
const fs = require("fs");
file_name = "c.js"
var js = fs.readFileSync(file_name,"utf-8");
var ast = parser.parse(js);
console.log(JSON.stringify(ast,null," "));

其中c.js文件是要解析成语法树的文件

function A(a,b) {
    c = a + b;
    console.log(c)
    }
A(111,222)

解析完可以发现和https://astexplorer.net/解析基本一致

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1536375.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

产品推荐 | 基于Xilinx FPGA XC5VFX100T的6U VPX视频叠加板卡

01、产品概述 本板卡是基于Xilinx FPGA XC5VFX100T的6U VPX视频叠加板卡。主要用于视频叠加板具有多种高清图形输入接口,可实现其中两路高清视频信号的开窗显示和叠加显示功能;或者输出和输入图形接口的转换。 02、物理特性 ● 尺寸:6U CPC…

【文献阅读】AlphaFold touted as next big thing for drug discovery — but is it?

今天来精读2023年10月发在《Nature》上的一篇新闻:AlphaFold touted as next big thing for drug discovery — but is it? (nature.com)https://www.nature.com/articles/d41586-023-02984-w Questions remain about whether the AI tool for predicting protein …

Python Windows系统 虚拟环境使用

目录 1、安装 2、激活 3、停止 1、安装 1)为项目新建一个目录(比如:目录命名为learning_log) 2)在终端中切换到这个目录 3)执行命令:python -m venv ll_env,即可创建一个名为ll…

常用的6个的ChatGPT网站,国内可用!

GPTGod 🌐 链接: GPTGod 🏷️ 标签: GPT-4 免费体验 支持API 支持绘图 付费选项 📝 简介:GPTGod 是一个功能全面的平台,提供GPT-4的强大功能,包括API接入和绘图支持。用户可以选择免…

成都百洲文化传媒有限公司电商新浪潮的领航者

在当今电商行业风起云涌的时代,成都百洲文化传媒有限公司以其独特的视角和专业的服务,成为了众多商家争相合作的伙伴。今天,就让我们一起走进百洲文化的世界,探索其背后的成功密码。 一、百洲文化的崛起之路 成都百洲文化传媒有限…

短视频矩阵系统---php7.40版本升级自研

短视频矩阵系统---php7.40版本升级自研 1.部署及搭建 相对于其他系统,该系统得开发及部署难度主要在各平台官方应用权限的申请上,据小编了解,目前抖音短视频平台部分权限内侧名额已满,巧妇难为无米之炊,在做相关程序…

unity 添加newtonsoft-json

再git url上添加:com.unity.nuget.newtonsoft-json

手机如何设置静态IP地址显示

随着移动互联网的普及,手机已经成为我们日常生活中不可或缺的一部分。在连接无线网络时,我们有时需要设置手机的IP地址为静态,以满足特定的网络需求或解决某些网络问题。本文将指导您如何在手机上设置静态IP地址显示,让您更好地管…

二、typescript基础语法

一、条件语句 二、函数 1、有名函数 function add(x:number, y:number):number {return x y;}2、匿名函数 let add function (x:number, y:number):number {return x y;}函数可选参数 function buildName(firstname: string, lastname?:string) {if (lastname) {return fi…

蓝牙耳机哪个品牌最好?2024年热门机型推荐合集分享

​随着蓝牙耳机的普及,越来越多的年轻人开始追求这种无线的便利。市场上品牌众多,款式多样,选择起来确实让人眼花缭乱。我整理了一份蓝牙耳机品牌排行榜前十名,希望能为你提供一些参考,帮助你找到心仪的耳机。 一、202…

HarmonyOS实战开发-编写一个分布式邮件系统

概述 本篇Codelab是基于TS扩展的声明式开发范式编程语言编写的一个分布式邮件系统,可以由一台设备拉起另一台设备,每次改动邮件内容,都会同步更新两台设备的信息。效果图如下: 说明: 本示例涉及使用系统接口&#xff…

基于springboot的牙科就诊管理系统

技术:springbootmysqlvue 一、系统背景 当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化,规范化管理。这样…

mysql分页查询多用GitCode平台

目录 一、在GitCode平台AI搜索结果(这个更优) 二、在百度搜索输入“mysql Java分页查询”的输出结果: 三、推荐的文章 四、GitCode的使用 1)如搜索jdk11可以直接下载jdk11的包 2)搜索开源项目 3)如搜…

学浪怎么下载视频_学浪下载视频方法

越来越多人购买了学浪课程,但是苦于学浪视频官方不提供下载选项,于是就有人做了学浪视频下载软件,这里就教大家如何下载你已经购买的学浪课程 本次教程用到的软件都在下面的链接 链接:https://pan.baidu.com/s/1y7vcqILToULrYAp…

网络: 数据链路层

数据链路层: 数据帧的封装与传输 以太网数据帧 源地址和目的地址是指网卡的硬件地址(也叫MAC地址), 长度是48位,是在网卡出厂时固化的;帧协议类型字段有三种值,分别对应IP、ARP、RARP;帧末尾是CRC校验码 以太网 "以太网" 不是一种具体的网络, 而是一种技术标准; 既…

【机器学习】一文搞懂算法模型之:Transformer

Transformer 1、引言2、Transformer2.1 定义2.2 原理2.3 算法公式2.3.1 自注意力机制2.3.1 多头自注意力机制2.3.1 位置编码 2.4 代码示例 3、总结 1、引言 小屌丝:鱼哥, 你说transformer是个啥? 小鱼:嗯… 啊… 嗯…就是… 小屌…

Rust基本类型

数值类型 整数类型 无符号整数只能取正数和0,有符号整数可以取正数负数和0。isize和usize类型取决于程序运行的计算机CPU类型,若CPU是32位的,则这两个类型是32位的,若CPU是64位的,则它们是64位的。rust整型 默认使用…

CentOS/RHEL 6.5 上 NFS mount 挂起kernel bug

我本身有四台机器做WAS集群,挂载nfs,其中随机一台客户端计算机端口关闭释放将进入不良状态,对 NFSv4 挂载的任何访问都将挂起(例如“ls,cd 或者df均挂起”)。这意味着没有人并且所有需要访问共享的用户进程…

C语言例:设 int x; 则表达式 (x=4*5,x*5),x+25 的值

代码如下&#xff1a; #include<stdio.h> int main(void) {int x,m;m ((x4*5,x*5),x25);printf("(x4*5,x*5),x25 %d\n",m);//x4*520//x*5100//x2545return 0; } 结果如下&#xff1a;

wy的leetcode刷题记录_Day92

wy的leetcode刷题记录_Day92 声明 本文章的所有题目信息都来源于leetcode 如有侵权请联系我删掉! 时间&#xff1a;2024-3-22 前言 目录 wy的leetcode刷题记录_Day92声明前言2617. 网格图中最少访问的格子数题目介绍思路代码收获 695. 岛屿的最大面积题目介绍思路代码收获 2…