首页 > 编程知识 正文

文法二义性

时间:2023-05-05 15:19:25 阅读:187063 作者:4036

2.5.2语法二义性设置语法G [ E ]:

ee|e * e|(e )| i语句I * I有两种不同的最左推导,对应两种不同的语法树。 参见图2.6和图2.7。

最左导出1

eeee*eI*eeI*I*IeI*II )最左推导2

e*eI*eI*eeI*IeI*II*II图2.6最左边引导1的语法树

图2.7从最左边推导2的语法树

图2.6的语法树先进行乘法运算,图2.7的语法树先进行加法运算,到底要进行什么样的运算呢? 这里出现的这种现象被称为语法的二义性。

如果一个文法存在某个句子对应两棵不同的语法树,则说这个文法是二义性的若一个文法中存在某个句子,它有两个不同的最左(最右)推导,则这个文法是二义性的

上述语法G [ E ]是二义语法。

很明显,二义语法会给编译器的执行带来问题。 对于二义语法的句子,编译器对其结构进行语法分析会产生两种以上不同的理解。 语法结构上的不确定性会导致语义处理上的不确定性。 例如,在上述例子中,编译器分析语句i * i i时,是用图2.6进行分析,还是用图2.7进行分析? 为了使编译器对每个句子的分析都是唯一的,记述语言的语法最好没有二义性。 当然,关于二义语法,请参阅文法的等价性来消除文法的二义性

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。