学 号: | |
课 程 设 计
题 目 | FOR循环语句的翻译程序设计 (LL(1)法、输出四元式) |
学 院 | 计算机科学与技术 |
专 业 | 计算机科学与技术 |
班 级 | 计算机0901班 |
姓 名 | |
指导教师 | |
2012 | 年 | 01 | 月 | 03 | 日 |
课程设计任务书
学生姓名: 专业班级: 计算机0901班
指导教师: 工作单位: 计算机科学与技术学院
题目: FOR循环语句的翻译程序设计(LL(1)法、输出四元式)
初始条件:
理论:学完编译课程,掌握一种计算机高级语言的使用。
实践:计算机实验室提供计算机及软件环境。如果自己有计算机可以在其上进行设计。
要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
(1)写出符合给定的语法分析方法的文法及属性文法。
(2)完成题目要求的中间代码四元式的描述。
(3)写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。
(4)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。
(5)设计报告格式按附件要求书写。课程设计报告书正文的内容应包括:
1 系统描述(问题域描述);
2 文法及属性文法的描述;
3 语法分析方法描述及语法分析表设计;
4 按给定的题目给出中间代码形式的描述及中间代码序列的结构设计;
5 编译系统的概要设计;
6 详细的算法描述(流程图或伪代码);
7 软件的测试方法和测试结果;
8 研制报告(研制过程,本设计的评价、特点、不足、收获与体会等);
9 参考文献(按公开发表的规范书写)。
时间安排:
设计安排一周:周1、周2:完成系统分析及设计。
周3、周4:完成程序调试及测试。
周5:撰写课程设计报告。
设计验收安排:设计周的星期五第1节课开始到实验室进行上机验收。
设计报告书收取时间:设计周的次周星期一上午10点。
指导教师签名: 2011年11月18日
系主任(或责任教师)签名: 2011年11月18日
FOR循环语句的翻译程序设计
——LL(1)法、输出四元式
1.系统描述
1.1问题描述
用LL(1)法设计、编制、调试一个FOR(表达式1;表达式2;表达式3)〈赋值语句〉的语法及语义分析程序,输出四元式。
1.2功能描述
(1)能够识别出单词、单词类型、单词位置
(2)能够用LL(1)方法识别单词序列是否符合FOR循环文法
(3)能够完成对FOR循环中3个表达式的翻译
(4)能够完成对FOR循环中赋值语句(含复杂表达式)的翻译
(5)能够对FOR循环3个表达式中有表达式1或3缺少时翻译
(6)能够用标准化的四元式进行翻译结果输出
(7)能够用四元式清晰、正确地反映FOR循环的执行流程
(8) 能够用文本输入FOR语句循环,再用txt文本输出分析结果
2 文法及属性文法的描述
2.1文法的语言描述
A->for(条件){赋值语句}
while循环语句的程序流程图条件->语句1 语句2 语句3
语句1->i = 表达式; //i表示标识符
语句1->;
语句2->i > 表达式;
语句2->i < 表达式;
语句3->i = 表达式;
语句3->undefined
赋值语句->m = 表达式 //m表示标识符,作为左值出现
赋值语句->undefined
表达式->表达式+表达式
表达式->表达式-表达式
表达式->表达式*表达式
表达式->表达式/表达式
表达式->(表达式)
表达式->i //i 表示标识符、常数、字符、或字符串
2.2属性文法描述
2.2.1 FOR 语句
FOR(C D G)
n C
n+1 if D==true goto Y.start
n+2 d+3
Y.start ...................//赋值语句的开始
...... ...................
Y.end ...................//赋值语句结束
Y.end+1 G
Y.end+2 goto n+1
Y.end+3 //跳出循环体后第一条语句
2.2.2 赋值语句
Y->m=E; { m.value=E.Value }
E->E1 op E2 (op: +,-,*,/,>或<)
{
E.place = newtemp; //生成新的变量
E.value =E1.value op E2.value
}
N->(E) { N.value=E.value }
N->i { N.value=i.value }
3.语法分析方法描述及语法分析表设计
3.1 对LL(1)分析的描述
LL(1):第1个L表明自顶向下分析是从左向右扫描输入串,第2个L表明分析过程中将用最左推导,1表明只需向右看一个符号便可决定如何推导即选择哪个产生式(规则)进行推导。从文法的开始符号出发企图推导出与输入的单词串完全相匹配的句子,若输入串是文法给定的句子,则必能推出,反之必然出错。
LL(1)优点:实现方法简单、直观,便于手工构造或自动生成语法分析器 。文法很 容易写出。
LL(1)缺点:对文法有一定得限制,要求推导过程中紧跟在飞终结符右边可能出现的终结符集不相交。另外在做语法制导翻译时中间代码的输出方案相对于LR法比较复杂。LR分析法的句柄即体现了算符的优先级,出现句柄即做相应的归约动作,中间代码很容易写出,实现很简单。LL(1)是做自顶向下推导,因此设计LL(1)的语法制导翻译输出中间代码很需要技巧,涉及到了判断符号的优先级。
3.2 语法分析表设计
文法(消除了左递归)及相应的选择符集
NO. | 文法 | SELECT集 |
0 | A->f(B){Y} | { f } |
1 | B->CDG | { ;,i } |
2 | Y->undefined | { } } |
3 | Y->m=E | { m } |
4 | C->; | { ; } |
5 | C->i=E | { i } |
6 | D->iF; | { i } |
7 | F-><E; | { < } |
8 | F->>E | { > } |
9 | G->undefined | { ) } |
10 | G->i=E | { i } |
11 | E->LM | { (,i } |
12 | M->+LM | { +} |
13 | M->-LM | { - } |
14 | M->undefined | { ),; } |
15 | L->NP | { (,i } |
16 | P->*NP | { * } |
17 | P->/NP | { / } |
18 | P->undefined | { +,-,),;} |
19 | N->i | { i } |
20 | N->(E) | { ( } |
3.3 预测分析表设计
表达式文法的预测分析表
f | i | m | ; | < | > | + | - | * | / | ( | ) | { | } | = | |
A | 0 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 |
B | -1 | 1 | -1 | 1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 |
C | -1 | 5 | -1 | 4 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 |
D | -1 | 6 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 |
E | -1 | 11 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | 11 | -1 | -1 | -1 | -1 |
F | -1 | -1 | -1 | -1 | 7 | 8 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 |
G | -1 | 10 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | 9 | -1 | -1 | -1 |
L | -1 | 15 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | 15 | -1 | -1 | -1 | -1 |
M | -1 | -1 | -1 | 14 | -1 | -1 | 12 | 13 | -1 | -1 | -1 | 14 | -1 | -1 | -1 |
N | -1 | 19 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | 20 | -1 | -1 | -1 | -1 |
P | -1 | -1 | -1 | 18 | -1 | -1 | 18 | 18 | 16 | 17 | -1 | 18 | -1 | -1 | -1 |
Y | -1 | -1 | 3 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | 2 | -1 |
说明:
1. 第1列为终结符,第1行为非终结符
2. 非终结符与终结符的交点出表示将要选择哪个产生式做预测分析进行推导
3. -1表示出错,其余数字为产生式的序号NO,表示选择相应的产生式
4.间代码形式的描述及中间代码序列的结构设计
4.1 四元式描述
四元式是一种比较普遍采用的中间代码形式。四元式的四个组成部分是:算符op,第一和第二运算对象ARG1和ARG2及运算结果RESULT,运算对象和运算结果有时指用户自己定义的变量,有时指编译程序引进的临时变量。
例如a=b*c+b*d的四元式表示如下:
(1)(* ,b,c,t1)
(2)(* ,b,d,t2)
(3)(+ ,t1,t2,t3)
(4)(= ,t3,-, a)
四元式表示很类似于三地址指令,有时把这类中间表示称为“三地址代码”,因为这种表示可以看成一种虚拟三地址机的通用汇编码,即这种虚拟机的每条“指令”包含操作符和三个地址,两个是为运算对象的,一个为结果的。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论