属性文法如下

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
S’ → S print( S.n)
S → (L) S.n :=L.n+1
S → a S.n :=0
L → L1,S L.n :=L1.n+S.n L → S L.n :=S.n 符号串 (a,(a,a))的分析和
翻译, 见图
S’ print(S.n) ⑩ ⑨ S.n=2
⑧( L.n=1 )
L.n=0 ②
(1) 建立一个属性文法, 输出配对括号的个数, 例如符号串 (a,(a,a)) 将输出2;
(2) 构造一个翻译模式, 打印每个a的嵌套深度, 例如符号串 ((a),a) 将打印2, 1。
12
CH.6.练习题(补充题)
解 ( 1 ) . 设 综 合 属 性 S.n, L.n 计 配 对 括 号 的 个 数 , 属性文法如下:
整数部分的转换规则是:从最高位开始往低位, 开始时val:=最高位值; 以后val:=val*2+下一位 的值。
小数部分的转换规则是:从末位开始到十分位, 开始时val:=末位值; 以后val:=val/2+下一位值。
解法1 考虑结合自下而上的语法分析, 只使用 综合属性, 可以改写文法。
9
CH.6.练习题7(P164.)
解法2.二进制数串101.101的语法树及自下而上翻译 过程,归约时执行语义规则。
S.v= 5.625(=5+5/8)
L.v= 5 ; L.l=3 .
L.v=5; L.l=3
L.v=2 ; L.l=2 B.c=1 L.v=2; L.l=2
B.c=1
L.v= 1 ; L.l=1 B.c=0 1 L.v=1; L.l=1 B.c=0 1
L
Eval=58
n
Tval=58
* Fval=2
digitlexval=2
)
Tval=1
Fval=1
digitlexval=1
1
CH.6.练习题2(P164.)
2(1). 对表达式
((a)+(b)) 按照表6.4
E.nptr T.nptr
( E.nptr )
E.nptr
+
T.nptr
S→L1 . L2 S→L
S.val:=L1.val+L2.val /2L2.length S.val:=L.val
L→L1B L→B
L.val:=L1.val*2+B.c; L.length:=L1.length+1 L.val:=B.c; L.length:=1
B→0
B.c:=0
B→1
B.c:=1
(P146.)
T.nptr
( E.nptr )
所 示 的 属 ( E.nptr )
T.nptr
性文法, 构造该表
T.nptr
达 式 的 抽 id
id
+
象 语 法 树 。 id
id
to entry a
to entry b
2
CH.6.练习题5(P164.)
5.下列文法对整型常数和实型常数施用加法运算符+ 生成表达式; 当两个整型数相加时, 结果仍为整型数, 否则结果为实型数:
S→L . L | L S 表示可带小数点的二进制
数串
L→LB | B
L 表示二进制数串
B→0 | 1
B 表示二进制位
5
CH.6.练习题7(P164.)
解7: 题意是要求把二进制数串(可以带小数点) 翻译为等值的十进制数值。
用综合属性S.val, L.val, B.c表示S, L和B的十进 制值。
E→E1+T { if E1.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; }
E→E+T|T
T→num.num|num
(1) 给出确定每个子表达式结果类型的属性文法。
解: 设置综合属性E.typt,T.type表示E和T的结果 类型, 类型值分别用int和real表示整型和实型。
属性文法如下:
3
CH.6.练习题5(P164.)
解5. (1) 给出确定每个子表达式结果类型的属 性文法(翻译模式)。
CH.6.练习题1(P164.)
1.按照表6.1
( P137.) 所 示
的属性文法,
构造表达式
(4*7+1)*2的
附注语法树。
(
Eval=28
Tval=29 Fval=29 Eval=29
+
Tval=28
Tval=4
*
Fval=7
Fval=4
digitlexval=7
digitlexval=4
L → { S.d :=L.d } S
a {pt(S.d=2)}
6
CH.6.练习题7(P164.)
解法1. 属性文法,M表示小数部分的二进制数串:
S→L . M S.val:=L.val+M.val
S→L
S.val:=L.val
L→L1B L→B
L.val:=L1.val*2+B.c L.val:=B.c
B→0
B.c:=0
B→1
B.c:=1
M→AM1 M→A
M.val:=A.c+M1.val/2 M.val:=A.c
A→0
A.c:=0
A→1
A.c:=0.5
7
CH.6.练习题7(P164.)
解法1.二进制数串101.101的语法树及自下而 上翻译过程,归约时执行语义规则。
S.v= 5.625
L.v= 5 .
L.v=2
B.c=1
L.v= 1 B.c=0 1
L → , id L1 { L.type:=L1.type addtype(id.entry, L.type) }
L → :T
{ L.type:=T.type }
T → integer { T.type:=int }
T → real { T.type:=real }
11
CH.6.练习题(补充题)
设下列文法生成配对的圆括号: S → (L) S→a L→L,S L→ S
B.c=1
0
1
M.v= 0.625
A.c=0.5
M.v=0.25
1 A.c=0 M.v=0.5
0
A.c= 0.5
1 8
CH.6.练习题7(P164.)
解法2. 综合属性S.val, L.val, B.c表示S, L和B 的十进制值, 综合属性L.length计二进制数串 的位数, 用L2.val/2L2.length得到小数部分的十进 制值。属性文法:
S.n=0 ①
a
,
S.n=1

( L.n=0 ) ⑥
L.n=0 , S.n=0


S.n=0
a

a
13
CH.6属性S.d, L.d计a的嵌套深度, 遍
S’
符号串
((a),a)的
历到a结点时打印S.d值, {S.d=0} S
分析和翻
翻译模式如下:
译, 见图:
( {L.d=1} L )
B.c=1
0
B.c=1
0
1 1
10
CH.6.练习题11(P165.)
11. 设下列文法生成变量的类型说明:
(1) 构造一个翻译模式, 把每个标识符的类型存 入符号表; 参考例6.2(P138.)
文法的句子如 a, b, c : integer
解(1). 翻译模式如下:
D → id L { addtype(id.entry, L.type) }
4
CH.6.练习题7(P164.)
7. 下列文法由开始符号S产生一个二进制数, 令综合属性val给出该数的值, 试设计求S.val的 属性文法, 其中, 已知B的综合属性c, 它给出由 B产生的二进制位的结果值。例如, 输入 101.101时, S.val=5.625, 其中第一个二进制位 的值是4, 最后一个二进制位的值是0.125。。
S’ → { S.d :=0 } S
S→( { L.d :=S.d+1 } L)
{L1.d=1} L1 , {S.d=1} S
{S.d=1} S
a {pt(S.d=1)}
S → a { print( S.d) }
L → {L1.d :=L.d } L1 , { S.d :=L.d } S
( {L.d=2} L ) {S.d=2} S
相关文档
最新文档