没有合适的资源?快使用搜索试试~ 我知道了~
首页IF-ELSE条件语句的翻译程序设计(递归下降法、输出三地址表示)
1、问题描述 1 2、问题分析 1 3、词法分析 1 3.1总体分析 1 3.2具体分析 1 4、文法描述 2 5、语法分析方法描述及语法分析表设计 3 6、中间代码形式的描述及中间代码序列的结构设计 3 7、详细的算法描述 4 7.1主要的词法分析如下 4 7.2主要的词法分析及三地址形式分析如下 6 8、软件测试方法和测试结果 10 8.1软件测试方法 10 8.2测试结果 10 9、收获与心得 13 10、参考文献 14 11、附源代码 14
资源详情
资源评论
资源推荐
目录
1、问题描述.......................................................................................................................................1
2、问题分析.......................................................................................................................................1
3、词法分析.......................................................................................................................................1
3.1 总体分析...............................................................................................................................1
3.2 具体分析...............................................................................................................................1
4、文法描述.......................................................................................................................................2
5、语法分析方法描述及语法分析表设计.......................................................................................3
6、中间代码形式的描述及中间代码序列的结构设计..................................................................3
7、详细的算法描述...........................................................................................................................4
7.1 主要的词法分析如下...........................................................................................................4
7.2 主要的词法分析及三地址形式分析如下...........................................................................7
8、软件测试方法和测试结果.........................................................................................................10
8.1 软件测试方法.....................................................................................................................10
8.2 测试结果.............................................................................................................................10
9、收获与心得.................................................................................................................................14
10、参考文献...................................................................................................................................14
11、附源代码...................................................................................................................................14
1
IF-ELSE 条件语句的翻译程序设计
1、问题描述
要求用递归下降法及中间代码三地址形式,对 IF-THEN-ELSE 条件语句完
成编译过程,其中包括词法分析、语法分析、语义分析等,并要求符合下列要
求:
(1)写出符合给定的语法分析方法的文法及属性文法。
(2)完成题目要求的中间代码三地址表示的描述。
(3)写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。
(4)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程
序。
2、问题分析
按编译原理的设计规则,先建立一个词法分析子程序,对输入的程序依次
进行词法分析,然后对分析后的结果使用递归下降法进行文法分析,同时记录
分析的中间结果使用三地址的形式输出。
3、词法分析
3.1 总体分析
词法分析即对输入的源程序从左到右进行扫描,对组成源程序的字符串拼
接成为单词,并把其转换成属性字输出到文件中。
3.2 具体分析
将属性字分为 5 大类:关键字、标识符、界限符、运算符和常量。首先创
建三个数组用来存放关键字、运算符和界限符。分别如下:
char keyWord[33][10]={"auto","double","main","int","struct","break","else","long",
"switch","case","enum","register","typedef","char","extern","return",
"union","const","float","short","unsigned","continue","for","signed",
"void","default","goto","sizeof","volatile","do","if","while","static"};//关键字
char symbol[12]={'+','-','*','/','%','&','|','~','^','=','>','<'};//运算符
char separate[15]={'!','.','{','}',';','\'','\"','#','(',')','[',']',',','?',':'};//界限符
12
武汉理工大学《编译原理》课程设计报告
再建立两个数组 char a[200][15]和 int b[200]。a[200][15]用来存放分析出来
的单词,b[200]用来存放和 a[200][15]中相对应的属性,在 b[200]中约定关键字
设为 0,标识符设为 1,常数设为 2,运算符设为 3,界限符设为 4。
词法分析的主要流程如下:
4、文法描述
文法是用于描述语言的语法结构的形式规则(即语法规则)。这些规则必须
是准确的、易于理解的以及有相当强的描述能力。由这种规则所产生的程序语
言应有利于句子分析和翻译,而且,最好能通过这些规则自动产生有效的语法
分析程序
条件语句的文法如下所示:
、
、
、
、 !
开始
初始化
从输入流中读入下一个字符, char
char 是 否 为
null
char 的类型?
NO
结束
关键字
标识符
运算符
常数
界限符
YES
13
武汉理工大学《编译原理》课程设计报告
"、 #$%
&、
'、!
5、语法分析方法描述及语法分析表设计
递归下降法又称递归子程序法。在程序语言的语法定义中有许多采用递归
定义。我们在对它进行语法分析时,编制的处理程序也采取递归的方式,可使
其结构简单易读。但由于频繁地调用子程序大大地降低了分析速度。
" 递归下降法的主要思想:
对每个非终结符按其产生式结构写出相应语法分析子程序。因为文法递归
相应子程序也递归,子程序的结构与产生式结构几乎一致。所以称此种方法称
为递归子程序法或递归下降法。
" 用程序表示递归子程序的内部结构:
设 是一个非终结符: ()
()
*
()
则写 +,-Û./0120,)-+,)-
./0120,)-+,)-
3
./0120,)-+,)-
4454
其中 +,)-表示调用处理符号串 ) 的子程序。
、任一非终结符 都不是左递归的,否则会产生死循环。
、对 的任意两个右部 )6)76有:20,)-820,)7-9:。0,)-表
示 ) 所能导出串的第一个符号的集合。显然,每个 ) 的 20,)-是互不相同的
否则则无法判断应执行哪个 +,)-。
6、中间代码形式的描述及中间代码序列的结构设计
中间代码保存在一个三地址的结构体中以方便进行输出,三地址的结构如
14
武汉理工大学《编译原理》课程设计报告
下:x=y op z 其中 x、y、z 为变量 op 为操作符。本程序是依据 IF-THEN-ELSE
设计的,故在输出时会用到:
赋值形式:x=y 或 x=y op z
条件判断 Ln:if a>b Lm 其中 Ln 和 Lm 分别为跳转标志
综上设计三地址的结构应该为:
typedef struct
{
int length;
char a[5][15];//记录形式为goto if a>b jump
int address;
}TripAdd;
在本次课设中,以 ,/;-/9;%.<;9.<为例
输出三地址形式为:
=6/;6>
=6666
>?/96;6%6.
=6666>>
?;96.66
=6666>>
>>?666
7、详细的算法描述
7.1 主要的词法分析如下
词法分析通过读入的每一字符进行判断,并在判断是对其进行分类并存储
起来。具体算法如下:
int readCode(char a[200][15],int b[200],char readPath[])
{
FILE *fpin;
char ch;
int j=0; //记数词法
int k=0; //记数每个字符串中单词的位置
int temp=0; //用来存储上一次读取的字符类型,界限符为,数字为,其他的
为
//char temp2; //用来存储本次的字符类型
for(int l=0;l<200;l++)
{
剩余27页未读,继续阅读
wwwlxz123
- 粉丝: 18
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0