抽象语法树概念认知

抽象语法树

概念:

抽象语法树(abstract syntax code,AST)是源代码抽象语法结构的树状表示,树上的每个节点都表示源代码中的一种结构,之所以说语法是’抽象’的,是因为这里的语法不会表示出真实语法中出现的每个细节。

在这里先补充一个概念:具象语法树(Concret Syntax Tree, 简称CST)。
什么是具象语法树呢?
我们知道一颗解析树是包含代码所有语法信息的树形结构,它是代码的直接翻译,所以解析树也被称为具象语法树。抽象语法树实际只是解析树的一个精简版。

避免混淆,我们来简化一下概念:

解析树 = CST = 具象语法树
抽象语法树 = AST

那么抽象语法树到底是什么样的呢?我们可以来看一个简单的例子:

我们来写一段最简单js代码 20 + (15 - 3)*2,没错,这是一个简单的四则运算表达式,那么它的抽象语法树应该表现为什么样呢,在看AST(抽象语法树)之前,我们先来看一下它的解析树:

在这里插入图片描述
但是我们看到这样的一颗解析树显然是有些冗余的,那么我们可不可以对这颗解析树去繁取简呢,当然是可以的:

在这里插入图片描述

这里我们得到了一棵最简洁的树,去除了冗余的描述和符号,很直观的就可以看出树上每一个阶段节点之间的关系,从而也更能容易的推断出原表达式的样子,此时我们所得到的这颗树就是我们最终要得到的 20 + (15 - 3)*2 表达式的抽象语法树。

这里只是简单的对抽象语法树概念的简单理解,当然还有从分析树到抽象语法树的具体的转化过程以及具体的表现形式,如果有需要请自行查阅相关资料。
上述文章或许有理解错误,请不吝赐教!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值