【小白打造编译器系列4】确保表达式正确的优先级、左递归和结合性

语法规则的书写

通过前面的学习,我们已经知道语法规则是使用 上下文无关文法 来表示的。而 上下文无关文法 是由一组 替换规则(又叫产生式)组成的。具体看看下面的形式:

add -> mul | add + mul
mul -> pri | mul * pri
pri -> Id | Num | (add) 
  • add -> mul | add + mul :加法表达式add可以替换成一个 乘法表达式mul ,或者替换成一个 加法表达式add 加上一个 乘法表达式mul。
  • mul -> pri | mul * pri : 乘法表达式mul 可以替换成一个 基础表达式pri  ,或者替换成一个 乘法表达式mul 乘上一个 基础表达式pri。
  • pri -> Id | Num | (add) :基础表达式pri 可以替换成一个 数字字面量Num,或者一个 变量 Id,或者一个 括号带上加法表达式(add)。

对于 “2+3*5”,算术表达式的推导过程为例:

通过上图的推导过程,我们可以清楚地看到这两个表达式是怎样生成的。而分析过程中形成的这棵树,其实就是 AST。我们通过观察发现,上图中的的叶子节点都是一个一个 Token,如 “*”“+”,还有 Num数字字面量。这些叶子节点称为 终结符,而那些非叶子节点称为 非终结符,因为它还可以继续往下替换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

见见大魔王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值