编译原理课程设计报告编译器功能的实现.doc

上传人:laozhun 文档编号:2386095 上传时间:2023-02-17 格式:DOC 页数:45 大小:652KB
返回 下载 相关 举报
编译原理课程设计报告编译器功能的实现.doc_第1页
第1页 / 共45页
编译原理课程设计报告编译器功能的实现.doc_第2页
第2页 / 共45页
编译原理课程设计报告编译器功能的实现.doc_第3页
第3页 / 共45页
编译原理课程设计报告编译器功能的实现.doc_第4页
第4页 / 共45页
编译原理课程设计报告编译器功能的实现.doc_第5页
第5页 / 共45页
点击查看更多>>
资源描述

《编译原理课程设计报告编译器功能的实现.doc》由会员分享,可在线阅读,更多相关《编译原理课程设计报告编译器功能的实现.doc(45页珍藏版)》请在三一办公上搜索。

1、 编译原理课程设计 实验报告 课 题:编译器功能的实现 目 录1 介绍11.1 前言12 编译器22.1 PL/X编译器结构概述22.2 语法元素42.3语法图52.4判断是否符合两条限制规则132.5 语法出错表定义163 虚拟机173.1 虚拟机组织结构173.2 虚拟机指令格式184 程序设计214.1 全局变量、全局常量214.2 函数接口285编译器功能的实现375.1 概述375.2 实例一375.3 实例二415.4 实例三431 介绍1.1 前言根据课程设计要求制作PL/X语言的编译器,完成词法分析、语法分析、语义分析及代码生成、出错处理和解释运行程序,并添加一定的扩展,最终实

2、现一个PL/X的编译器。所完成扩展点说明:1)支持三种注释a)单行注释b)/*-*/ 多行注释c)(*-*) 多行注释2)支持read语句,因此可从终端获取输入3)支持write语句,因此可从终端输出4)支持for语句5)支持dowhile语句6) call过程7) 求余运算%8) 整数的奇偶odd9) 幂运行*关于出错处理:分为词法分析错误、句法分析错误、运行时错误(如除数为0)允许变量名或函数名重复,但访问的时候以最后一次声明的为有效2 编译器2.1 PL/X编译器结构概述图 1 PL/X编译程序的结构图图 2 PL/X的解释执行结构图 3 PL/X编译程序总体流程图语法分析过程PROG是

3、整个编译过程的核心,是指开始由主程序调用GETSYM取一个单词,再调用语法分析过程PROG, PROG由当前单词根据语法规则再调用其它过程,如说明处理、代码生成或出错处理等过程进行分析,当分析完一个单词后,PROG再调用GETSYM取下一个单词,一直重复到当前单词为结束符表明源程序已分析结束。若未取到结束符,而源程序已没有输入符号,这时表明源程序有错误,无法再继续分析。图 4 PL/X过程调用相关示意图2.2 语法元素关键字:and, begin, call, case, constant, do, else, end, false, for, if, integer, logical, no

4、t, or, “odd”,procedure, program, read,repeat, switch, then, true, until, while, write操作符:., ;, *, +, “-, +, -, *, /, %, =, , , =, =, !,+=, -=, *=, /=2.3语法图程序.程序体程序体=identnumberconst,;varident,;identprocedure;程序体语句语句序列语句;语句:=表达式ident语句序列条件if语句thendowhile条件语句identcallendbegin条件表达式odd表达式=表达式表达式+项-+-项项%

5、*/因子*因子+-因子identnumber)(表达式1) prog = program ds proc begin ss end .2) proc = procedure aident ds begin ss end3) ds = d ; d 4) d = integer aident , aident | logical bident , bident | constant aident = number , aident = number5) ss = s ; s 6) s = aident := ae | bident := be |if be then ss else ss end

6、|while be do ss end |repeat ss until be |write ae .read aident | bidentfor s ; be ; s do ss endcall proceduredo ss . while be end7) ae= - at (-|+) at 8) at = af1 (*|/) af1.9) af1 = af (%|*) af. /扩展的求余运算10) af = aident | number | ( ae ) | constant11) be = bt or bt12) bt = bf and bf 13) bf = bident |

7、true | false |not bf |( be ) | re114) re1=odd re15) re = (aident | number )( = | | = | | | = | | 2do repeat n:=i/j; m:=n*j; p:=i/2; if i=m then i:=i-1; j:=2 else j:=j+1 end until j=p; write i; i:=i-1; j:=2end;write 2end.测试步骤编译此程序查看输出测试结果5.3 实例二Test 2:测试2个数的最小公倍数测试目标语法分析代码生成解释程序if语句while.do语句read语句wr

8、ite语句测试用例的plx源程序:/求两数的最小公倍数/if.then和while.do语句的测试programinteger i,j,temp,m,pbegin read i; read j; p:=i*j; if ij then temp:=i; i:=j; j:=temp end; while j/=0 do m:=i-i/j*j; i:=j; j:=m end; j:=p/i; write jend.测试步骤编译此程序输入24 36回车查看输出测试结果5.4 实例三Test 3:求任意数的5次偶数倍连加测试目标语法分析代码生成解释程序read语句write 语句测试用例的plx源程序:programinteger i,jbegin read i;j:=i&;write j;end.测试步骤编译此程序查看输出测试结果

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号