📄 a_5.3.htm
字号:
<html>
<head>
<title>5.3的解答</title>
</head>
<body background="../../images/background.gif">
<center><font class="title2"><b>练习5.3</b></font></center><br>
<p>解答:</p>
<p>设置下面的函数和属性:</p>
<p>expr<sub>1</sub>||expr2:把表达式expr2拼写在表达式expr1后面。</p>
<p>deletp(expr):去掉表达式expr左端的‘(’和右端的‘)’。</p>
<p>E.expr,T.expr,F.expr:属性变量,分别表示E,T,F的表达式。</p>
<p>E.add,T.add,F.add,属性变量,若为true,则表示其表达式中外层有‘+’号,否则无‘+’号。</p>
<p>E.pmark,T.pmark,F.pmark,属性变量,若为true,表示E,T,F的表达式中左端为‘(’,右端是‘)’。</p>
<p>语法制导定义如下:</p>
<table align = center border = 1 width = "80%" cellspacing="0" cellpadding="5">
<tr>
<td width = "30%"><div align = center>产生式</div></td>
<td width = "70%"><div align = center>语义规则</div></td>
</tr>
<tr>
<td align=center>
E -> E<sub>1</sub> +T
</td>
<td >
if(T.pmark==true)
<p> THEN E.expr=E<sub>1</sub>.expr||'+'||deletep(T.expr)</p>
<p> ELSE E.expr:=E<sub>1</sub>.expr||'+'||T.expr;</p>
<p>E.add:=true;</p>
<p>E.pmark:=false;</p>
</td>
</tr>
<tr>
<td align=center >
E -> T
</td>
<td>
if(T.pmark==true)
<p> THEN E.expr:=deletep(T.expr)</p>
<p> ELSE E.expr:=T.expr;</p>
<p>E.add:=T.add;</p>
<p>E.pmark:=false;
</td>
</tr>
<tr>
<td align=center>
T -> T<sub>1</sub>*F
</td>
<td>
T.expr:=T<sub>1</sub>.expr||'*'||F.expr;
<p>T.add:=false;</p>
<p>T.pmark:=false;</p>
</td>
</tr>
<tr>
<td align=center>
T -> F
</td>
<td>
T.expr:=F.expr;
<p>T.add:=F.add;</p>
<p>T.pmark:=F.pmark;
</td>
</tr>
<tr>
<td align=center>
F -> (E)
</td>
<td>
if(E.add==false)
<p> THEN BEGIN</p>
<p> F.expr:=E.expr;</p>
<p> F.add:=false;</p>
<p> F.pmark:=false;</p>
<p> END</p>
<p> ELSE BEGIN</p>
<p> F.expr:='('||E.expr||')';</p>
<p> F.add:=true;</p>
<p> F.pmark:=true;</p>
<p> END;
</td>
</tr>
<tr>
<td align=center>
F -> id
</td>
<td >
F.expr:=id.lexval;
<p>F.add:=false;</p>
<p>F.pmark:=false;
</td>
</tr>
</table>
</body>
<html><script language="JavaScript">
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -