欢迎来到天天文库
浏览记录
ID:9936951
大小:432.00 KB
页数:29页
时间:2018-05-16
《编译原理课程设计-- pl0语言的扩充》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、报告成绩《编译原理课程设计》项目名称PL/0语言的扩充学院计算机学院专业班级学号姓名指导教师2013年1月3日26一.课程设计目的0二.课程设计要求0基本内容:0选做内容:0已实现的功能:0三.编译环境与工具0四.结构设计说明01.PL/0编译程序的结构图02.PL/0编译程序的过程或函数的功能表13.PL/0编译程序的总体流程图14.PL/0编译程序的中间代码25.PL 的编译程序的过程和函数的功能3五.课程设计的设计与步骤31.扩充赋值运算:+=-=*=/=++和--52.增加Pascal的FOR语句153.一维数组17六.调试测试19
2、1.+=-=*=/=++--的测试192.FOR语句的测试213.数组的调试224.综合调试23七.课程设计总结25【参考文献】2626一.课程设计目的在分析理解一个教学型编译程序(如PL/0)的基础上,对其词法分析程序、语法分析程序和语义处理程序进行部分修改扩充。达到进一步了解程序编译过程的基本原理和基本实现方法的目的。二.课程设计要求基本内容:(1)扩充赋值运算:*=和/=(2)扩充语句(Pascal的FOR语句):①FOR<变量>:=<表达式>TO<表达式>DO<语句>②FOR<变量>:=<表达式>DOWNTO<表达式>DO<语句>其中
3、,语句①的循环变量的步长为2,语句②的循环变量的步长为-2。(3)增加运算:++和--。选做内容:(1)增加类型:①字符类型;②实数类型。(2)扩充函数:①有返回值和返回语句;②有参数函数。(3)增加一维数组类型(可增加指令)。(4)其他典型语言设施。已实现的功能:(1)扩充赋值运算:*=和/=(另外也扩充了+=和-=)(2)扩充语句(Pascal的FOR语句):①FOR<变量>:=<表达式>TO<表达式>DO<语句>②FOR<变量>:=<表达式>DOWNTO<表达式>DO<语句>(3)增加运算:++和--。(4)增加一维数组类型(可增加指令
4、)。三.编译环境与工具编译环境:MicrosoftWindows7(64bit)编译工具:MicrosoftVisualC++6.0四.结构设计说明1.PL/0编译程序的结构图26图4-1PL/0编译程序的结构图PL/0源程序词法分析程序语法语义分析程序代码生成目标代码表格管理程序出错管理程序2.PL/0编译程序的过程或函数的功能表过程或函数名简要功能说明pl0主程序error出错处理,打印出错位置和错误编码getsym词法分析,读取一个单词getch漏掉空格,读取一个字符gen生成目标代码,并送入目标程序区test测试当前单词符号是否合法b
5、lock分程序分析处理过程enter登录名字表position(函数)查找标识符在名字表中的位置constdeclaration常量定义处理vardeclaration变量说明处理listode列出目标代码清单statement语句处理expression表达式处理term项处理factor因子处理condition条件处理interpret对目标代码的解释执行程序base(函数)通过静态链求出数据区的基地址表4-1PL/0编译程序的过程或函数的功能表3.PL/0编译程序的总体流程图26图4-2PL/0编译程序的总体流程图4.PL/0编译程序
6、的中间代码对PL/0编译程序的目标代码的指令格式描述如下:fla其中f代表功能码,l表示层次差,a的含意对不同的指令有所区别,见下面对每条指令的解释说明:Lit0a将常数值取到栈顶,a为常数值lodla将变量值取到栈顶,a为偏移量,l为层差stola将栈顶内容送入某变量单元中,a为偏移量,l为层差calla调用过程,a为过程地址,l为层差int0a在运行栈中为被调用的过程开辟a个单元的数据区jmp0a无条件跳转至a地址jpc0a条件跳转,当栈顶布尔值非真则跳转至a地址,否则顺序执行opr00过程调用结束后,返回调用点并退栈opr01栈顶元素取
7、反opr02次栈顶与栈顶相加,退两个栈元素,结果值进栈opr03次栈顶减去栈顶,退两个栈元素,结果值进栈opr04次栈顶乘以栈顶,退两个栈元素,结果值进栈opr05次栈顶除以栈顶,退两个栈元素,结果值进栈opr06栈顶元素的奇偶判断,结果值在栈顶opr07opr08次栈顶与栈顶是否相等,退两个栈元素,结果值进栈opr09次栈顶与栈顶是否不等,退两个栈元素,结果值进栈26opr010次栈顶是否小于栈顶,退两个栈元素,结果值进栈opr011次栈顶是否大于等于栈顶,退两个栈元素,结果值进栈opr012次栈顶是否大于栈顶,退两个栈元素,结果值进栈op
8、r013次栈顶是否小于等于栈顶,退两个栈元素,结果值进栈opr014栈顶值输出至屏幕opr015屏幕输出换行opr016从命令行读入一个输入置于栈顶表4-2PL/0
此文档下载收益归作者所有