什么是运算符优先级解析?
运算符优先级解析也是一种自下而上的解析,可用于一类称为运算符语法的语法。
如果语法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。
运算符优先关系
这对终端之间存在三种优先关系。
根据这些优先关系,我们可以决定首先执行或解析哪些操作。
关联和优先规则
如果运算符具有不同的优先级
因为*的优先级高于+
示例-
在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
解决方案
运算符优先关系
运算符优先级解析的优点
可以访问执行。
运算符优先级解析的缺点
像减号一样的运算符可以是一元或二元的。所以,这个运算符在不同的语句中可以有不同的优先级。
运算符优先级解析仅适用于一小部分语法。