首页 文章资讯内容详情

什么是运算符优先级解析?

2026-06-02 1 花语

运算符优先级解析也是一种自下而上的解析,可用于一类称为运算符语法的语法。

如果语法G具有以下属性,则它是运算符语法-

生产不应在其右侧包含ϵ。

生产的右侧不应有两个相邻的非终端。

Example1-验证以下语法是否是运算符语法。

E→EAE|(E)|id

A→+|-|*

解决方案

不,它不是运算符Grammar,因为它不满足运算符Grammar的属性2。

因为它在生产E→EAE的RHS上包含两个相邻的非终结符。

我们可以通过将A的值代入E→EAE将其转换为算子语法。

E→E+E|E−E|E*E|(E)|ID。

运算符优先关系

这对终端之间存在三种优先关系。

关系 意义 p<.qp的优先级低于q。 p>.qp的优先级高于q。 p=.qp的优先级与q相同。

根据这些优先关系,我们可以决定首先执行或解析哪些操作。

关联和优先规则

如果运算符具有不同的优先级

因为*的优先级高于+

示例-

在a+b*c语句中

∴+<。*

在语句a*b+c

∴∗.>+

如果运算符具有相等优先级,则使用关联规则。

(a)例子减去;在语句a+b+c这里+运算符具有相同的优先级。

因为+在a+b+c中是左结合的

∴(a+b)将首先计算,然后将其添加到c。

即,(a+b)+c

+.>+

类似地,*在a*b*c中是左结合的

(b)示例-在a↑b↑c的语句中,↑是右结合运算符

∴会变成↑(b↑c)

∴(b↑c)将首先计算。

∴↑<.↑

标识符的优先级高于所有运算符和符号。

∴ θ <. id $ <. id id . > θ id . > $ id . >) (<. id.

$的优先级低于所有其他运算符和符号。

$ <. ( id . > $ $ <. + ). > $ $ <.*

Example2-构建语法的优先关系表。

E→E+E|E∗E/id

解决方案

运算符优先关系

ID+*$ID

.>.>.>+<。.><。.>*<。.>.>.>$<。<.<。

运算符优先级解析的优点

可以访问执行。

运算符优先级解析的缺点

像减号一样的运算符可以是一元或二元的。所以,这个运算符在不同的语句中可以有不同的优先级。

运算符优先级解析仅适用于一小部分语法。