首页 > 其他分享 >学习ast

学习ast

时间:2023-10-27 20:15:02浏览次数:30  
标签:numericLiteral code generator ast 学习 let identifier types

看别人ast混淆代码 挺6的学习一下

学习第一步:

let a,b=1;
// 注释
var obj = {
    "name":1+3*2,
      "func":function add(a,b){
      let a1=3;
      return a+b
    }
}
function add(a,v){
    return a+v;
}
let xx;
xx = 12;
View 源代码
let fs = require("fs");//读取文件
let parser = require("@babel/parser");//解析语法树
let types = require("@babel/types");//获取类型
let generator = require("@babel/generator").default;//语法树转换成代码
let traverse = require("@babel/traverse").default;//遍历语法树

let jscode = fs.readFileSync("./input.js", { encoding: "utf-8" });
let ast = parser.parse(jscode, { sourceType: "module" });

let one = types.variableDeclaration("let",[
    types.variableDeclarator(types.identifier("a"),null),
    types.variableDeclarator(types.identifier("b"),types.numericLiteral(120))
]);
console.log(generator(one).code);

let two = types.variableDeclaration("var",[
    types.variableDeclarator(types.identifier("obj"),types.objectExpression([
        types.objectProperty(types.stringLiteral("name"),types.binaryExpression("+",types.numericLiteral(1),types.binaryExpression("*",types.numericLiteral(3),types.numericLiteral(2)))),
        types.objectProperty(types.stringLiteral("func"),types.functionExpression(null,[types.identifier("a"),types.identifier("b")],types.blockStatement([
            types.variableDeclaration("let",[types.variableDeclarator(types.identifier("a1"),types.numericLiteral(3))]),
            types.returnStatement(types.binaryExpression("+",types.identifier("a"),types.identifier("b")))
        ])))
    ]))
]);
console.log(generator(two).code);


let three = types.functionDeclaration(types.identifier("add"),[types.identifier("a"),types.identifier("v")],types.blockStatement([types.returnStatement(types.binaryExpression("+",types.identifier("a"),types.identifier("v")))]));
console.log(generator(three).code);
let four = types.variableDeclaration("let",[types.variableDeclarator(types.identifier("xx"),null)]);
console.log(generator(four).code);
let five = types.expressionStatement(types.assignmentExpression("=",types.identifier("xx"),types.numericLiteral(12)));
console.log(generator(five).code);
View 用ast语法树实现和它一样的代码

 效果:

 

标签:numericLiteral,code,generator,ast,学习,let,identifier,types
From: https://www.cnblogs.com/inkser/p/17793044.html

相关文章

  • [spring学习]一定要写对resources 文件夹的名字,不然,即使正确设置了静态资源访问,仍
    今天遇到的问题,项目能启动,能访问正常的页面,只是静态资源没法访问好好检查过配置文件了,springmvc-config也正常的放行静态资源了就是访问不了最后,想重新创建项目的时候,突然意识到是文件夹名字的问题可以写configs或者resources,但是一定要写成带s的复数形式......
  • [Spring框架学习]SSM 整合,使用maven构建项目的时候,启动项目报错class path resource
    错误:classpathresource[config/spring/springmvc.xml]cannotbeopenedbecauseitdoesnotexist错误原因:找不到我的springmvc.xml,在下面web.xml中是我引用路径,网上找到问题classpath指向路径不是resource路径,所以一直找不到我的xml文件,classpath:到你的class路径......
  • [vue学习]vue使用element时,报错解决。
    解决vue使用element时报错ERRORin./node_modules/element-ui/lib/theme-chalk/fonts/element-icons.ttf是因为字体文件没法引入的原因,只需要修改下webpackconfig的file-loader {test:/\.(eot|svg|ttf|woff|woff2)(\?\S*)?$/,loader:'file-loader'}......
  • vue学习十
    <divid="app10"><ul><listyle="list-style-type:none;"v-for="(item,index)inlist":key="list.id">{{item.num}}</li></ul>......
  • vue学习九
    <divid="app9"style="background-color:aqua;">姓名:<inputtype="text"v-model="name"><br>性别:<inputtype="radio"name=""value="1"v-mo......
  • javaweb学习每日总结-第七天
    第七天学习Mvn模式和三层架构今天回顾了开发的三层框架,做了一个完成一点的小案例,也是亲自感受了一下做项目的一个大概的流程,想要清楚的做完一个项目,那么对流程的安排是至关重要的,下面说说我个人的理解,首先是关注数据库,没有数据一切白搭,在数据库里建好所需的表是第一步,第二步则是......
  • php代码审计学习----骑士cms代码审计
    php代码审计学习----骑士cms代码审计源码下载https://github.com/Betsy0/CMSVulSource环境搭建删掉data里的install.lock然后把源码放在phpstudy的网站目录下访问http://xxx/74cms/install.php使用phpstorm调试使用seay进行辅助代码审计(主要phpstorm不知为什么总是无法......
  • [Vue学习]Vue组件学习
    组件的概念:页面可重复使用的抽象。拓展html在构建应用时候的不足。组件化开发 步骤  1.定义组件  2.App.vue中script里引入组件 importxxxx from'xxxxx'3.在components中注册组件  4.在模板中使用  ......
  • [vue学习]vue目录结构分析
    node_modules 依赖src源码.bablercbable配置.gitignore git忽略文件index.htmlhtml入口文件【通常在这里加移动端的view-port】package.json 管理模块 相当于maven的pom.xmlwebpack.config.jswebpack的配置文件【打包vue的文件,为浏览器能解析的文件】  .vue组件组......
  • 学习笔记二
    I/O库函数I/O数据库是一系列文件操作函数,既方便用户使用,又提高了整体效率。看起来比较优质的I/O库函数汇总,链接如下:https://blog.csdn.net/xiaxiaoyule/article/details/44050507?utm_source=app&app_version=4.15.0&code=app_1562916241&uLinkId=usr1mkqgl919blen一、I/O数......