阅读 258

运算符优先级的定义解析?

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

如果语法 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 <. 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           $ <. idid . > θ            id . > $id . >)
(<. id.


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


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


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

E → E + E | E ∗ E/id

解决方案

运算符优先关系


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

运算符优先级解析的优点

  • 可以访问执行。

运算符优先级解析的缺点

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

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


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐