视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
编译原理第8章作业及习题参
2025-09-24 00:05:16 责编:小OO
文档
第八章  语法制导翻译和中间代码生成

1.给出下面表达式的逆波兰表示(后缀式):

(1) a*(-b+c) 

(4) (A∧B) ∨(C ∨ D)

(7) if(x+y)*z=0 then s∶=(a+b)*c else s∶=a*b*c

解(1) ab-c+* 

  (4) AB∧CD∨∨

(7) xy+z*0=sab+c*:=sab*c*:=¥(注:¥表示if-then-else运算)

2. 请将表达式-(a+b)*(c+d)-(a+b+c)分别表示成三元式、间接三元式和四元式序列。

答案:三元式 

  (1) (+ a, b) 

  (2) (+ c, d) 

  (3) (* (1), (2)) 

  (4) (- (3), /)

  (5) (+ a, b)

(6) (+,(5),c)

(7) (- (4), (6))

  间接三元式

  间接三元式序列   间接码表

  (1) (+ a, b)    (1)

  (2) (+ c, d)    (2) 

  (3) (* (1), (2))  (3) 

  (4) (- (3), /)    (4)

  (5) (- (4), (1))  (1) 

(6) (- (4), (5))  (5)

(6)

  四元式

  (1) (+, a, b, t1)

  (2) (+, c, d, t2)

  (3) (*, t1, t2, t3) 

  (4) (-, t3, /, t4) 

(5) (+, a, b, t5)

(6) (+, t5, c, t6)

  (6) (-, t4, t6, t7)

3. 采用语法制导翻译思想,表达式E的"值"的描述如下:

  产生式      语义动作

  (0) S′→E    {print E.VAL} 

  (1) E→E1+E2    {E.VAL∶=E1.VAL+E2.VAL} 

  (2) E→E1*E2    {E.VAL∶=E1.VAL*E2.VAL}

  (3) E→(E1)    {E.VAL∶=E1.VAL} 

  (4) E→n      {E.VAL∶=n.LEXVAL}

如果采用LR分析法,给出表达式(5 * 4 + 8) * 2的语法树并在各结点注明语义值VAL。

4. 假如习题3中表达式E的“值”有两种类型:整型和实型。语义处理增加"类型匹配检查",请给出相应的语义描述。

解:

  (0) S′→E { if error≠1 then print E.VAL} 

  (1) E→E1+E2 { if E1.TYPE=int AND E2.TYPE=int then

           begin

            E.VAL:=E1.VAL + E2.VAL;

            E.YTPE:=int;

           end 

         else if E1.TYPE=real AND E2.TYPE=real then 

             begin 

              E.VAL:=E1.VAL + E2.VAL;

              E.YTPE:=real; 

             end 

           else error=1 

         } 

  (2) E→E1*E2 { if E1.TYPE=int AND E2.TYPE=int then 

           begin

            E.VAL:=E1.VAL * E2.VAL;; 

            E.YTPE:=int; 

           end 

         else if E1.TYPE=real AND E2.TYPE=real then

            begin

             E.VAL:=E1.VAL * E2.VAL;; 

             E.YTPE:=real;

            end 

           else error=1

         } 

  (3) E→(E1) { E.VAL:=E1.VAL; 

        E.TYPE:=E1.TYPE } 

  (4) E→n { E.VAL:=n.LEXVAL;

        E.TYPE:=n.LEXTYPE }

5. 令综合属性 val 给出在下面的文法中的 S 产生的二进制数的值 ( 如,对于输入 101.101 ,则S.val=5.625)。

S -> L.L | L

L -> LB | B

B -> 0 | 1

解1:提示画出对应于输入101.101的语法树,然后设置相应的属性进行语义规则的创立。

产生式 语义规则 
S ->L 1.L2
S->L S.val:=L.val 
L -> L1B L.val:=L1.val*2+B.val L.length:=L1.length+1 
L -> B L.val:=B.val 

L.length:=1 

B -> 0 

B.val:=0 
B -> 1 

B.val:=1 

解2:

产生式语义规则
          S -> L S.val:=L.val; 
          S -> L1.L2 

S.val:=L1.val+L2.val*L2.p; 

          L -> B L.val:=B.val;    L.p:=2-1; 

          L -> L1B 

L.val:=L1.val*2+B.val; 

L.p:=L.p*2-1;

          B -> 0 B.val:=0; 
          B -> 1 B.val:=1; 

下载本文
显示全文
专题