PL0编译器说明文档.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PL0编译器说明文档.doc

PL0编译器说明文档 名称:PL0编译器 作者:蒋伟 学号:0106230217 程序用途:对PL0程序进行词法分析,语法分析,生产中间代码及解释执行。 开发工具:Borland Delphi 7.0 时间:2004年4月 CiFaFenXi.pas 词法分析模块 Defination.pas 变量,数组定义模块 Excute.pas 解释执行模块 Main.pas 主窗体模块 My_Statememt.pas 说明窗体模块 Preface.pas 欢迎窗体模块 Proc_Func.pas 其它一些过程,函数 Result_Form.pas 结果窗体模块 SanYuanShi.pas 生成中间代码模块 YuFaFenXi.pas 语法分析模块 窗体(4个): Main.dfm 主窗体 My_Statememt.dfm 说明窗体 Preface.dfm 欢迎窗体 Result_Form.dfm 结果窗体 ◆ 界面说明 工具栏中依次为:新建,打开,保存,复制,剪切,粘贴,删除,撤销,词法分析(及其窗口),语法分析(及其窗口),生成中间代码(及其窗口),解释执行,结果观察窗口,帮助,说明。 程序窗体内有4个子窗体,分别为程序输入窗体(Memo1),语法分析窗体(Memo2),词法分析窗体(Memo3)和中间代码窗体(Memo4)。考虑到整体界面美观,其中词法分析窗体(Memo3)和中间代码窗体(Memo4)始终重叠,不能同时显示。其它窗体均可以随时通过按钮显示或隐藏。另外,还设有执行结果观察窗体ResultForm,自动生成,也可以随时显示或隐藏。 ◆ 程序设计思路 该编译程序对待编译的程序文本进行3次扫描。第一次为词法分析,扫描结束后生成单词表wordlist[i],第二次进行语法分析,扫描单词表wordlist[i],分析语法错误,在程序确认无误后可以生成中间代码,即进行第三次扫描,仍然扫描单词表wordlist[i],生成中间代码表code[i]。最后根据中间代码表code[i]对源程序进行解释执行。 词法分析部分 主要实现函数 SaveToFile; //将文本保存,以方便读取 wordlist_index:=0; //初始化wordlist_index Initialize; //初始化程序中的变量,数组 CreateWordList(wordlist_index); //建立单词表 PrintWordlist; //打印单词表到文件 WriteToMemo3; //向Memo3输入词法分析结果 Initialize为初始化程序中的变量,数组,包括:当前单词表长度(wordlist_index),定义关键字表keyword,出错信息表errlist,当前读取字符ch,结束标志字符ch_flag,行号信息line_index。 CreateWordList(wordlist_index);函数实现了词法分析。大概功能是:从文件读入一个字符串(滤去回车,换行,Tab以及注释),分析字符串是否为标识符,常数,符号,提取有关信息(名称,类型,序号,值,行号)存入单词表。 语法分析部分 主要实现函数: Analyze; Set_errormark;//设置错误行号标记 Analyze;函数实现了语法分析。其中调用的主要函数为: block(lev,table_index:integer;fsys:symset);其功能在下文中详细说明。 三、生成中间代码部分 主要实现函数: final; Analyze; 函数实现了中间代码生成。其中调用的主要函数为: block(lev,table_index:integer;fsys:symset);其功能在下文中详细说明。 执行生成中间代码后,产生中间代码链表code[i]。 四、解释执行部分 主要实现函数: interpret; SeeResult;//观察结果 interpret; 函数实现了解释执行。该函数扫描链表code[i],定义数组s[i]对code[i]中的具体内容进行具体操作,实现执行程序的功能。 ◆ block函数的说明 block为实现程序功能的主要函数,在语法分析和生成三元式的过程中均有调用,不同的是在语法分析中略去了生产三元式的函数部分,在生成三元式时略去了处理程序语法错误的函数部分(因为在生成三元式时已经确定了程序无语法错误)。下面综合做一下说明。 Block过程用于处理分程序段。其中定义的函数或调用的已定义的主要函数和过程有: ·function position(id:alfa):integer; 功能:查找标识符(包括常量,变量,函数名)在

文档评论(0)

zhoubingchina + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档