程序设计语言编译原理自学指导书.docVIP

  • 5
  • 0
  • 约9.67千字
  • 约 20页
  • 2017-10-03 发布于重庆
  • 举报
程序设计语言编译原理自学指导书

《程序设计语言编译原理》自学指导书 一、课程编码及适用专业 课程编码: 适用专业:计算机科学与技术 二、课程性质与任务 必修。通过本课程的学习使学生掌握编译程序构造的基本原理设计方法和实现技术具有设计实现分析和维护编译程序方面的基本技能为今后从事应用软件和系统软件的开发打下一定的理论和实践基础编译程序的结构编译程序的结构确定有限自动机化简语法分析器的功能自上而下分析面临的问题LL(1)分析法递归下降分析程序构造预测分析程序LL(1)分析中的错误处理自下而上分析基本问题算符优先分析LR分析法构造算符优先表属性文法基于属性文法的处理方法S-属性文法的自下而上计算L-属性文法和自顶向下翻译自下而上计算继承属性中间语言说明语句赋值语句的翻译布尔表达式的翻译控制语句的翻译过程调用的处理类型检查符号表的组织与作用整理与查找名字的作用范围符号表的内容目标程序运行时的活动运行时存储器的划分静态存储分配简单的栈式存储分配嵌套过程语言的栈式实现堆式动态存储分配概述局部优化循环优化数据流分析基本问题目标机器模型一个简单的代码生成器寄存器分配DAG的目标代码运行时的DISPLAY表的内容是什么?它的作用是什么? 答:DISPLAY表是嵌套层次显示表。每当进入一个过程后,在建立它的活动记录区的同时建立一张嵌套层次显示表diaplay.假定现在进入的过程层次为i,则它的diaplay表含有i+1个单元,自顶向下每个单元依次存放着现行层、直接外层、…、直至最外层(主程序,0层)等每层过程的最新活动记录的起始地址。通过DISPLAY表可以访问其外层过程的变量。a+b*(c-d)对应的逆波兰式和三元式序列。 答: 逆波兰式:(abcd-*+) 三元式序列: OP ARG1 ARG2 (1) - c d (2) * b (1) (3) + a (2) 2.对于下面程序段 program test (input, output) var i, j: integer; procedure CAL(x, y: integer); begin y:=y*y; x:=x-y; y:=y-x end; begin i:=2; j:=3; CAL(i, j) writeln(j) end. 若参数传递的方法分别为(1)传值、(2)传地址,(3)传名,请写出程序执行的输出结果。答: (1) 3 (2) 16 (3) 16 … Var a: array [1..2] of integer; Procedure Q(b) Var b:integer; Begin a[1]:=a[1]+2; b:=b+b End; Begin a[1]=5; a[2]=7; Q(a[2]);Q(a[1]); Print(a[1],a[2]) End. 若参数传递方法分别为(1)传值、(2)传地址,请写出程序执行的输出结果。 答:(1) 9, 7 (2) 18, 14 课后习题 P36 11的后两个 给出生成下述语言的上下文无关文法: (1){anbnambm|n,m=0} (2){1n0m1m0n|n,m=0} (3){WaWt|W属于{0|a}*,W表示Wt的逆} 解: (1)所求文法为G[S]=({S,A},{a,b},P,S),其中P为: S(AA A(aAb|ε (2)所求文法为G[S]=({S,A},{0,1},P,S),其中P为: S(1S0|A A(0A1|ε (3)W属于{0|a}*是指W可以的取值为{ε,0,a,00,a0,aa0,00aa,a0a0,…} 如果W=aa0a00,则Wt=00a0aa。 所求文法为G[S]=({S,P,Q},{0,a},P,S),其中P为: S(0S0|aSa|a P64 7 1.构造下列正规式相应的DFA: 1(0|1)* 101 1(1010* | 1(010)* 1)* 0 解: (1)1(0|1)* 101对应的NFA为 下表由子集法将NFA转换为DFA: I I0 = ε-closure(MoveTo(I,0)) I1 = ε-closure(MoveTo(I,1)) A[0] B[1] B[1] B[1] C[1,2] C[1,2] D[1,3] C[1,2] D[1,3] B[1] E[1,4] E[1,4] B[1] B[1] (2)1(1010* | 1(010)* 1)* 0对应的NFA为 下表由子集法将NFA转换为DF

文档评论(0)

1亿VIP精品文档

相关文档