答案:
(5) <表达式>
=><表达式>+<项>
=><表达式>+<因子>
=><表达式>+(<表达式>)
=><表达式>+(<表达式>+<项>)
=><表达式>+(<表达式>+<因子>)
=><表达式>+(<表达式>+i)
=><表达式>+(<项>+i)
=><表达式>+(<因子>+i)
=><表达式>+(i+i)
=><项>+(i+i)
=><因子>+(i+i)
=>i+(i+i)
(6) <表达式>
=><表达式>+<项>
=><表达式>+<项>*<因子>
=><表达式>+<项>*i
=><表达式>+<因子>*i
=><表达式>+i*i
=><项>+i*i
=><因子>+i*i
=>i+i*i
<表达式>
<表达式> + <项> <因子> <表达式>
<表达式> + <项> <因子> i <项> <因子> i <项> <因子> i ( )
<表达式>
<表达式> + <项> <项> * <因子> <因子> i <项> <因子> i i
第 7 题
证明下述文法 G[〈表达式〉]是二义的。
〈表达式〉∷=a|(〈表达式〉)|〈表达式〉〈运算符〉〈表达式〉
〈运算符〉∷=+|-|*|/
答案:
可为句子 a+a*a 构造两个不同的最右推导: 最右推导 1 〈表达式〉 〈表达式〉〈运算符〉〈表达式〉 〈表达式〉〈运算符〉a 〈表达式〉* a 〈表达式〉〈运算符〉〈表达式〉* a 〈表达式〉〈运算符〉a * a 〈表达式〉+ a * a a + a * a
最右推导 2 〈表达式〉 〈表达式〉〈运算符〉〈表达式〉 〈表达式〉〈运算符〉〈表达式〉〈运算符〉〈表达式〉 〈表达式〉〈运算符〉〈表达式〉〈运算符〉 a 〈表达式〉〈运算符〉〈表达式〉 * a 〈表达式〉〈运算符〉a * a 〈表达式〉+ a * a a + a * a
第 8 题
文法 G[S]为:
S→Ac|aB
A→ab
B→bc
该文法是否为二义的?为什么?
答案:
对于串 abc
(1)S=>Ac=>abc (2)S=>aB=>abc
即存在两不同的最右推导。所以,该文法是二义的。
或者:
对输入字符串 abc,能构造两棵不同的语法树,所以它是二义的。

