欢迎来到天天文库
浏览记录
ID:16113118
大小:306.00 KB
页数:20页
时间:2018-08-08
《编译原理课程设计与报告》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、课程设计课程名称__编译原理_题目名称PL/0语言的扩充学生学院___计算机学院______专业班级_软件工程07级4班__学号学生姓名指导教师____李小妹________2008年1月5日19课程设计实验报告一、概述:源语言:PL/0目标语言:目标代码(生成的文件后缀为*.COD)实验工具:BorlandC++Builder6运行平台:WindowsXP目的:在分析理解一个教学型编译程序(如PL/0)的基础上,对其词法分析程序、语法分析程序和语义处理程序进行部分修改扩充。达到进一步了解程序编译过程的基本原理和基本实现方法的
2、目的。要求:对PL/0作以下修改扩充:基本内容(1)扩充赋值运算:+=和-=(2)扩充语句(Pascal的FOR语句):①FOR<变量>:=<表达式>TO<表达式>DO<语句>②FOR<变量>:=<表达式>DOWNTO<表达式>DO<语句>其中,语句①的循环变量的步长为1,语句②的循环变量的步长为-1。选做内容(1)增加运算:++和--。(2)增加类型:①字符类型;②实数类型。(3)扩充函数:①有返回值和返回语句;②有参数函数。(4)增加一维数组类型(可增加指令)。(5)其他典型语言设施。二、结构设计说明:各功能模块描述Err
3、or()出错处理,打印出错位置和错误编码GetCh()漏掉空格,读取一个字符GetSym()词法分析,读取一个单词GEN()目标代码生成过程,本过程用于把生成的目标代码写入目标代码数组,供后面的解释器解释执行TEST()测试当前单词是否合法过程testENTER()登陆符号表过程enterPOSITION()19在符号表中查找指定符号所在位置的函数positionVARDECLARATION()变量声明处理LISTCODE()输出目标代码清单;FACTOR()因子处理过程factorTERM()项处理过程term;EXPRES
4、SION()表达式处理过程CONDITION()条件处理过程STATEMENT()语句处理过程BLOCK()编译程序主体,语法分析过程BASE()通过静态链求出数据区基地址的函数,INTERPRET()对目标代码解释运行过程Pl0编译程序的结构词法分析程序语法语义分析程序代码生成程序表格管理程序出错处理程序PL0源程序目标程序19编译程序的总体流程图词法分析状态转换图.○表示状态,对应每个状态编一段程序,每个状态调用取字符程序,根据当前字符转到不同的状态,并做相应操作。◎表示终态,已识别出一个单词19语法调用关系图程序pl0分
5、程序block语句statement条件condition表达式expression项term主要成分描述1.符号表在编译程序中符号表用来存放语言程序中出现的有关标识符的属性信息,符号表中所登记的信息在编译的不同阶段都要用到。在语义分析中,符号表所登记的内容将用于语义检查(如检查一个名字的使用和原先的说明是否一致)和产生中间代码。在目标代码生成阶段,当对符号名进行地址分配时,符号表是地址分配的依据。对一个多遍扫描的编译程序,不同遍所用的符号表也往往各有不同。因为每遍所关心的信息各有差异。一张符号表的每一项(或称入口才包含两大栏
6、(或称区段、字域),即名字栏(NAME)信息栏(INFORMATION) 信息栏包含许多子栏和标志位,用来记录相应名字和种种不同属性,由于查填符号表一般是通过匹配名字来寮现的,因此,名字栏也称主栏。主栏的内容称为关键字(keyword)。2.运行时存储组织和管理由于编译时目标程序运行的数据空间大小已经规定,所以存储组织属于静态存储。源程序的标识符存放在TABLE表中,目标代码存放在CODE中,S是由解释程序定义的一维整型数组,是程序运行时的数据存储空间。193.语法分析方法自顶向下的语法分析:<程序><分程序>.<变量说明部分
7、><语句>VAR<标识符>;<复合语句>ABEGIN<语句>END<读语句>READ(<标识符>)A4.中间代码表示对PL/0编译程序的目标代码的指令格式描述如下:fla其中f代表功能码,l表示层次差,a的含意对不同的指令有所区别,见下面对每条指令的解释说明:lit0a将常数值取到栈顶,a为常数值Lodla将变量值取到栈顶,a为偏移量,l为层差Stola将栈顶内容送入某变量单元中,a为偏移量,l为层差Calla调用过程,a为过程地址,l为层差Int0a在运行栈中为被调用的过程开辟a个单元的数据区jmp0a无条件跳转至a地址Jp
8、c0a条件跳转,当栈顶布尔值非真则跳转至a地址,否则顺序执行opr00过程调用结束后,返回调用点并退栈opr01栈顶元素取反opr02次栈顶与栈顶相加,退两个栈元素,结果值进栈opr03次栈顶减去栈顶,退两个栈元素,结果值进栈opr04次栈顶乘以栈顶,退两个栈元素,结果值进栈
此文档下载收益归作者所有