什么是OPG?


OPG代表运算符优先级语法。具有后一种属性的语法被称为运算符优先级语法。它是一个ε-free运算符语法,其中优先级关系<., =. 和.>是不相交的,即,如果存在a . > b,则b .> a将不存在。

示例1 - 验证以下语法是否为运算符语法。

E → E A E |(E)|id

A → +| − | *

解决方案

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

因为它在产生式E → E A E的右侧包含两个相邻的非终结符。

我们可以通过替换A的值将其转换为运算符语法

E → E A E.

E → E + E |E − E |E ∗ E |(E) | id.

示例2 - 检查以下语法是否为OPG

E → E + E|E ∗ E|(E)|id

解决方案

将产生式E → E + E的右侧与α a A β进行比较

ΑAAβ
E+Eε

并且进一步,A → γ b $与E → E + E进行比较。

A →Γb$
E →E+E

因此,应用规则(2),我们得到a <.b,这意味着。

+ <. +……………………………………….(1)

将E → E + E与α A b β进行比较

ΑΑbβ
EE+E

并且进一步A → γ a $与E → E + E进行比较。

A →Γa$
E →E+E

因此,应用规则(3),我们得到a .> b,这意味着

+ . > +………………………………(2)

从关系(1),我们有+ <. +

从关系(2),我们有+ . > +

∴优先级关系是模棱两可的,并且不是唯一的。因此,给定的运算符语法不是OPG。

示例3 - 检查以下语法是否为OPG

E → E + T|T

T → T ∗ F|F

F → (E)|id

解决方案

将E + T与α a A β进行比较。

ΑaAβ
E+Tε

∴ a = +,A = T并且进一步比较A → γ b $与T → T * F

A →γb$
T →T*F

∴ b = *

因此,应用规则(2),我们得到a <.b,这意味着。

+ <. +……………………………………….(1)

在产生式E → E + T中替换E → T,我们得到

E → T + T

T + Tα A b β进行比较

ΑAbβ
ΕT+T

∴ b = +,A = T

进一步比较A → γ a $与T → T * F。

Α →γa$
Ε →T*F

因此,应用规则(3),我们得到a .> b,这意味着

+ . > +………………………………(2)

从关系(1),                                     我们有+ <. +

从关系(2),                                     我们有+ . > +

因此,这两种关系都表明乘法运算符(*)的优先级高于加法运算符(+)。

因此,不存在歧义。

因此,语法是OPG。

更新于: 2021年10月30日

417 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告