编译原理实验指导书80332.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文档。上传文档
查看更多
编译原理实验指导书80332.doc

编译原理实践 《编译原理实践教程》作为《编译原理和技术》课程的延伸,其目的是让大家动手设计和实现某一规模适中的语言的编译器,该编译器不仅涉及编译程序的各个阶段,而且也强调了编译的总体设计、各个阶段的接口安排等等。 通过上机实践,来设计这个相对完整的编译器,一方面可以使学生增加对编译程序的整体认识和了解——巩固《编译原理和技术》课程所学知识,另一方面,通过上机练习,学生也可以学到很多程序调试技巧和设计大型程序一般的原则,如模块接口的协调,数据结构的合理选择等等。 为了使学生能尽早动手实践,我们建议把实践分成三部分,首先阅读本教程第一部分,在这部分就PL/0语言的语法及其编译程序的各个阶段作了简单介绍,以便对PL/0编译程序有个初步的印象。其次要认真阅读理解第三部分所给出的PL/0编译器源程序,使上一阶段的初步印象得以加深、具体化。最后按照第二部分的实验要求扩充PL/0语言的功能并加以实现。 第一部分 PL/0语言及其编译器 1. PL/0语言介绍 PL/0程序设计语言是一个较简单的语言,它以赋值语句为基础,构造概念有顺序、条件和重复(循环)三种。PL/0有子程序概念,包括过程定义(可以嵌套)与调用且有局部变量说明。PL/0中唯一的数据类型是整型,可以用来说明该类型的常量和变量。当然PL/0也具有通常的算术运算和关系运算。具体的PL/0语法图见书。 1.1 词法分析 PL/0的语言的词法分析器将要完成以下工作: 跳过分隔符(如空格,回车,制表符); 识别诸如begin,end,ifwhile等保留字; 识别非保留字的一般标识符,此标识符值(字符序列)赋给全局量id,而全局量sym赋值为SYM_IDENTIFIER。 识别数字序列,当前值赋给全局量NUM,sym则置为SYM_NUMBER; 识别:=,=,=之类的特殊符号,全局量sym则分别被赋值为SYM_BECOMES,SYM_LEQ,SYM_GEQ等。 相关过程(函数)有getsym(),getch(),其中getch()为获取单个字符的过程,除此之外,它还完成: 识别且跳过行结束符; 将输入源文件复写到输出文件; 产生一份程序列表,输出相应行号或指令计数器的值。 1.2 语法分析 我们采用递归下降的方法来设计PL/0编译器。以下我们给出该语言的FIRST和FOLLOW集合。 非终结符(S) FIRST(S) FOLLOW(S) 程序体 const var procedure ident call if begin while . ; 语句 ident call begin if while . ; end 条件 odd + - ( ident number then do 表达式 + - ( ident number . ; ) R end then do 项 ident number ( . ; ) R + - end then do 因子 ident number ( . ; ) R + - * / end then do 注:表中R代表六个关系运算符。 不难证明,PL/0语言属于LL(1)文法。(证明从略。) 以下是我们给出如何结合语法图编写(递归下降)语法分析程序的一般方法。假定图S所对应的程序段为T(S),则: 用合适的替换将语法约化成尽可能少的单个图; 将每一个图按下面的规则(3)-(7)翻译成一个过程说明; 顺序图对应复合语句: 对应:begin T(S1); T(S2); ...; T(Sn) end 选择: 对应:case语句或者条件语句: case ch of if ch in L1 then T(S1) else L1: T(S1); if ch in L2 then T(S2) else L2: T(S2); 或 ... ... if ch in Ln then T(Sn) else Ln: T(Sn); error 其中Li∈FIRST(Si),ch为当前输入符号。(下同) 循环 对应:while ch in L do T(S) 表示另一个图A的图: 对应:过程调用A。 表示终结符的单元图: 对应:if ch == x then read(ch) else error 相关过程有: block(), constdeclaration(), vardeclaration(), statement(), condition(), expression(), term(), factor()等。 它们之间依赖关系如图1-2: 1.3 语义分析 PL/0的语义

文档评论(0)

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

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

1亿VIP精品文档

相关文档