系统软件课程设计实验指导(编译系统部分).doc

系统软件课程设计实验指导(编译系统部分).doc

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

lizhencai0920 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:6100124015000001

1亿VIP精品文档

相关文档