• 编译原理复习题


    答案由本人整理或来自互联网,不保证正确性,仅供参考

    第四章 语法制导翻译

    3.赋值语句的文法及语义动作描述如下:

    (1)A→:=E {gen (:=, E.place,_,entry(i));}

    (2)E→E1+E2 {E.place:=newtemp;gen(+, E1.place, E2.place, E.place);}

    (3)E→E1E2 {E.place:=newtemp; gen(, E1.place, E2.place, E.place);}

    (4)E→-E1 {E.place:=newtemp;gen(@,E1.place,_,E.place);}

    (5)E→E1 {E.place:=E1.place;}

    (6)E→i {E.place:=entry(i);}

    写出赋值语句X:=-B*(C+D)+A的自下而上的语法制导翻译过程。
    答案:

    输入 PLACE 四元式
    X:=-B*(C+D)+A
    :=-B*(C+D)+A i X
    -B*(C+D)+A i:= X_
    B*(C+D)+A i:=- X_ _
    *(C+D)+A i:=-i X_ _B
    *(C+D)+A i:=-E X_ _B (@,B,_,T1)
    *(C+D)+A i:=E X_ T1
    (C+D)+A i:=E* X_T1_
    C+D)+A i:=E*( X_T1_ _
    +D)+A i:=E*(i X_T1_ _C
    +D)+A i:=E*(E X_T1_ _C
    D)+A i:=E*(E+ X_T1_ _C _
    )+A i:=E*(E+i X_T1_ _C _D
    )+A i:=E*(E+E X_T1_ _C _D (+, C, D, T2)
    )+A i:=E*(E X_T1_ _T2
    +A i:=E*(E) X_T1_ _T2 _
    +A i:=E*E X_T1_T2 (*, T1, T2, T3)
    A i:=E+ X_T3_
    i:=E+i X_T3_A
    i:=E+E X_T3_A (+, T3, A, T4)
    i:=E X_T4
    X

    5.文法G的产生式如下:
    S→(L)|α
    L→L,S|S
    (1)试写出一个语法制导定义,它输出配对括号个数。

    (2)写一个翻译方案,打印每个a的嵌套深度。如((a), a),打印2,1
    答案:
    (1)试写出一个语法制导定义,它输出配对括号个数。
    产生式 ​ ​语义规则
    S->(L) ​ ​S.h:=L.h+1
    S->a ​ ​ S.h:=0
    L->L1,S ​ L.h:=L1.h+S.h
    L->S ​ ​ L.h:=S.h
    S'->S ​ ​ print(S.h)

    (2)写一个翻译方案,打印每个a的嵌套深度。如((a), a),打印2,1
    S'->{S.d:=0;} S
    S->({L.d:=S.d+1} L)
    S->a {print(S.d)}
    L->{L1.d:=L.d}L1,{S.d:=L.d}S
    L->{S.d:=L.d} S​


  • 相关阅读:
    java的sha1加密,转化为python版本
    VUE:页面跳转时传递参数,及参数获取
    如何使用 Django中的 get_queryset, get_context_data和 get_object 等方法
    django orm 外键id返回对应的名称
    spring boot(一):入门篇
    redis学习(四)——Hash数据类型
    redis学习(三)——List数据类型
    redis学习(二)——String数据类型
    Java多线程(七)——线程休眠
    MySQL和B树的那些事
  • 原文地址:https://www.cnblogs.com/Hatfield/p/12993788.html
走看看 - 开发者的网上家园