网站大量收购独家精品文档,联系QQ:2885784924

PL0语言编译器的中间代码生成.docxVIP

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

课程设计报告

(2016--2017年度第一学期)

名称:编译技术课程设计

题目:PL/0语言编译器的中间代码生成

院系:控制与计算机工程

班级:信安1401

学号:1141290105

学生姓名:黄竞昶

指导教师:徐欢

设计周数:一周

成绩:

日期:2016年12月29日

1课程设计的目的和要求

1.1课程设计的目的

本次设计的时间为1周,目的是通过使用高级语言实现局部算法加强对编译技术和理论的理解。设计的题目要求具有一定的规模,应涵盖本课程内容和实际应用相关的主要技术。

1.2课程设计的要求

1、要求用递归子程序法/或预测分析法实现对表达式、各种说明语句、控制语句进行语法分析。

2、假设语法正确,那么用语法制导翻译法进行语义翻译:对说明语句,要求将说明的各符号记录到相应符号表中;对可执行语句,应产生出四元式中间代码并填写到三地址码表中;

3、假设语法错误,要求指出出错性质和出错位置〔行号〕。出错处理应设计成一个出错处理子程序。

2系统描述

PL/0的编译程序和目标程序的解释执行程序都是用JAVA语言书写的,因此PL/0语言可在配备JAVA语言的任何机器上实现。本次课设开发平台即为JAVA。用递归子程序法实现了对表达式、各种说明语句、控制语句进行语法的分析。其中,对各个变量符号保存到了符号表中。对可执行语句,转化成四元式中间代码进行输出。本程序中,通过出错处理子程序,也进行了语法的错误的记录,并且输出了出错的行号和出错原因。

该程序的输入是翻开test文件,通过文件输入流读入,输出有生成的中间代码、符号表内容、错误分析三局部内容,分别用java界面控件显示出来。

2.1文法的描述

在计算机科学中,文法是编译原理的根底,是描述一门程序设计语言和实现其编译器的方法。文法的描述多用BNF(巴克斯范式),而另一个重要的概念:正那么表达式,也是文法的另一种形式。

PL/0文法的EBNF表示:

程序::=分程序.

分程序::=[常量说明局部][变量说明局部][过程说明局部]语句

常量说明局部::=const常量定义{,常量定义};

常量定义::=标识符=无符号整数

无符号整数::=数字{数字}

标识符::=字母{字母|数字}

变量说明局部::=var标识符{,标识符};

过程说明局部::=过程首部分程序{;过程说明局部}

过程首部::=procedure标识符;

语句 ::=赋值语句|条件语句|当循环语句|过程调用语句

|复合语句|读语句|写语句|空

赋值语句::=标识符:=表达式

表达式 ::=[+|-]项{加法运算符项}

项::=因子{乘法运算符因子}

因子::=标识符|无符号整数|‘(’表达式‘)’

加法运算符::=+|-

乘法运算符::=*|/

条件::=表达式关系运算符表达式|odd表达式

关系运算符::==|||=||=

条件语句::=if条件then语句

当循环语句::=while条件do语句

过程调用语句::=call标识符

复合语句::=begin语句{;语句}end

读语句::=read‘(’标识符{,标识符}‘)’

写语句::=write‘(’表达式{,表达式}‘)’

字母::=a|b|c|d…..x|y|z

数字::=0|1|2|3…...8|9

3概要设计

3.1概要设计〔表达系统的设计思路和主要功能〕

首先在源程序相同的目录下创立一个txt文档,并在文档中输入需要编译的程序即if-else语句,然后定义一个输入流文件,利用这个流文件中的open函数翻开我需要编译的txt文件,在调用初始化各种变量的初始化函数。

接着开始进行词法分析,词法分析程序的主要任务是对构成源程序的字符串从左到右的扫描,逐个字符地读入源程序字符并按照构词规那么切分成一个一个具有独立意义的单词。并确定其属性〔如保存字、标识符、运算符、界限符和常量等〕。再把它们转换成长度统一的标准形式—属性字。

词法分析是编译过程中的第一个阶段,在语法分析前进行。也可以和语法分析结合在一起作为一遍,由语法分析程序调用词法分析程序来获得当前单词供语法分析使用。

单词的分类〔五类〕:

1.关键字:由程序语言定义的具有固定意义的标识符。也称为保存字或根本字。

2.标识符:用来表示程序中各种

文档评论(0)

181****7662 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档