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

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PL0语言编译器的中间代码生成

课程设计报告 ( 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|93 概要设计3.1 概要设计(体现系统的设计思路和主要功能)首先在源程序相同的目录下创建一个txt文档,并在文档中输入需要编译的程序即if-else语句,然后定义一个输入流文件,利用这个流文件中的open函数打开我需要编译的txt文件,在调用初始化各种变量的初始化函数。接着开始进行词法分析,词法分析程序的主要任务是对构成源程序的字符串从左到右的扫描,逐个字符地读入源程序字符并按照构词规则切分成一个一个具有独立意义的单词。并确定其属性(如保留字、标识符、运算符、界限符和常量等)。再把它们转换成长度统一的标准形式—属性字。词法分析是编译过程中的第一个阶段,在语法分析前进行。也可以和语法分析结合在一起作为一遍,由语法分析程序调用词法分析程序来获得当前单词供语法分析使用。单词的分类(五类):1. 关键字:由程序语言定义的具有固定意义的标识符。也称为保留字或基本字。2. 标识符:用来表示程序中各种名字的字符串。3. 常数:常数的类型一般有整型、实型、布尔型、文字型。4. 运算符:如+、-、*、/ 等。5. 界限符:如逗号、分号、括号等。但是我做的这个实验没有用到那么多东西,词法分析的有效字符串为: IF,ELSE,THEN, ,,.=,=,=,和从a到z的单个标识符,但是程序还是相对来说比较简单,复杂的表达式可能不能处理,以后会改进。而词法分析的结果就是将相应的单词赋予不同的属性值,利用词法分析表将结果保存起来,为后面的语

文档评论(0)

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

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

版权声明书
用户编号:6212135231000003

1亿VIP精品文档

相关文档