- 1、本文档共11页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
系统软件课程设计实验指导
(编译系统部分)
华东理工大学计算机系人工智能教研组
实验安排
编译程序是大型软件,学生无法在有限的课时内完成它。因此我们专门开设系统软件课程设计实验,来提高学生在系统软件设计方面的认识和实际的开发能力。我们选择pascal语言的真子集语言作为编译的对象语言。因为该语言具有pascal语言的面向算法语言的主要特点。具有结构化程序的语句类型。但为了压缩所构造的编译程序的规模,决定该语言仅包含赋值语句、if条件语句、while循环迭代语句以及必要的输入输出语句。数据类型先考虑整型,做到麻雀虽小五脏俱全的目的。对象语言文法定义见后面的附录。
编译程序用C语言编写。
整个课程设计分三个部分。
1.词法分析 可将其编成一个过程。对用对象语言编的源程序(存于磁盘中)逐行逐词地进行分析。将被识别的单词转化为规格相同的二元式(类号,内码),交给语法分析程序进一步处理。
2.语法分析 调用词法分析程序,取回单词的(类号,内码),按照语法规则检查它在语法上的正确性。对不正确的语句及时向用户报告出错的行号及出错的性质,以便及时纠正。这一部分实践不产生结果,只检查源程序的正确性。
3.不含函数说明和函数调用语句的源程序的翻译,强调语法制导翻译,即要求在一遍编译中生成四元式中间代码序列。
编译结果生成的中间代码可通过解释执行程序解释执行,并产生运行结果。但是解释程序不是编译的必要部分,其程序另外提供。
实验要求
要求该语言编译系统是一个编译—解释执行系统,其重点是编译。它采用一遍编译,以语法分析为核心,由它调用词法分析程序取回单词的类号,语法分析就利用这些类号查造符号表等,进行语法制导翻译。如遇语法或语义错,则随时调用出错处理程序,并显示出错信息。
在开发该语言的编译程序过程中,必须按照结构化程序设计方法开发软件,模块划分要清晰,模块间的数据传递格式要一致。编写的程序要便于调试、测试和维护,要求上机前编好程序并进行程序的静态跟踪,编制的程序要求文档齐全、添加必要的注释、提高程序可读性。
设计完成,撰写实验报告,
(要求分别阐述词法分析器、语法分析器、语义分析和翻译器的设计思路和方法,说明程序的系统流程或系统结构(可画出流程图)。
(要求给出词法分析器、语法分析器、语义分析和翻译器的独立的程序代码,并加以注释;
(给出测试用例的源程序以及运行结果,并分析其正确性。
(课程设计中遇到的问题,及如何解决,实验的收获、体会和建议。
实验一 词法分析
词法分析是编译程序设计的第一阶段,通常把词法分析当作过程处理而不作为独立的一遍。为了从编译程序的整体考虑,主程序应设计成循环迭代语句,每调用一次词法分析程序,返回一个二元式(类号,内码),直至返回‘.’的(26,-)二元式为止。其结构如下:
根据该语言的词法规则构造相应的有限自动机FA进行词法分析,符号表与常量表都从0号单元起存放,符号表需检查重定义。有能力的学生希望能处理无符号实数。
该语言各单词的类号见附录表1
要求该语言的某一源程序在词法分析后显示输出如下:
例1:program fibonacci; |13|21|24
var m:integer; |18|21|25|9|24
function fib (n:integer):integer; |7|21|27|21|25|9|28|25|9|24
begin |1
if n=0 then fib:=0 |8|21|38|22|16|21|44|22
else if n=1 then fib:=1 |5|8|21|38|22|16|21|44|22
else fib:= fib(n-1)+fib(n-2) |5|21|44|21|27|21|35|22|28
|34|21|27|21|35|22|28
end; |6|24
begin |1
read(m); |14|27|21|28|24
write(fib(m)) |20|27|21|27|21|28|28
end. |6|26
实验二 语法分析
语法分析是检查用该语言编写的源程序是否满足该语言的语法定义,它是编译程序的核心部分。当进行语法分析时,调用词法分析程序取回单词的类号,判别这些单词是否可组成正确的语句:如果正确,则语法分析通过,否则报告出错的性质及出错的行号。
语法分析分自上而下和自下而上两种方式,我们仅选择递归下降方法进行语法分析。语法分析的主程序大致如下:
main( )
{flag: boolean;
scanner(a,b);
if a=13 then scanner(a,b);
if a=21 then scanner(a,b);
if a=24 then scanner
文档评论(0)