编译课设报告--pl0编译器的中间代码生成_2

编译课设报告--pl0编译器的中间代码生成_2

ID:14629514

大小:2.98 MB

页数:23页

时间:2018-07-29

编译课设报告--pl0编译器的中间代码生成_2_第1页
编译课设报告--pl0编译器的中间代码生成_2_第2页
编译课设报告--pl0编译器的中间代码生成_2_第3页
编译课设报告--pl0编译器的中间代码生成_2_第4页
编译课设报告--pl0编译器的中间代码生成_2_第5页
资源描述:

《编译课设报告--pl0编译器的中间代码生成_2》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、课程设计报告(—年度第一学期)名称:编译技术课程设计题目:PL/0语言编译器的中间代码生成院系:班级:学号:学生姓名:指导教师:设计周数:一周成绩:日期:年月日1课程设计的目的和要求1.1课程设计的目的本次设计的时间为1周,目的是通过使用高级语言实现部分算法加强对编译技术和理论的理解。设计的题目要求具有一定的规模,应涵盖本课程内容和实际应用相关的主要技术,同时使大家将理论与实际应用结合起来,受到软件设计等开发过程的全面训练,从而提高软件开发的能力。1.2课程设计的要求1、要求用递归子程序法/或预测分析法实现对表达式、各种说明语句、控制语句进行语

2、法分析。2、若语法正确,则用语法制导翻译法进行语义翻译:对说明语句,要求将说明的各符号记录到相应符号表中;对可执行语句,应产生出四元式中间代码并填写到三地址码表中;3、若语法错误,要求指出出错性质和出错位置(行号)。出错处理应设计成一个出错处理子程序。2系统描述PL/0的编译程序和目标程序的解释执行程序都是用JAVA语言书写的,因此PL/0语言可在配备JAVA语言的任何机器上实现。本次课设开发平台即为JAVA。用递归子程序法实现了对表达式、各种说明语句、控制语句进行语法的分析。其中,对各个变量符号保存到了符号表中。对可执行语句,转化成四元式中间

3、代码进行输出。本程序中,通过出错处理子程序,也进行了语法的错误的记录,并且输出了出错的行号和出错原因。该程序的输入是打开test文件,通过文件输入流读入,输出有生成的中间代码、符号表内容、错误分析三部分内容,分别用java界面控件显示出来。2.1PL/0语言的描述PL/0语言的编译程序是一个编译解释执行系统。PL/0的目标程序为假想栈式计算机的汇编语言,与具体计算机无关。其编译过程采用一趟扫描方式,以语法分析类为核心,词法分析和代码生成类都作为一个独立的类,当语法分析需要读单词时就调用词法分析程序,而当语法分析正确需要生成相应的目标代码时,则调

4、用代码生成程序。用表格管理程序建立变量、常量和过程表示符的说明与引用之间的信息联系。用出错处理程序对词法和语法分析遇到的错误给出在源程序中出错的位置和错位性质。当源程序编译正确时,PL/0编译程序自动调用解释执行程序,对目标代码进行解释执行,并按用户程序的要求输入数据和输出运行结果。2.2PL/0文法的描述在计算机科学中,文法是编译原理的基础,是描述一门程序设计语言和实现其编译器的方法。文法的描述多用BNF(巴克斯范式),而另一个重要的概念:正则表达式,也是文法的另一种形式。PL/0文法的EBNF表示:<程序>::=<分程序>.<分程序>::=

5、[<常量说明部分>][<变量说明部分>][<过程说明部分>]<语句><常量说明部分>::=const<常量定义>{,<常量定义>};<常量定义>::=<标识符>=<无符号整数><无符号整数>::=<数字>{<数字>}<标识符>::=<字母>{<字母>

6、<数字>}<变量说明部分>::=var<标识符>{,<标识符>};<过程说明部分>::=<过程首部><分程序>{;<过程说明部分>}<过程首部>::=procedure<标识符>;<语句>::=<赋值语句>

7、<条件语句>

8、<当循环语句>

9、<过程调用语句>

10、<复合语句>

11、<读语句>

12、<写语句>

13、<空

14、><赋值语句>::=<标识符>:=<表达式><表达式>::=[+

15、-]<项>{<加法运算符><项>}<项>::=<因子>{<乘法运算符><因子>}<因子>::=<标识符>

16、<无符号整数>

17、‘(’<表达式>‘)’<加法运算符>::=+

18、-<乘法运算符>::=*

19、/<条件>::=<表达式><关系运算符><表达式>

20、odd<表达式><关系运算符>::==

21、<>

22、<

23、<=

24、>

25、>=<条件语句>::=if<条件>then<语句><当循环语句>::=while<条件>do<语句><过程调用语句>::=call<标识符><复合语句>::=begin<语句>{

26、;<语句>}end<读语句>::=read‘(’<标识符>{,<标识符>}‘)’<写语句>::=write‘(’<表达式>{,<表达式>}‘)’<字母>::=a

27、b

28、c

29、d…..x

30、y

31、z<数字>::=0

32、1

33、2

34、3…...8

35、92.3PL/0语法描述图图2-3-1程序语法描述图图2-3-2分程序语法描述图图2-3-3语句语法描述图2-3-4条件语句描述图图2-3-5表达式语法描述图2-3-6项语法描述图2-3-7因子语法描述3概要设计3.1概要设计(体现系统的设计思路和主要功能)该编译器采用JAVA语言编写,共采用了七个类,48个方法(函数)

36、用来功能实现,其中pl0类为main方法所在的类,是整个编译主程序类和主界面框架类。getsym类为编译器的词法分析类和block类为编译器的语法分析

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。