云南大学编译原理实验报告实验题目:PLO编译器扩展学院:信息学院专业:计算机科学与技术学号:20091060064姓名:刘继远目录一、实验目的............................................................................................1二、实验内容............................................................................................1三、源程序分析........................................................................................21、PL/0语言编译器的基本工作流程...............................................22、PL/0语言编译器主要函数的作用及其函数之间的调用..........33、编译器的语法语义分析...............................................................4(1)、编译器在进行语法语义分析时,各函数的调用关系......4(2)、递归子程序实现..................................................................5(3)、其他两大部分的功能..........................................................61)、说明部分的分析...................................................................62)、过程体的分析:...................................................................64、PL/0编译程序的目标代码结构和代码生成...............................7(1)、对分程序体人口的处理......................................................7(2)、类pcode代码指令的详细解释..........................................75、PL/0编译程序的语法错误处理...................................................8四、设计的基本思想................................................................................91、对else语句的扩展:...................................................................92、对一维数组的扩展:..................................................................10五、结果及分析......................................................................................161、对else语句扩展的测试结果.....................................................162、对一维数组扩展的测试结果.....................................................19云南大学信息学院计算机实验中心1一、实验目的1.理解语法、语义分析程序为中心的单遍编译程序组织方法;2.理解编译程序的基本逻辑过程(词法分析、语法分析、语义分析及目标代码的生成;3.理解编译过程中的符号表、内存管理、错误处理的基本方法;二、实验内容在已知的PL0程序的基础上,修改PL/0编译程序和类P-code解释程序的源代码,以支持对PL/0语言所进行的如下扩充,并调试通过:(1)条件语句改为:<条件语句>::=IF<条件>THEN<语句>[ELSE<语句>]问题:按照你的修改方式,如下PL/0代码执行后变量x的值是什么?你认为这样的结果是否合理?为什么?(2)增加整型一维数组变量,形式为:<数组变量声明>::=<标识符>(<下界>:<上界>)<数组变量引用>::=<标识符>(<表达式>)其中<下界>和<上界>是常量名或整数,例如:consttop=10;varAnArray(-4:8),ArrayToo(1:top);...AnArray(7):=ArrayToo(3);X:=2;Y:=10;ifY>5thenifY<7thenX:=0elseX:=1;云南大学信息学院计算机实验中心2三、源程序分析1、PL/0语言编译器的基本工作流程如图1-1所示:语法分析词法分析语义分析代码生成代码执行源程序执行结果符号表管理错误诊断处理图1-1PL/0编译器基本工作流程云南大学信息学院计算机实验中心32、PL/0语言编译器主要函数的作用及其函数之间的调用它反映了编译程序工作的基理,如图1-2所示:图1-2PL/0编译器函数调用main函数init初始化block编译函数error出错处理constdeclaration常量声明vardeclaration变量声明arraydeclarati数组声明getch读字符enter登记到名字表position查标示符在名字表中的位置base通过基地址求上一层地址test测试:检测类型集合的匹配gen生成目标代码listcode输出不表代码清单Interpret解释程序condition条件处...