📄 a_5.11.htm
字号:
<html>
<head>
<title>5.11的解答</title>
</head>
<body background="../../images/background.gif">
<center><font class="title2"><b>练习5.11</b></font></center><br>
<p>解答:</p>
<p>(a) 假设基础文法含左递归的翻译模式如下:</p>
<p> A
-> {A<sub>1</sub>.i:=A.i}</p>
<p>
A<sub>1</sub> {Y.i:=A.i}</p>
<p>
Y {A.a:=g(A<sub>1</sub>.a,Y.y)}</p>
<p> A
-> {X.i:=A.i}</p>
<p>
X {A.a:=f(X.x)}</p>
<p> 消除基础文法左递归后的翻译模式如下: </p>
<p> A
-> {X.i:=A.i}</p>
<p>
X {R.i:=f(X.x); R.yi:=A.i}</p>
<p>
R {A.a:=R.s}</p>
<p> R
-> {Y.i:=R.yi}</p>
<p>
Y {R<sub>1</sub>.i:=g(R.i,Y.y); R<sub>1</sub>.yi:=R.yi}</p>
<p>
R<sub>1</sub> {R.s:=R<sub>1</sub>.s}</p>
<p> R
-> ε {R.s:=R.i}</p>
<p> 属性R.yi用于传递A.i给Y。</p>
<p>(b) 设基础文法含左递归的翻译模式如下:</p>
<p> A->
{A<sub>1</sub>.i:=h<sub>1</sub>(A.i)}</p>
<p>
A<sub>1</sub> {y.i:=h<sub>2</sub>(A.i)}</p>
<p>
Y {A.a:=g(A<sub>1</sub>.a,Y.y)}</p>
<p> A -> {X.i:=h<sub>3</sub>(A.i)}</p>
<p>
X {A.a:=f(X.x)}</p>
<p> 考虑XY<sub>1</sub>Y<sub>2</sub>Y<sub>1</sub>,其继承属性的计算如下:</p>
<p align=center><img src="a_5.11_a.gif" width="453" height="268" ></p>
<p> 消除基础文法中的左递归后,基础文法为:</p>
<p> A -> XR</p>
<p> R -> YR
| ε</p>
<p> 继承属性的计算如下图所示:<sub> </sub></p>
<p align=center><img src="a_5.11_b.gif" width="501" height="315"></p>
<p> 当识别出X后,并不能计算出X的继承属性,因而,也就无法计算有关X的其他属性。只好把X的源表示或中间表示作为继承传给R,继续沿R传下去,然后再作为综合属性传回来。直到能计算出X.i,再对X的成分进行翻译。Y1,Y2,Y3的翻译思想和X类似,具体的翻译模式省略。</p>
<p> </p>
</body>
<html><script language="JavaScript">
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -