首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏黄啊码【CSDN同名】

    AST抽象语法

    什么是 ASTAST 是 Abstract Syntax Tree 的首字母的缩写,中文名称为:抽象语法抽象语法本质上就是一个 JS 对象,以字符串的视角,将 Html 标签 解析为 JS 对象渲染函数(h 函数 ),既是 AST 的产物,也是 vnode 的起源h('div', { attrs: { className: 'box' } }, [ h('ul', {}, [ h('li', {}, '1'), h('li', {}, '2'), h('li', {}, '3') ])])复制代码抽象语法和虚拟节点的关系工作机理

    <h3 class { tag: "div", attrs: [], children: [ { tag: "h3", attrs: [

    1.6K10编辑于 2022-06-20
  • 来自专栏Pulsar-V

    Python随笔(四)抽象语法AST

    什么是抽象语法嘞? 在计算机科学中,抽象语法和抽象语法其实是源代码的抽象语法结构的树状表现形式 我们可以用一个在线的AST编辑器来观察AST的构建 Python语言的执行过程就是通过将Python字节码转化为抽象语法来进行下一步的分析等其他操作 回到AST AST主要作用有三步: 1. 解析(PARSE):将代码字符串解析成抽象语法。 2. 转换(TRANSFORM):对抽象语法进行转换操作。 3. 一般来说,研究抽象语法有哪些用途呢? 同时,我们也可以用Python自带的AST库解析我们的字符串为语法 ?

    3.2K30发布于 2019-04-09
  • 来自专栏开源技术小栈

    PHP代码抽象语法工具 AST Viewer

    抽象语法 抽象语法(Abstract Syntax Tree,简称AST)是源代码的抽象语法结构的树状表现形式,它不依赖于源语言的语法(比如词法单元)。 抽象语法在编译器设计中占据重要地位,它是许多编译任务的基础,包括语法分析、语义分析、优化和代码生成等。 易于处理:AST提供了一种方便的方式来遍历、修改和生成源代码。由于它是树状结构,因此可以使用递归或其他遍历算法来操作它。 AST的用途 编译器设计:在编译器设计中,AST是许多任务的基础。 AST提供了一种方便的方式来自动执行这些任务,而无需手动修改源代码。 PHP AST 工具 PHP AST Viewer 是一个专门用于查看 PHP 代码的抽象语法AST)的工具。 通过提供清晰、互动的方式查看代码的抽象语法,它为软件开发和维护提供了极大的便利。欢迎访问网站了解更多,并尝试使用 PHP AST Viewer在代码的世界里,理解是优化的第一步。

    63210编辑于 2024-09-10
  • 抽象语法AST)全流程示例解析

    抽象语法AST)全流程示例解析以下以表达式 3 + 5 * 2 为例,贯穿从代码输入到最终应用的全流程,说明AST的核心概念和作用。1. 语法分析:构建AST的逻辑骨架根据编程语言的语法规则(如运算符优先级),语法分析器将Token序列转换为树形结构: 乘法优先级高于加法:5 * 2 先形成子树,再与 3 相加。 应用阶段:AST的实际使用完成AST构建后,可支持多种场景: 4.1 代码执行(解释器) 遍历AST节点计算结果: 先递归计算乘法子树 5 * 2 = 10 再计算根节点 3 + 10 = 13 工具链中的AST编译器:Clang(C/C++)、Roslyn(C#)等工具依赖AST生成机器码。 代码格式化工具:Prettier(JavaScript)通过AST调整缩进和换行。 通过抽象语法,计算机能够以统一的方式处理不同编程语言的逻辑,同时为开发者提供代码分析、重构和调试的底层支持。

    1.8K10编辑于 2025-05-12
  • 来自专栏10km的专栏

    jsqlparser:基于抽象语法(AST)遍历SQL语句的语法元素

    person.group_id = group.id WHERE person.birthdate > '1980-01-01' 在MySQL中执行没有任何问题,但是如果用phoenix在HBase数据库中执行,语法是过不去的 jsqlparser解析一个SQL语句后会生成一个抽象语法(AST-- Abstract Syntax Tree)对象SimpleNode,并提供了用于遍历AST的接口CCJSqlParserVisitor ,应用层只要实现这个接口我们就可以通过接口方法得到想要的SQL语法元素节点对象,比如Column,Table。 以下就以为字段名和表名加双引号为例,说明如何用CCJSqlParserVisitor来遍历所有AST节点 @Test public void test10ParseVisitor() throws CCJSqlParserUtil.newParser(sql); /** 解析SQL语句 */ Statement stmt = parser.Statement(); /** 使用 LogVisiter对象遍历AST

    3.1K30编辑于 2022-11-06
  • 来自专栏人人都是架构师

    Go每日一库之125:ast(抽象语法

    所有的AST节点都实现了ast.Node接口,它只是返回AST中的一个位置。 另外,还有3个主要接口实现了ast.Node。 ast.Expr - 代表表达式和类型的节点 ast.Stmt - 代表报表节点 ast.Decl - 代表声明节点 从定义中你可以看到,每个Node都满足了ast.Node的接口。 ("Hello, World") } ` ast.File 第一个要访问的节点是*ast.File,它是所有AST节点的根。 ast.ExprStmt *ast.ExprStmt { . X: *ast.CallExpr {/* Omission */} } ast.ExprStmt在语句列表中表示一个表达式,它实现了ast.Stmt接口,并包含一个ast.Expr。

    1.6K30编辑于 2023-09-30
  • 来自专栏JavaScript代码安全

    safekodo在线将AST语法编译为js代码

    AST 抽象语法(Abstract Syntax Tree)也称为AST语法,指的是源代码语法所对应的树状结构。 也就是说,对于一种具体编程语言下的源代码,通过构建语法的形式将源代码中的语句映射到中的每一个节点上。 在使用JavaScript开发过程中,虽然并不会直接与AST直接打交道,但许多打包相关的插件都会涉及到它,例如使用bable对代码进行转换,ts类型检查,语法高亮,使用UglifyJS来压缩代码,使用www.safekodo.com 所有的上述工具,不管怎样,都建立在了AST这个巨人的肩膀上。等,实际这背后就是在对JavaScript的抽象语法进行操作。 在线 JS转AST语法 在线转换JS=>AST下面利用safekodo提供的网页版ast解析器解析演示原程序console.log("www.safekodo.com  在线JavaScript代码转

    4.6K11编辑于 2022-08-20
  • 来自专栏原创

    教你如何用AST语法对代码“动手脚”

    今天就与大家分享——如何通过用AST语法改写Java代码。 先抛一个问题:如何将图一代码改写为图二? 若通过AST语法,可以很好地解决此问题。 AST(Abstract syntax tree)即为“抽象语法”,简称语法,指代码在计算机内存的一种树状数据结构,便于计算机理解和阅读。 ? 众所周知,Java 编译流程(上图)中也有对AST语法的提取处理,那是否可以在此环节操作语法呢?由于编译链代码栈太深,鲜有对外的接口和文档,使得其可操作性不强。 个推log-rewrite项目改写日志,就是用AST语法进行的,流程图如下图所示。 ?

    3.1K60发布于 2018-03-21
  • 来自专栏前端迷

    手把手教你写一个 AST 抽象语法

    如何解析成 AST ? 目标 本次目标,一步一步将如下 HTML 结构文档转换成 AST 抽象语法 <div class="classAttr" data-type="dataType" data-id="dataId" style 其中转换后的 AST 结构 有哪些属性,需要怎样的形式显示,都可以根据需要自己定义即可。 到此,一个简单的 AST 解析器已经完成了。 当然,本文是实现一个简单的 AST 解析器,基本主逻辑已经包含,完整版参考如下: 完整解析参考:vue-html-parse[1] 本文的 AST 解析器的完整代码如下: easy-ast[2] 参考资料

    2.8K11发布于 2019-10-22
  • 来自专栏记录和分享

    基于抽象语法AST和git webhook的代码即文档方案

    本文介绍一种通过对代码的抽象语法AST解析,来从代码本身获取接口的定义从而渲染出接口文档;再配合git的分支管理和webhook来实现随着代码的变更更新文档及按照git的分支维护历史版本的文档,并订阅文档的变化 二、通过抽象语法AST解析代码获取接口定义 本节以java代码为例介绍解析AST的核心原理,如下图所示。 如上图所示,对于写好的原始java代码,从其对应的AST中获取包名+类名+字段名组合的同项目内全局唯一的标识,附加业务信息(如类型、注解、注释等)记录到数据库。 开发人员提交代码后,文档平台获取到变更的文件,通过获取代码文件的AST更新数据库中的记录,即实现了接口文档的及时更新。具体流程如下: 四、扩展 基于获取到的文档元数据,还可进行如下扩展。

    87340编辑于 2022-12-04
  • 来自专栏Python和安全那些事

    15.Powershell恶意代码检测论文总结及抽象语法AST)提取

    基于此,提出一种结合传统程序分析(抽象语法)和深度学习混合得方法,下图展示了基本步骤: 学习PowerShell AST节点向量 按照家族类型对恶意脚本进行分类 探索嵌入式程序向量表示 评价:提出一种基于语法的 ---- 二.抽象语法之deobshell 前面的论文提到抽象语法,它能将Powershell抽象成树状结构,常见方法是使用接口或编写自定义程序实现,下面介绍其中一种方法。希望对大家有所帮助。 DeobShell 是使用 Python 中的抽象语法 (AST) 操作对 Powershell 进行反混淆的 PoC。 python main.py deob -i test001.deob.ps1 它会首先生成抽象语法AST,然后执行反混淆操作。 +DNN CCS18) 8.PSDEM(反混淆 ISCC18) 9.PowerDrive(动静态反混淆 DIMVA19) 三.抽象语法之deobshell 四.AST抽取实例操作 1.环境部署 2.AST

    2.1K30编辑于 2022-03-30
  • 来自专栏韩曙亮的移动开发专栏

    【Groovy】编译时元编程 ( 利用注解进行 AST 语法转换 | 定义注解并使用 GroovyASTTransformationClass 注明 AST 转换接口 | AST 转换接口实现 )

    文章目录 一、利用注解进行 AST 语法转换 1、定义注解并使用 GroovyASTTransformationClass 注明 AST 转换接口 2、AST 转换接口实现 3、定义 Groovy 类并使用 @Compile 注解修饰需要拦截的方法 4、执行结果 一、利用注解进行 AST 语法转换 ---- 1、定义注解并使用 GroovyASTTransformationClass 注明 AST ElementType.METHOD) 表示该注解作用于方法上 , @GroovyASTTransformationClass("MyASTTransformation") 表示该注解修饰的节点对应的 AST import org.codehaus.groovy.ast.builder.AstBuilder import org.codehaus.groovy.ast.stmt.BlockStatement 抽象语法树节点 , 是 ASTNode 数组类型 * @param source 源单元 , 可以通过该对象拿到源文件 */ @Override void visit

    80020编辑于 2023-03-30
  • 来自专栏oeasy教您玩转linux、python

    python0135_python_语义分析_ast_抽象语法_abstract_syntax_tree

    语义分析_抽象语法_反汇编 回忆 上次回顾了一下历史 python 是如何从无到有的 看到 Guido 长期的坚持和努力 ​ python究竟是如何理解 print("hello")的? 组词 词分析出来就是怎么组词的问题 哪些词和哪些词先组合 哪些词和哪些词后组合 生成一棵抽象语法 AST(Abstract Syntax Tree) 我能看看这棵ast么? 然后和第3个结合 结合序 如果把 第一个* 改成 + 号 其他什么也没加 表达式是1 + 2 * 3 后两个会先结合 得到的结果 作为下一个运算的 右操作数 然后再和1 进行 加法运算 有了 语法 这棵语法 我们能看懂 但是cpu 需要的是 能执行的 一条条字节码指令 翻译成 字节码 要把源程序 翻译成字节码 才能执行 字节码 对应着cpu的指令 怎么把ast 转化为字节码(指令 总结 这次把py源文件 词法分析 得到 词流(token stream) 语法分析 得到 抽象语法(Abstract Syntax Tree) 这里确立了优先级 编译 得到 字节码 (bytecode

    55410编辑于 2023-04-16
  • 来自专栏Spider篇

    Web Spider Babel安装 & Ast抽象语法 - 基本使用

    文章目录 一、资源地址 二、遍历 2.1 树结构遍历模式 2.2 案例 三、下载安装 四、案例操作 总结 ---- 提示:以下是本篇文章正文内容,下面案例可供参考 一、资源地址 Ast反混淆语法在线网址 中文文档:https://github.com/jamiebuilds/babel-handbook/blob/master/translations/zh-Hans/README.md js逆向-ast 3、read.js 代码内容; var a = 1; var b = 2; 4、案例代码; /* * 安装 npm install @babel/core * */ // 引入 将JS源码转换成语法 = require("@babel/traverse").default; // 操作节点,比如判断节点类型,生成新的节点等 var t = require("@babel/types"); // 将语法转换为源代码 , traverses); // 传入一个ast对象,遍历对象类型操作的function var result_code = generator(ast); // 生成对象修改后的代码; // debugger

    77930编辑于 2023-03-01
  • 来自专栏全栈前端精选

    这样入门 js 抽象语法(AST),从此我来到了一个新世界

    这时候我想到了抽象语法(AST)。 不严谨的语言描述就是,eslint 将当前的 js 代码解析成了一个抽象语法,在这棵树上做了一些修整,比如剪掉一条树枝,就是去除代码中多出的空格 space ;比如修整了一条树枝,就是 var 转换为 这个中的每条“枝”都代表了 js 代码中的某个字段的描述对象,比如以下简单的代码: const a = 1; 我们先自己定制一套简单的转换为 AST 语法规则,可以这样表示上面这行代码: { "type": "Literal", "value": 1, "raw": "1" } } ] } 是的,这就是一颗简易的抽象语法了 ,就这么简单,它只是一种特殊的对象结构来表示我们的 js 代码而已,如果我们有一个手段,能拿到表示 1 这个值的节点,并将 init.value 改为 2 ,再将该语法转换为 js 源码,那就能得到

    2.4K21发布于 2021-05-07
  • 来自专栏全栈前端精选

    AST抽象语法——最基础的javascript重点知识,99%的人根本不了解

    抽象语法AST),是一个非常基础而重要的知识点,但国内的文档却几乎一片空白。 AST的能力十分强大,且能帮你真正吃透javascript的语言精髓。 事实上,在javascript世界中,你可以认为抽象语法(AST)是最底层。再往下,就是关于转换和编译的“黑魔法”领域了。 通过抽象语法解析,我们可以像童年时拆解玩具一样,透视Javascript这台机器的运转,并且重新按着你的意愿来组装。 抽象语法(Abstract Syntax Tree),的确是一种标准的树结构。 请查看 AST对象文档 送给你的AST螺丝刀:recast 输入命令: npm i recast -S 你即可获得一把操纵语法的螺丝刀 接下来,你可以在任意js文件下操纵这把螺丝刀,我们新建一个parse.js

    2.6K42发布于 2019-09-29
  • 深入解析Hive SQL转MapReduce的编译原理:从AST抽象语法到Operator执行树

    这种转换不是简单的语法映射,而是涉及复杂的逻辑重构过程。编译器首先将SQL文本解析为抽象语法AST),通过语义分析验证表结构和字段有效性,然后转换为由操作符(Operator)构成的逻辑执行计划。 在这一阶段,SQL字符串被转换为结构化的抽象语法AST),这是整个编译流程的第一个重要中间表示形式。Antlr会检查SQL语句的语法正确性,包括关键字使用、表名和字段名的合法性等基础语法要素。 AST抽象语法的构建与解析 在Hive SQL转换为MapReduce任务的编译过程中,AST(Abstract Syntax Tree,抽象语法)的构建与解析是至关重要的第一步。 解析器会将SQL文本转换为初始的AST(抽象语法)。在这个阶段,AST主要反映SQL的语法结构,不考虑语义正确性。 最新研究显示,通过改造AST生成机制,将流式处理语义融入语法构建阶段,可以实现微批处理的编译优化。

    45010编辑于 2025-08-27
  • 来自专栏花落的技术专栏

    抽象语法

    • {{item}}
    转换成抽象 children: [ ... ] } ] } ] } 抽象语法和虚拟节点区别 aabaabccaabaabccaabaabccaabaabccaabaabccaabaabccaabaabccaabaabccaabaabccaabaabccaabaabccaabaabcc 手写 AST 抽象 思路就和上面4的解法差不多。

    2.8K20编辑于 2021-12-06
  • 来自专栏花落的技术专栏

    抽象语法

    #Xcode 自定义工程中的头文件信息### 1. 创建名称为IDETemplateMacros.plist 的plist 文件.

    48340编辑于 2021-12-06
  • 来自专栏韩曙亮的移动开发专栏

    【Groovy】编译时元编程 ( AST 语法分析 | ClassNode 根节点 | 方法 Methods 节点 | 字段 Fields 节点 | 属性 Properties 节点 )

    文章目录 一、AST 语法分析 一、AST 语法分析 ---- 在上一篇博客 【Groovy】编译时元编程 ( 编译时元编程引入 | 声明需要编译时处理的类 | 分析 Groovy 类的 AST 语法 GroovyConsole 工具分析了 class Student{ def name def hello(){ println "hello" } } 类的 AST 语法 , 下面分析该语法 ; 展开 AST 语法后的效果 : 在最顶层的根节点是 ClassNode 节点 , 在根节点下 , 有 方法 Methods 节点 , 字段 Fields println "hello" } 方法 ; 字段 Fields 节点 和 属性 Properties 节点 各一个 , 就是自定义的 name 字段 , 对应 def name 成员 ; 拿到了 AST 语法之后 , 就可以获取到 Student 类的每一个节点 , 类 , 方法 , 属性 , 字段 ;

    1.2K20编辑于 2023-03-30
  • 领券