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