给定如下文法G[E]:
(1)E→+ER
(2)E→-ER
(3) E→positive R
(4)R→*ER
(5)R→ε
如下是以G[E]为基础改造的一个L翻译模式:
(1) E→+ E{ R.i := 网页链接 } R{ 网页链接 := R.s }
(2)E→-E,{R.i:=ifE.sign=PthenNelseP}R{E.sign:=R.s}(3)E→positive{R.i:=P}R{E.sign:=R.s}
(4) R→*E{ R.i :=R.i} R, {R.s := if 网页链接 =Rr.s then P else N } (5) R→ε{R.s:=R.i}
其中,每个子表达式E的符号(即值大于零或小于零)记录在属性E.sign中 (属性值分别用P或N表示,其类型为枚举型SIGN = enum {P, N})。
(1)指出E、R和R,的属性类型:
(2)试针对该L翻译模式构造一个自上而下的递归下降(预测)翻译程序(注: 采用强制措施如下:如果下一输入符号为* (未到结束符#) 时,不使用E→ε, 而是使用R→*E R)。
(1)E→+ER
(2)E→-ER
(3) E→positive R
(4)R→*ER
(5)R→ε
如下是以G[E]为基础改造的一个L翻译模式:
(1) E→+ E{ R.i := 网页链接 } R{ 网页链接 := R.s }
(2)E→-E,{R.i:=ifE.sign=PthenNelseP}R{E.sign:=R.s}(3)E→positive{R.i:=P}R{E.sign:=R.s}
(4) R→*E{ R.i :=R.i} R, {R.s := if 网页链接 =Rr.s then P else N } (5) R→ε{R.s:=R.i}
其中,每个子表达式E的符号(即值大于零或小于零)记录在属性E.sign中 (属性值分别用P或N表示,其类型为枚举型SIGN = enum {P, N})。
(1)指出E、R和R,的属性类型:
(2)试针对该L翻译模式构造一个自上而下的递归下降(预测)翻译程序(注: 采用强制措施如下:如果下一输入符号为* (未到结束符#) 时,不使用E→ε, 而是使用R→*E R)。