欢迎来到天天文库
浏览记录
ID:11012792
大小:4.52 MB
页数:24页
时间:2018-07-09
《编译原理课程设计报告大学论文.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、燕山大学编译原理课程设计燕山大学《编译原理课程设计》题目:《PL/0编译程序改进及完善》姓名:简越班级:06级计算机应用3班学号:060104010084日期:2009年7月15日燕山大学06计算机应用3班简越燕山大学编译原理课程设计设计题目:PL/0编译程序改进及完善。设计目的:阅读研究,改进设计和调试一个简单的编译程序。加深对编译理论和过程的了解。设计要求:1.有选择的对PL/0编译源程序补充,完善.2.设计编译典型的运行实例,以便反应出自己作出改进后的编具有的功能。设计思想:PL/0语言可以看成PASCAL语言的子集,它的编译程序是一个编译解释执行系统。PL/0的目标程序为假想栈式计
2、算机的汇编语言,与具体计算机无关。PL/0的编译程序和目标程序的解释执行程序都是用PASCAL语言书写的,因此PL/0语言可在配备PASCAL语言的任何机器上实现。其编译过程采用一趟扫描方式,以语法分析程序为核心,词法分析和代码生成程序都作为一个独立的过程,当语法分析需要读单词时就调用词法分析程序,而当语法分析正确需要生成相应的目标代码时,则调用代码生成程序。用表格管理程序建立变量、常量和过程表示符的说明与引用之间的信息联系。当源程序编译正确时,PL/0编译程序自动调用解释执行程序,对目标代码进行解释执行,并按用户程序的要求输入数据和输出运行结果。燕山大学06计算机应用3班简越燕山大学编译
3、原理课程设计燕山大学06计算机应用3班简越燕山大学编译原理课程设计燕山大学06计算机应用3班简越燕山大学编译原理课程设计燕山大学06计算机应用3班简越燕山大学编译原理课程设计主要变量说明:/*变量说明*/FILE*fas;/*输出名字表*/FILE*fa;/*输出虚拟机代码*/FILE*fa1;/*输出源文件及其各行对应的首地址*/FILE*fa2;/*输出结果*/boollistswitch;/*显示虚拟机代码与否*/booltableswitch;/*显示名字表与否*/charch;/*获取字符的缓冲区,getch使用*/enumsymbolsym;/*当前的符号*/charid[al
4、+1];/*当前ident,多出的一个字节用于存放0*/intnum;/*当前number*/intcc,ll;/*getch使用的计数器,cc表示当前字符(ch)的位置*/intcx;/*虚拟机代码指针,取值范围[0,cxmax-1]*/charline[81];/*读取行缓冲区*/chara[al+1];/*临时符号,多出的一个字节用于存放0*/structinstructioncode[cxmax];/*存放虚拟机代码的数组*/charword[norw][al];/*保留字*/enumsymbolwsym[norw];/*保留字对应的符号值*/enumsymbolssym[256]
5、;/*单字符的符号值*/charmnemonic[fctnum][5];/*虚拟机代码指令名称*/booldeclbegsys[symnum];/*表示声明开始的符号集合*/boolstatbegsys[symnum];/*表示语句开始的符号集合*/boolfacbegsys[symnum];/*表示因子开始的符号集合*//*目标指令*/1、LIT:将常量值取到运行栈顶.2、LOD:将变量放到运行栈顶.3、STO:将栈顶的内容送入某变量单元中.4、CAL:调用过程的指令.5、INT:为被调用的过程(或主程序)在运行栈中开辟数据区.燕山大学06计算机应用3班简越燕山大学编译原理课程设计6、J
6、MP:无条件转移指令.7、JPC:条件转移指令,当栈顶的布尔值为真时,顺序执行,否则转向域的地址.8、OPR:系运算符和算术运算指令.将栈顶和次栈顶的内容进行运算,结果存放栈顶./*函数说明*/voiderror(intn,intline)说明:出错处理函数,打印出错信息,错误总数加1。intgetch()说明:读取字符函数,返回字符。intgetsym()说明:读取下一单词符号intposition(char*idt,inttx);说明:字符在符号表中位置查询函数返回值:返回标识符在符号表中的索引intgen(enumfctx,inty,intz);说明:生成P代码指令inttest(b
7、ool*s1,bool*s2,intn);说明:测试当前符号是否合法,若不合法,打印出错信息并进行跳读voidenter(enumobjectk,int*ptx,intlev,int*pdx);说明:在符号表中登录分程序说明部分出现的名字intconstdeclaration(int*ptx,intlev,int*pdx);说明:处理常量说明,并将常量名及相应信息填入符号表intvardeclaration(int*pt
此文档下载收益归作者所有