《编译原理》课后习题答案第二章 end(p); begin( ain call p: end (main). 答案: 程序执行到赋值语句b:=0时运行栈的布局示意图为: 的局部麦量区 的局部支量区 的局高部支量区 的局部量区 主程序变量区 第3题 写出题2中当程序编译到r的过程体时的名字表1ab的内容, name kind level/val adr size 答案: 题2中当程序编译到r的过程体时的名字表table的内容为: name kind level/val adr size variable 0 dx y variable 0 dx+l p procedure 0 过程p的入口(待填) 5 盛成网(www.snwei.com)专业的计算机学习网站 2
《编译原理》课后习题答案第二章 end (p); begin (main) call p; end (main). 答案: 程序执行到赋值语句 b∶=10 时运行栈的布局示意图为: 第 3 题 写出题 2 中当程序编译到 r 的过程体时的名字表 table 的内容。 name kind level/val adr size 答案: 题 2 中当程序编译到 r 的过程体时的名字表 table 的内容为: name kind level/val adr size x variable 0 dx y variable 0 dx+1 p procedure 0 过程 p 的入口(待填) 5 盛威网(www.snwei.com)专业的计算机学习网站 2
《编译原理》课后习答案第二章 variable 1 d procedure 过程q的入口 procedure 过程s的入口(待填) 5 variable dx variable dx procedure 过程r的入口 variable dx f variable 3 dx+1 注意:q和s是并列的过程,所以g定义的变量b被覆盖。 第4题 指出栈顶指针T,最新活动记录基地址指针B,动态链指针DL,静态链指针SL与返 回地址RA的用途。 答案 栈顶指针T,最新活动记录基地址指针B,动态链指针DL,静态链指针SL与返回地址 RA的用途说明如下: T:栈顶寄存器T指出了当前栈中最新分配的单元(T也是数组S的下标)。 B:基址寄存器,指向每个过程被调用时,在数据区S中给它分配的数据段起始地址 也称基地址 SL:静态链,指向定义该过程的直接外过程(或主程序)运行时最新数据段的基地址, 用以引用非局部(包围它的过程)变量时,寻找该变量的地址。 DL:动态链,指向调用该过程前正在运行过程的数据段基地址,用以过程执行结束释 放数据空间时,恢复调用该过程前运行栈的状态。 RA:返回地址,记录调用该过程时目标程序的断点,即调用过程指令的下一条指令的 地址,用以过程执行结束后返回调用过程时的下一条指令继续执行。 在每个过程被调用时在栈顶分配3个联系单元,用以存放SL,DL,RA。 第5题 P1编译程序所产生的目标代码是一种假想栈式计算机的汇编语言,请说明该汇编语 言中下列指令各自的功能和所完成的操作。 (1)INTOA (2)OPR00 (3)CALLA 答案: PL0编译程序所产生的目标代码中有3条非常重要的特殊指令,这3条指令在code中 的位置和功能以及所完成的操作说明如下: 盛威网(www.snwei.com)专业的计算机学习网站 3
《编译原理》课后习题答案第二章 a variable 1 dx q procedure 1 过程 q 的入口 4 s procedure 1 过程 s 的入口(待填) 5 c variable 2 dx d variable 2 dx r procedure 2 过程 r 的入口 5 e variable 3 dx f variable 3 dx+1 注意:q 和 s 是并列的过程,所以 q 定义的变量 b 被覆盖。 第 4 题 指出栈顶指针 T,最新活动记录基地址指针 B,动态链指针 DL,静态链指针 SL 与返 回地址 RA 的用途。 答案: 栈顶指针 T,最新活动记录基地址指针 B,动态链指针 DL,静态链指针 SL 与返回地址 RA 的用途说明如下: T: 栈顶寄存器 T 指出了当前栈中最新分配的单元(T 也是数组 S 的下标)。 B:基址寄存器,指向每个过程被调用时,在数据区 S 中给它分配的数据段起 始 地址, 也称基地址。 SL: 静态链,指向定义该过程的直接外过程(或主程序)运行时最新数据段的基地址, 用以引用非局部(包围它的过程)变量时,寻找该变量的地址。 DL: 动态链,指向调用该过程前正在运行过程的数据段基地址,用以过程执行结束释 放数据空间时,恢复调用该过程前运行栈的状态。 RA: 返回地址,记录调用该过程时目标程序的断点,即调用过程指令的下一条指令的 地址,用以过程执行结束后返回调用过程时的下一条指令继续执行。 在每个过程被调用时在栈顶分配 3 个联系单元,用以存放 SL,DL, RA。 第 5 题 PL/0 编译程序所产生的目标代码是一种假想栈式计算机的汇编语言,请说明该汇编语 言中下列指令各自的功能和所完成的操作。 (1) INT 0 A (2) OPR 0 0 (3) CAL L A 答案: PL/0 编译程序所产生的目标代码中有 3 条非常重要的特殊指令,这 3 条指令在 code 中 的位置和功能以及所完成的操作说明如下: 盛威网(www.snwei.com)专业的计算机学习网站 3
《编译原理》课后习题答案第二章 INTOA 在过程目标程序的入口处,开辟A个单元的数据段。A为局部变量的个数+3。 数据段基址寄存器B和栈顶寄存器T的值,并将返回地址送到指令地址寄存器P中,以使 调用前的程序从断点开始继续执行。 CALLA 调用过程,完成填写静态链、动态链、返回地址,给出被调用过程的基地址值,送入基 址寄存器B中,目标程序的入口地址A的值送指令地址寄存器P中,使指令从A开始执行。 第6题 给出对PL心语言作如下功能扩充时的语法图和EBNF的语法描述, 山)扩充条件语句的功能使其为: if(条件)hen《语句)e(语句) (②)扩充repeat语句为: repeat〈语句)i(语句》until(条件》 答案: 对PLO语言作如下功能扩充时的语法图和EBNF的语法描述如下: ()扩充条件语句的语法图为: →,@-,匮间,间 EBNF的语法描述为:(条件语句》:=if(条件)hen〈语句》clse〈语句)】 (2)扩充repeat语句的语法图为: atn件☐ EBNF的语法描述为:(重复语句):=repeat(语句){:(语句)until(条件) 盛成网(www.snwei.com)专业的计算机学习网站
《编译原理》课后习题答案第二章 INT 0 A 在过程目标程序的入口处,开辟 A 个单元的数据段。A 为局部变量的个数+3。 OPR 0 0 在过程目标程序的出口处,释放数据段(退栈),恢复调用该过程前正在运行的过程的 数据段基址寄存器 B 和栈顶寄存器 T 的值,并将返回地址送到指令地址寄存器 P 中,以使 调用前的程序从断点开始继续执行。 CAL L A 调用过程,完成填写静态链、动态链、返回地址,给出被调用过程的基地址值,送入基 址寄存器 B 中,目标程序的入口地址 A 的值送指令地址寄存器 P 中,使指令从 A 开始执行。 第 6 题 给出对 PL/0 语言作如下功能扩充时的语法图和 EBNF 的语法描述。 (1) 扩充条件语句的功能使其为: if〈条件〉then〈语句〉[else〈语句〉] (2) 扩充 repeat 语句为: repeat〈语句〉{;〈语句〉}until〈条件〉 答案: 对 PL/0 语言作如下功能扩充时的语法图和 EBNF 的语法描述如下: (1) 扩充条件语句的语法图为: EBNF 的语法描述为: 〈条件语句〉::= if〈条件〉then〈语句〉[else〈语句〉] (2) 扩充 repeat 语句的语法图为: EBNF 的语法描述为: 〈 重复语句〉::= repeat〈语句〉{;〈语句〉}until〈条件〉 盛威网(www.snwei.com)专业的计算机学习网站 4
《编译原理》课后习题答案第三章】 第3章文法和语言 第1题 文法G=({A,B,Sa,b,ec,PS其中P为 S→AcaB A-ab Bbc 写出L(GS)的全部元素。 答案 L(G[S])=(abc) 第2题 文法GN为: N→DND D0 答案 GN的语言是V+。V={0,1,2,3,4,5,6,7,8,9y N=>ND->NDD.->NDDDD.D=>D.D 或者:允许0开头的非负整数? 第3题 为只包含字、加号和减号的表达式,例如92十5,31,7等构造一个文法。 答案: G[S] S->S+D/S-DID D->011I243451671819 第4题 已知文法G: Z-aZbab 写出G的全部元素。 盛威网(www.snwei.com)专业的计算机学习网站
《编译原理》课后习题答案第三章 第 3 章 文法和语言 第 1 题 文法 G=({A,B,S},{a,b,c},P,S)其中 P 为: S→Ac|aB A→ab B→bc 写出 L(G[S])的全部元素。 答案: L(G[S])={abc} 第 2 题 文法 G[N]为: N→D|ND D→0|1|2|3|4|5|6|7|8|9 G[N]的语言是什么? 答案: G[N]的语言是 V+。V={0,1,2,3,4,5,6,7,8,9} N=>ND=>NDD. =>NDDDD.D=>D.D 或者:允许 0 开头的非负整数? 第3题 为只包含数字、加号和减号的表达式,例如 9-2+5,3-1,7等构造一个文法。 答案: G[S]: S->S+D|S-D|D D->0|1|2|3|4|5|6|7|8|9 第 4 题 已知文法 G[Z]: Z→aZb|ab 写出 L(G[Z])的全部元素。 盛威网(www.snwei.com)专业的计算机学习网站 1
《编译原理》课后习题答案第三章 答案: Z-aZb->aaZbb-aaa.Z.bbb->aaa.ab.bbb L(G[ZD=fa'bIn>=1; 第3题 写一文法,使其语言是偶正整数的集合。要求: 山允许0打头 (2不允许0打头 答案: ()允许0开头的偶正整数集合的文法 ENTID T-NTD N-D9 D→0124168 (2)不允许0开头的偶正整数集合的文法 T-FTlG N→DI1I357I9 D-→24168 FNIO G-D/0 第6题 已知文法G: <表达式:<项>|<表达式十<项 <项<因子>|<项<因子> <因子>= <表达式)1 试给出下述表达式的推导及语法树。 (5)i+(i+i) (6)计Hii 盛成网(www.snwei.com)专业的计算机学习网站 2
《编译原理》课后习题答案第三章 答案: Z=>aZb=>aaZbb=>aaa.Z.bbb=> aaa.ab.bbb L(G[Z])={an b n |n>=1} 第 5 题 写一文法,使其语言是偶正整数的集合。 要求: (1) 允许 0 打头; (2)不允许 0 打头。 答案: (1)允许 0 开头的偶正整数集合的文法 E→NT|D T→NT|D N→D|1|3|5|7|9 D→0|2|4|6|8 (2)不允许 0 开头的偶正整数集合的文法 E→NT|D T→FT|G N→D|1|3|5|7|9 D→2|4|6|8 F→N|0 G→D|0 第 6 题 已知文法 G: <表达式>::=<项>|<表达式>+<项> <项>::=<因子>|<项>*<因子> <因子>::=(<表达式>)|i 试给出下述表达式的推导及语法树。 (5)i+(i+i) (6)i+i*i 盛威网(www.snwei.com)专业的计算机学习网站 2