什么是运算符优先级解析?
运算符优先级解析也是一种自下而上的解析,可用于一类称为运算符语法的语法。
如果语法 G 具有以下属性,则它是运算符语法 -
生产不应在其右侧包含 ϵ。
生产的右侧不应有两个相邻的非终端。
Example1 - 验证以下语法是否是运算符语法。
E → EAE |(E)|id
A → +| - | *
解决方案
不,它不是运算符 Grammar,因为它不满足运算符 Grammar 的属性 2。
因为它在生产 E → EA E 的RHS 上包含两个相邻的非终结符。
我们可以通过将 A 的值代入 E → EA E 将其转换为算子语法。
E → E + E |E − E |E * E |(E) | ID。
运算符优先关系
这对终端之间存在三种优先关系。
关系 | 意义 |
---|---|
p <. q | p 的优先级低于 q。 |
p >. q | p 的优先级高于 q。 |
p =. q | p 的优先级与 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 $ <. idid . > θ id . > $
id . >)
(<. id.
$的优先级低于所有其他运算符和符号。
$ <. ( id . > $$ <. + ). > $
$ <.*
Example2 - 构建语法的优先关系表。
E → E + E | E ∗ E/id
解决方案
运算符优先关系
ID | + | * | $ | |
ID | .> | .> | .> | |
+ | <。 | .> | <。 | .> |
* | <。 | .> | .> | .> |
$ | <。 | <. | <。 |
运算符优先级解析的优点
可以访问执行。
运算符优先级解析的缺点
像减号一样的运算符可以是一元或二元的。所以,这个运算符在不同的语句中可以有不同的优先级。
运算符优先级解析仅适用于一小部分语法。
以上是 什么是运算符优先级解析? 的全部内容, 来源链接: utcz.com/z/345689.html