首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【编译技术】:AST——基础基础

在计算机科学中,抽象语法树(abstract syntax tree 或者缩写为 *AST*),或者语法树(*syntax tree*),是源代码抽象语法结构树状表现形式,这里特指编程语言源代码。...树上每个节点都表示源代码中一种结构。之所以说语法是「抽象」,是因为这里语法并不会表示出真实语法中出现每个细节。 例如: var a = 3; a + 5 AST: 2....AST 用途有很多: 代码转换(例:Babel) 语法检查(例:JSLint)、风格检查(例:JSHint); IDE 错误提示、格式化、高亮、自动补全等(例:IDEA、WebStorm); 混淆、优化...、压缩、打包(例:Webpack、Rollup) 语言扩展(例:TypeScript、JSX、CoffeeScript) CSS 预处理器 ...等等 这些工具都建立在 AST 基础之上。...代码生成(Code Generation):根据转换后 AST, 生成代码。 4. 有哪些主流 AST 工具?

1.9K52
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    AST实现简易中文编程

    中文编程是件很有意思事情,通过基于AST编译方法,可以让我们实现一种中文编程语言。比如,我们有如下中文语句: 如果一等于一,那么显示“成功”。 人有一双眼睛,我是人。...我名字是“否子戈”。我学号是141446。显示“我名字和学号分别是「我名字」、「我学号」”。显示我全部信息。如果我学号是偶数,那么显示我名字。...虽然上面的语句都是中文写作,但是你可以很明显发现,在一些行文上有一些生硬,实际上,它们是经过一定语法设计中文编程程序。 如果一等于一,那么显示“成功”。...而我们可以采用方式,就是基于AST编译器。想了解其中奥秘吗?收听下面的播客节目来一点一点扒开中文编程面纱吧。

    70610

    基于AST技术Taro框架升级方案

    5、基于AST实现自动升级方案原理解析 如下是一个源文件转换成AST,进行二次处理,最终又变成源代码文件过程。...我们以 app.tsx 举例,首先通过@babel/parser将源代码转成AST,然后通过@babel/parser遍历 AST 节点访问器。...针对上面2中区别我们封装了多个独立处理单元,每个处理单元功能都是原子化,负责具体某个功能转换,它由多个 AST 节点访问器组成。...6、项目总结及规划 基于 AST 升级方案相较于纯人工方案优势明显,沉淀命令行工具将来可贡献给 Taro 社区提供类似场景通用解决方案。...AST技术在业界使用广泛,小程序升级项目更多是进行代码变更等操作,我们团队对AST技术运用也在持续探索,最近在尝试使用AST对代码改动进行分析,获取函数、变量之间引用关系,最终得到一个代码改动对业务影响范围报告

    33410

    双十一家电市场,“机遇”与“投机”一半一半

    据相关机构资料显示,今年双十一家电品类依然独占鳌头,成为全网销售额最高行业,不过家电行业双十一真的像数据显示这么火热吗?...1 双十一难成家电行业救命稻草 今年“黑天鹅”对于家电行业影响,终于在三季度有所缓解,在没有了两位数以上跌幅后,家电市场正回归正轨,不少品牌也开始对“双十一”有了期待,从9、10月份开始,无论是家电巨头...家电行业市场竞争与市场需求正走向不同两端,即便是“双十一”这样年度大促活动,能真正从中获利也只有部分品牌。...“现在市场两极化很严重,大品牌越做越大,像我们不管什么时候考虑最多还是‘活下去’,行业整体不景气不是一次双十一就能改变。”另一位某家电品牌渠道推广告诉“智能相对论”。...除此之外,跟风、“追热点”也是一大趋势,像是今年家电领域核心关键词之一“健康”,在各类家电品类中都能找到身影,空调刮起“新风”、电饭煲“低糖”、洗衣机“灭菌”,乃至洗碗机、净水器等产品被“爆买

    9.4K10

    那些做了一半项目

    最近有一个项目做了一半不做了,准确地说是由于某些原因,项目需要别的团队来接手了,于是我想随便聊聊这个话题。...我猜想,“项目做一半撒手”,这应该是一个很常见现象,因为这样事情无论大厂小厂,在软件世界里不断上演。...具体来说,有这样几种典型情况: 业务变动、组织调整,工作重心变了,项目做了一半直接砍掉,或者无限期停工。这大概是最常见一种情形。...而项目要转交给其它团队,软件交接成本也相当可观。其实这没有什么奇怪,这是软件本质所决定。具体来说,软件开发,特别是上规模软件开发,就意味着大量 “隐性成本”。...因此我觉得这不是一个特别职业表达。 最后,回想起来,这种 “做了一半项目” 还真是挺常见。非常遗憾,可对于一个大型组织来说,回头是岸,及时止损,通常可不是坏事。

    39920

    asp.net与aspsession共享 及 asp请求拦截

    asp.net 与 asp session是无法直接共享(底层处理dll也不一样),要想互通session,只能用变通办法: 一、asp.net -> asp session传递 a) 建一个类似...SessionHanler.asp页面,代码如下: <!...三、拦截asp请求 对于现有的asp项目,在不修改其asp源代码前提下,如果需要对http请求加以拦截(例如:把拦截到请求参数做些处理,再转发到其它子系统。...HttpModule (环境:IIS7 /Asp.Net 4.0上 测试通过) 前提:Asp项目所用应用程序池必须采用"集成"模式 先建一个HttpModule using System; using...,必须加到 system.webServer节点下,否则只能拦截asp.net请求,对asp无效 最后赠送一个asp调试小技巧(自从asp.net出来以后,很多人估计象我一样,已经很久不碰asp,这些小技巧差不多忘记光了

    7.2K70

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

    jsqlparser是一个javaSQL语句解析器,基于它可以实现很多之前无法完成工作。 <!...因为phoenix中默认字段名,表名都是大写,如果指定小写字段和表名,需要加双引号. SELECT "person"."id","person"."name","group"."...jsqlparser解析一个SQL语句后会生成一个抽象语法树(AST-- Abstract Syntax Tree)对象SimpleNode,并提供了用于遍历AST接口CCJSqlParserVisitor...以下就以为字段名和表名加双引号为例,说明如何用CCJSqlParserVisitor来遍历所有AST节点 @Test public void test10ParseVisitor() throws...CCJSqlParserUtil.newParser(sql); /** 解析SQL语句 */ Statement stmt = parser.Statement(); /** 使用 LogVisiter对象遍历AST

    2.4K30

    手把手教你写几个实用AST插件

    背景 AST 是非常有用。 上午一直在搬砖,下午听了小组一个老哥做AST分享,觉得做很好。 为了加深印象,就写了篇总结,顺便分享给大家,希望能给朋友们一些帮助和启发。...可能小伙伴要问,AST真有这么厉害? 口说无凭, 且看几个具体案例。...所以将js转化为抽象语法树更利于程序分析。 AST 能做什么 代码语法检查 代码风格检查 代码格式化 代码高亮 代码错误提示 代码自动补全 等等。...AST 三板斧 生成AST 遍历和更新ASTAST重新生成源码 为了便于理解, 我们看一个具体例子。...对AST还不熟练同学, 希望这篇可以帮助到你。 后面还有会AST在我们实际项目中应用, 我也会写一个实战篇, 敬请期待! 以上。

    1.4K30

    「.vue文件编译」3. 模板编译之AST生成

    处理部分指令:v-for、v-if、v-once,将相应指令信息解析并存储到AST节点上 尝试获取v-for值,并存储到AST节点上 { alias: "item" for: "items" iterator1...从属性中解析出如下信息,并添加到AST节点上 { slotScope: 'slotProps', // 作用域插槽信息,接受来自内部数据 slotTargetDynamic: false...` ... ``` 静态属性 总结 主要流程是在simple-html-parse提供几个钩子上来创建AST节点,并建立父子关系构造AST。...另外更重要是从simple-html-parse解析属性中收集和信息再次解析,并将信息保存到AST节点上(在运行时显然是需要这些元数据来帮忙)。...参与到AST节点构造过程,并收集自己关心一些特性信息(:class、:style、v-model),暂不深入 ❎

    1.2K40

    年薪居然等于挤奶工一半

    突然发现,我年薪,居然等于挤奶工一半,默默擦拭了流下两行热泪。 同样月薪,我摸鼠标别人摸奶,可能这就是差距。...这两天和山东青岛朋友一起聊了聊,和他朋友圈接触了一下,多数都是年薪50万到100多万收入,很多都住在国内别墅里,而我才刚刚在省会城市买了套商品房,瞬间我就感觉未来路太长了。...在和朋友聊天过程当中,让我意识到了时间成本重要性。大家都知道我公开身份是一名前端技术人员,平时运营着一个叫「闰土大叔」公众号。...其实,我是不建议你们问在吗、有空吗等试探性问候方式,很多大佬时间都很宝贵(当然,我不是说自己是大佬),我建议有问题请直接说出你疑惑,先多介绍点自己个人情况,然后再讲讲目前所处困境,遇到瓶颈,...送书活动,也是一次回馈粉丝活动,感谢大家两年来对土哥支持和认同!土哥以后也会不定期搞送书活动,为大家争取更多福利,同时也希望大家在前端道路上,越走越远。

    62610

    借助AST ,手写一个解决运行环境差异loader

    所以还是借助AST语法树来进行操作,通过先将代码转化为AST语法树,然后我们按照要求对其进行增删改查,最后返回处理完成代码即可。...traverse 实现了访问者模式,对 AST 进行遍历,转换插件会通过它获取感兴趣AST节点,对节点继续操作,我们最主要操作就是通过该插件来进行实现 @babel/generator 将 AST...; }; 然后我们就来编写最核心转换流程,由于规则比较多,也为了更加适用,这里我们使用class来定义我们转换器 class ASTtrans { // 存储ast树   ast = null...是通过@babel/types导入方法,它能快速帮助我们生成对应节点,这里是使用它来生成了一个对象属性对应AST节点。...然后这里节点insertAfter方法意思是在当前节点同一级下,新增AST节点 处理完成之后,这里AST就是我们需要AST节点了,然后我们再将其转化为代码即可 最终代码 const { parse

    46930
    领券