编译原理课程设计报告 毕业论文.doc

  1. 1、本文档共24页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理课程设计报告 毕业论文

燕山大学 《编译原理课程设计》 题目:《PL/0编译程序改进及完善》 姓名:简越 班级:06级计算机应用3班 学号:060104010084 日期:2009年7月15日 设计题目: PL/0编译程序改进及完善。 设计目的: 阅读研究,改进设计和调试一个简单的编译程序。加深对编译理论和过程的了解。 设计要求: 1.有选择的对PL/0编译源程序补充,完善. 2.设计编译典型的运行实例,以便反应出自己作出改进后的编 具有的功能。 设计思想: PL/0语言可以看成PASCAL语言的子集,它的编译程序是一个编译解释执行系统。PL/0的目标程序为假想栈式计算机的汇编语言,与具体计算机无关。 PL/0的编译程序和目标程序的解释执行程序都是用PASCAL语言书写的,因此PL/0语言可在配备PASCAL语言的任何机器上实现 。其编译过程采用一趟扫描方式,以语法分析程序为核心,词法分析和代码生成程序都作为一个独立的过程,当语法分析需要读单词时就调用词法分析程序,而当语法分析正确需要生成相应的目标代码时,则调用代码生成程序。 用表格管理程序建立变量、常量和过程表示符的说明与引用之间的信息联系。 当源程序编译正确时,PL/0编译程序自动调用解释执行程序,对目标代码进行解释执行,并按用户程序的要求输入数据和输出运行结果。 主要变量说明: /*变量说明*/ FILE* fas; /*输出名字表*/ FILE* fa; /*输出虚拟机代码*/ FILE* fa1; /*输出源文件及其各行对应的首地址*/ FILE* fa2; /*输出结果*/ bool listswitch; /*显示虚拟机代码与否*/ bool tableswitch; /*显示名字表与否*/ char ch; /*获取字符的缓冲区,getch使用*/ enum symbol sym; /*当前的符号*/ char id[al+1]; /*当前ident,多出的一个字节用于存放0*/ int num; /*当前number*/ int cc,ll; /*getch使用的计数器,cc表示当前字符(ch)的位置*/ int cx; /*虚拟机代码指针,取值范围[0,cxmax-1]*/ char line[81]; /*读取行缓冲区*/ char a[al+1]; /*临时符号,多出的一个字节用于存放0*/ struct instruction code[cxmax]; /*存放虚拟机代码的数组*/ char word[norw][al]; /*保留字*/ enum symbol wsym[norw]; /*保留字对应的符号值*/ enum symbol ssym[256]; /*单字符的符号值*/ char mnemonic[fctnum][5]; /*虚拟机代码指令名称*/ bool declbegsys[symnum]; /*表示声明开始的符号集合*/ bool statbegsys[symnum]; /*表示语句开始的符号集合*/ bool facbegsys[symnum]; /*表示因子开始的符号集合*/ /* 目标指令*/ 1、LIT:将常量值取到运行栈顶. 2、LOD:将变量放到运行栈顶. 3、STO:将栈顶的内容送入某变量单元中. 4、CAL:调用过程的指令. 5、INT:为被调用的过程(或主程序)在运行栈中开辟数据区. 6、JMP:无条件转移指令. 7、JPC:条件转移指令,当栈顶的布尔值为真时, 顺序执行,否则转向域的地址. 8、OPR:系运算符和算术运算指令.将栈顶和次栈顶的内容进行运算,结果存放栈顶. /*函数说明*/ void error(int n,int line) 说明:出错处理函数,打印出错信息,错误总数加1。 int getch() 说明:读取字符函数,返回字符。 int getsym() 说明:读取下一单词符号 int position(char* idt,int tx); 说明:字符在符号表中位置查询函数 返回值:返回标识符在符号表中的索引 int gen(enum fct x,int y,int z); 说明:生成P代码指令 int test(bool* s1,bool* s2,int n); 说明:测试当前符号是否合法,若不合法,打印出错信息并进行跳读 void enter(enum obj

文档评论(0)

李天佑 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档