编译原理个人作业--第六章——基于 编译原理 国防工业出版社 第三版

文章介绍了如何使用属性文法构造抽象语法树来解析表达式,特别是涉及整型和实型加法运算的规则。同时,针对二进制数,文章提供了计算其值的属性文法。通过对文法规则的分解,定义了各个非终结符的属性,以确定表达式的类型和二进制数的值。

2

对表达式((a)+(b))

(1)

按照表6.4属性文法构造抽象语法树

(2)

按6.17翻译模式构造表达式抽象语法树

5(1)

下列文法对整型常数、实型常熟世家加法运算符
+生成表达式,当两个整型数相加,结果为整形,否则结果为实型

E→E+T∣TE\rightarrow E+T|TEE+TT
T→num,num∣numT\rightarrow num, num| numTnum,numnum

尝试给出确定每个子表达式结果类型的属性文法

E → E_1 + T     {if(E_1.Type == int) and (T.Type == int) 
                    then E.Type = int
                    else E.Type = real}
E → T           {E.type = T.type}
T → num, num    {T.type = real}
T → num         {T.type = int}

7

下列文法由开始符号S产生一个二进制数,令综合属性val给出该数的值
S→L.L∣LL→LB∣BB→0∣1 S\rightarrow L.L|L \\ L\rightarrow LB|B \\ B\rightarrow 0|1 SL.LLLLBBB0∣1
设计S.val的属性文法,其中已知B的综合属性c,给出由B产生的二进制结果值,如输入101.101,S.val = 5.625
其中第一个二进制位值位4,最后一个为0.125
S→L1.L2{S.val=L1.val+L2.val/2L2.len}S→L{S.val=L.val}L→L1B{L.val=2∗L1.val+B.cL.len=L1.len+1}L→B{L.val=B.cL.len=1}B→0{B.c=0}B→1{B.c=1} S\rightarrow L_1 . L_2\{S.val = L_1.val+L_2.val/2^{L_2.len}\}\\ S\rightarrow L\{S.val = L.val\}\\ L\rightarrow L_1B\{L.val = 2*L_1.val + B.c\quad L.len = L_1.len+1\}\\ L\rightarrow B\{L.val = B.c\quad L.len = 1\}\\ B\rightarrow 0\{B.c = 0\}\\ B\rightarrow 1\{B.c = 1\}\\ SL1.L2{S.val=L1.val+L2.val/2L2.len}SL{S.val=L.val}LL1B{L.val=2L1.val+B.cL.len=L1.len+1}LB{L.val=B.cL.len=1}B0{B.c=0}B1{B.c=1}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值