没有合适的资源?快使用搜索试试~ 我知道了~
for循环语句的编译课程设计
3星 · 超过75%的资源 需积分: 10 8 下载量 134 浏览量
2010-01-11
18:26:15
上传
评论
收藏 581KB DOC 举报
温馨提示
试读
31页
自己做的编译原理课程设计,得了优,关于for循环语句编译成四元式
资源详情
资源评论
资源推荐
目 录
引言..............................................................1
第一章 概述....................................................2
1.1 设计题目及内容.............................................2
1.2 设计环境...................................................2
第二章 设计的基本原理..........................................3
2.1 LR 分析概述...............................................3
2.2 文法及属性文法的描述......................................4
2.3 语法分析表设计............................................4
2.4 中间代码形式的描述及中间代码序列的结构设计................6
第三章 程序设计................................................8
3.1 总体方案设计..............................................8
3.2 各模块设计.................................................8
第四章 程序测试................................ .................11
第五章 研制报告..................................................17
参考文献..........................................................19
附录 程序清单................................................20
第一章 概述
1.1 设计题目及内容
设计题目:FOR 循环语句的翻译程序设计
设计内容:
本设计按照要求设计出 for 语句的简单文法,并使用 LR 分析法对用户输入的程
序进行分析和翻译。
对下列正确的程序输入:
for(i=0;i<20;i++)
{
m=m+i;
}
结果程序要对该输入进行词法分析,然后利用 LR 分析法对词法分析后得到的
单词序列进行语法分析,经过语法制导翻译显示出等价的四元式表示的中间代
码。
对于错误的程序输入,如:
for(i=0;i<20)
{
m=m+i;
}
结果程序要指出程序出错。
1.2 设计环境:
硬件设备:一台 PC 机
软件设备:Windows 2000/XP OS ,VC++6.0
实现语言:C 语言
第二章 设计的基本原理
2.1 LR 分析概述
一个 LR 分析器由 3 个部分组成:
⑴总控程序,也可以称为驱动程序。对所有的 LR 分析器总控程序都是相同的。
⑵分析表或分析函数。不同的文法分析表将不同,同一个文法采用的 LR 分析
器不同时,分析表也不同,分析表又可分为动作( ACTION)表和状态转换
(GOTO)表两个部分,他们都可用二维数组表示。
⑶分析栈,包括文法符号栈和相应的状态栈。它们均是先进后出栈。
分析器的动作由栈顶状态和相应的状态栈所决定(LR(0)分析器不需向前查
看输入符号)。
LR 分析器工作过程示意图如下图所示:
其中 SP 为栈指针,S[i]为状态栈,X[i]为文法符号栈。状态转换表内容按关
系 GOTO[Si,X]=Sj 确定,该关系式是指当栈顶状态为 Si 遇到当前文法符号为
X 时应转向状态 Sj。X 为终结符或非终结符。
ACTION[Si,a]规定了栈顶状态为 Si 时遇到输入符号 a 应执行的动作。动作
有 4 种可能:
⑴移进:
档 Sj=GOTO[Si,a]成立,则把 Sj 移入到状态栈,把 a 移入到文法符号栈。
其中 i,j 表示状态号。
⑵归约:
档在栈顶形成句柄为 β 时,则用 β 归约为相应的非终结符 A,即当文法中
有 A→β 的产生式,而 β 的长度为 r(即|β|=r),则从状态栈和文法符号栈中
自栈顶向下去掉 r 个符号,即栈指针 SP 减去 r。并把 A 一如文法符号栈内,再
把满足 Sj=GOTO[Si,A]的状态移进状态栈,其中 Si 为修改指针后的栈顶状态。
⑶接受 acc:
当归约到文法符号栈中只剩文法的开始符号 S 时,并且输入符号串已结束
即当前输入符是‘#’,则为分析成功。
⑷报错:
当遇到状态栈顶为某一状态下出现不该遇到的文法符号时,则报错,说明
输入串不是该文法能接受的句子。
2.2 文法及属性文法的描述
按照设计要求,设计出的 For 语句的符合简单优先定义的文法规则及相关的语
义规则如下:
产生式 语义规则
S f ( E ; F ; G ){ H ;} goto
S f ( E ; X ; Y ){ H ;} goto
E id = c id.value=c.value;
F id < c If id.value>=c.value goto over ;
G id + + id.value=id.value+1 ;
X id > c If id.value<=c.value goto over ;
Y id – – id.value=id.value-1;
Hid
1
= id
2
+ id
3
id
1
.value= id
2
.value + id
3
.value
H id
1
= id
2
+ c id
1
.value= id
2
.value + c
.value
H id
1
= c+ id
2
id
1
.value= c.value + id
2
.value
其中产生式规则中的符号: c 表示常数 const , f 表示关键字 for , i 表示一
般标识符 id
2.3 语法分析表设计
.1 根据上述文法构造的有穷自动机和根据有穷自动机构造的 LR(0)分析表
①有穷自动机:
② LR(0)分析表:
ACTION GOTO
f ( ; ) { } id = c < + > - # S E F G X Y H
0 S2 1
1
ac
c
2 S3
3 S5 4
4 S6
5 S7
6 S1 8 9
0
7
S1
1
8
S1
2
9
S1
3
1
0
S1
4
S1
5
1
1
R3 R3 R3 R3 R3 R3 R3 R3 R3 R3 R3 R3 R3 R3
1
2
S1
7
1
6
1
3
S1
9
1
8
1
4
S2
0
1
5
S2
1
1
6
S2
2
1
7
S2
3
1
8
S2
4
1
9
S2
5
2
0
R4 R4 R4 R4 R4 R4 R4 R4 R4 R4 R4 R4 R4 R4
2
1
R6 R6 R6 R6 R6 R6 R6 R6 R6 R6 R6 R6 R6 R6
2
2
S2
6
2
3
S2
7
2
4
S2
8
2
5
S2
9
2
6
S3
1
3
0
2
7
R5 R5 R5 R5 R5 R5 R5 R5 R5 R5 R5 R5 R5 R5
剩余30页未读,继续阅读
dulewangzi
- 粉丝: 1
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论1