四、对下面的文法G:
S→a | b | (T) T→T,S | S
(1) 消去文法的左递归,得到等价的文法G2;
(2) 判断文法G2是否LL(1)文法,如果是,给出其预测分析表。(15) G2:
S→a | b | (T)
T→ ST’
T’→,S T’ | ε G2是LL(1)文法。 S T T’ a S→a b S→b ( ) , # S→(T) T→ ST’ T→ ST’ T→ ST’ T’→ ε T’→,S T’ 五、设有文法G[A]:
A→BCc | gDB
B→bCDE |ε C→DaB | ca D→dD |ε E→gAf | c
(1) 计算该文法的每一个非终结符的FIRST集和FOLLOW集; (2) 试判断该文法是否为LL(1)文法。(15) A B C D E FIRST A,b,c,d,g b A,c,d D C,g FOLLOW A,c,d C,d,g A,b,c,g 是LL(1)文法。
六、对表达式文法G:
E → E+T | T
T → T*F | F F → (E) | I
(1)造各非终结符的FIRSTVT和LASTVT集合; (2)构造文法的算符优先关系表。(15)
E T F
算符优先关系表 + * I ( ) # + > > > < > < * < > > < > < I < < < < ( < < < < ) > > > = > # > > > > = FIRSTVT *,+,(,i *,(,i (,i LASTVT *,+,),i *,),i ),i 七、有定义二进制整数的文法如下: L →LB | B B →0 | 1
构造一个翻译模式,计算该二进制数的值(十进制的值)。(15) 引入L、B的综合属性val,翻译模式为: S →L {print(L.val)}
L →L1B {L.val= L1.val*2+B.val} L →B {L.val= B.val} B →0 {B.val=0} B →1 {B.val=1}