FOR循环语句的翻译程序设计(简单优先法、三地址码)JAVA资料

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

学号:0121210340527

课内实践报告

课程名称编译原理

题目FOR循环语句的翻译程序设计(简

单优先法、输出三地址码)

学院计算机科学与技术

专业计算机科学与技术

班级1201

姓名李潇颖

指导教师林泓

2014 年12 月9 日

课内实践任务书

学生姓名:李潇颖专业班级:计算机1201班

指导教师:林泓工作单位:计算机科学与技术学院

题目: FOR循环语句的翻译程序设计(简单优先法、输出三地址码)初始条件:

理论:学完编译课程,掌握一种计算机高级语言的使用。

实践:计算机实验室提供计算机及软件环境。如果自己有计算机可以在其上进行设计。

要求完成的主要任务:(包括课内实践工作量及其技术要求,以及说明书撰写等具体

要求)

(1)写出符合给定的语法分析方法的文法及属性文法。

(2)完成题目要求的中间代码三地址码的描述。

(3)写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。

(4)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。

(5)设计报告格式按附件要求书写。课内实践报告书正文的内容应包括:

1 系统描述(问题域描述);

2 文法及属性文法的描述;

3 语法分析方法描述及语法分析表设计;

4 按给定的题目给出中间代码形式的描述及中间代码序列的结构设计;

5 编译系统的概要设计;

6 详细的算法描述(流程图或伪代码);

7 软件的测试方法和测试结果;

8 研制报告(研制过程,本设计的评价、特点、不足、收获与体会等);

9 参考文献(按公开发表的规范书写)。

时间安排:

设计安排一周:周1、周2:完成系统分析及设计。

周3、周4:完成程序调试及测试。

周5:撰写课内实践报告。

设计验收安排:设计周的星期五第1节课开始到实验室进行上机验收。

设计报告书收取时间:设计周的次周星期一上午10点。

指导教师签名:年月日

系主任(或责任教师)签名:

目录

1 系统描述(问题域描述) (3)

1.1设计目的 (3)

1.2设计内容描述 (3)

2.文法的描述 (3)

3 语法分析方法描述及语法分析表设计 (4)

3.1语法分析方法描述 (4)

3.2 分析法操作步骤 (4)

3.3优先关系矩阵 (5)

4 中间代码形式的描述 (6)

5 编译系统的概要设计(主要函数) (6)

6 详细的算法描述(流程图) (7)

6.1词法分析过程 (7)

6.2语法分析过程 0

6.3三地址码的输出 0

7 测试方法和测试结果 (1)

8.心得体会 (4)

9.代码(完整) (5)

10.本科生课内实践成绩评定表 (14)

FOR循环语句的翻译程序设计(简单优先法、输出三地址码)

1 系统描述(问题域描述)

1.1设计目的

通过学习编译原理的相关内容,设计并编写FOR循环语句的翻译程序,使用简单优先法,按三地址码输出,能够实现词法分析,语法和语义的分析,加深对所学知识的理解,并且能够熟练运用到实际当中。

1.2设计内容描述

FOR循环语句的基本格式如下:

FOR(表达式1;表达式2;表达式3){赋值语句}

根据所给题目要求,设计出符合FOR循环语句的文法及属性文法的描述,语法分析方法以及三地址码的输出方式,罗列出词法分析和语法分析的流程,根据语法规则设计输入输出方法,简单优先法中的优先关系表格。设计好并且进行编译,设计若干输入输出用例(包括正确的输入和错误的输入,用来检查程序的完整性)。

2.文法的描述

根据For语句的特点,制定的产生式规则及由产生式对应的语义动作如下:

H->f(G;A;B){S;}G O T O H->f(G;C;D){S;}G O T O G->i1=i2i1.C O D E=i2.C O D E A->i1=i2.CODE GOTO OVER B->i d i.C O D E=i.C O D E+1 C->i1>i2 IFi1.CODE<=i2.CODE GOTO OVER D->i a i.C O D E=i.C O D E-1 S->j=M j.C O D E=M.C O D E M->E M.C O D E=E.C O D E E->W E.C O D E=W.C O D E

W->W+U W.CODE=W.CODE+U.CODE W->W-U W.CODE=W.CODE-U.CODE W->U W.C O D E=U.C O D E U->T U.C O D E=T.C O D E T->T*F T.CODE=T.CODE”F.CODE T->T/F T.CODE=T.CODE/F.CODE T->F T.C O D E=F.C O D E F->(E) F.CODE=(E.C ODE) F->j F.C O D E=j.C O D E (备注:其中d表示--,a表示++)

3 语法分析方法描述及语法分析表设计

3.1语法分析方法描述

本次课内实践要求使用简单优先关系方法。

简单优先分析法的基本思想史对一个文法按照一定原则求出该文法所有符号即包括终结符和非终结符之间的优先关系确定归约过程中的句柄,它的归约实际上是一种规范归约。一个文法是简单优先文法必须满足以下条件

(1)在文法符号集V中,任意两个符号之间最多只有一种优先关系成立;

(2)在文法中任意两个产生式没有相同的右部。

三种优先关系及其判定方法如下所示:

(1)X=Y 表示X和Y的优先关系相等,当且仅当G中存在产生式规则A→…XY…;

(2)X

A→…XB…,且B Y…;

(3)X>Y表示X的优先性比Y的优先性大,当且仅当G中存在产生式规则

A→…BD…,且B…X和D Y…;

(4)对任何X,若文法开始符号S→X…,则##。

3.2 分析法操作步骤

由简单优先分析法的基本思想设计的如下算法,首先要构造优先关系矩阵(如3.3所示),并将文法产生式保存,设置符号数组S:

(1)将输入符号串a

1a

2…

a

n

# 依次逐个保存符号数组S中,直到遇到数组中第一个

符号a

i 的优先性>下一个待输入符号a

j

为止。

(2)数组当前符号a

i 为句柄尾,由此向左在数组中找句柄的头符号a

k

,即找到

a k-1

k

为止。

(3)由句柄a

k…

a

i

在文法的产生式中查找右部为a

k…

a

i

的产生式,若找到则用相应

左部代替句柄,找不到则为出错,这是可断定输入串不是该文法的句子。

(4)重复(1)(2)(3),直到归约完输入符号串,数组中只剩文法的开始符号为止。

相关文档
最新文档