FOR循环语句的翻译程序设计
- 格式:doc
- 大小:490.50 KB
- 文档页数:17
目录
1 系统描述 (2)
1.1目的 (2)
1.2设计内容: (2)
1.3翻译过程 (2)
1.4初始条件: (3)
1.5 开发平台 (3)
2文法及属性文法的描述 (3)
3 语法分析表设计 (4)
3.1 LR分析概述 (4)
3.2 LR(0)分析表 (5)
3.3 LR语法分析过程的设计思想及算法 (7)
3.4 翻译方法 (8)
4 中间代码形式的描述及中间代码序列的结构设计 (8)
5简要的分析与概要设计 (9)
6详细的算法描述 (9)
6.1 main函数 (10)
6.2词法分析 (10)
6.3 语法分析 (12)
7 测试方法和测试结果 (13)
7.1测试过程 (13)
7.2 测试结论 (14)
8 研制报告 (14)
8.1研制过程 (14)
8.2本设计的评价 (15)
8.3个人心得体会 (15)
9 参考文献 (16)
本科生课程设计成绩评定表 (17)
FOR循环语句的翻译程序设计
——LR方法、输出四元式
1 系统描述
1.1目的
通过设计、编制、调试一个FOR循环语句的语法及语义分析程序,加深对语法及语义分析原理的理解,实现词法分析程序对单词序列的词法检查和分析,并且实现对单词序列的语法分析、语义分析以及中间代码生成。
1.2设计内容:
本设计按照要求设计出for语句的简单文法,并使用LR分析法对用户输入的程序进行分析和翻译。
对下列正确的程序输入:
for(i=0;i<10;i++)
{
m=m+i;
}
结果程序要对该输入进行词法分析,然后利用LR分析法对词法分析后得到的单词序列进行语法分析,经过语法制导翻译显示出等价的四元式表示的中间代码。
对于错误的程序输入,如:
for(i=0;i<10)
{
m=m+i;
}
结果程序要指出程序出错。
1.3翻译过程
①词法分析:词法分析是编制一个读单词的过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编码及单词符号自身值。程序语言的单词符号一般分为五种:关键字(保留字/基本字)if、while、begin…;标识符:常量名、变量名…;常数:34、56.78、true、‘a’、…;运算符:+、-、*、/、〈、and、or、….、;界限符:,;(){ } /*…。
②语法分析:语法分析是编译程序的核心部分,其主要任务是确定语法结构,检查语法错误,报告错误的性质和位置,并进行适当的纠错工作。此次设计中语法分析中主要通过LR分析表对语法分析处理过程进行控制,使四元式翻译的工作有条不紊的进行,同时识别语法分析中的语法错误。
③中间代码生成:为了使编译程序有较高的目标程序质量,或要求从编译程序逻辑结构上把与机器无关和与机器有关的工作明显的分开来时,许多编译程序都采用了某种复杂性介于源程序语言和机器语言之间的中间语言。常用的几种中间语言有: 逆波兰式、四元式、三元式、树表示。本课程设计主要实现四元式的生成。
1.4初始条件:
理论:掌握一种计算机高级语言的使用。学完编译课程,掌握词法分析程序设计方法,LR语法分析方法,以及语法制导的翻译和中间代码生成技术。实践工具和环境:计算机实验室提供计算机及软件环境。
1.5 开发平台
所使用的系统:Windows XP
程序开发工具:Visual C++ 6.0
程序设计语言:C++。
。
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;
H→id 1 = id 2 + id 3id 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 2id 1 .value= c.value + id 2 .value
其中产生式规则中的符号: c 表示常数const ,f表示关键字for ,i表示一般标识符id
3语法分析表设计
3.1 LR分析概述
一个LR分析器由3个部分组成:
⑴总控程序,也可以称为驱动程序。对所有的LR分析器总控程序都是相同的。
⑵分析表或分析函数。不同的文法分析表将不同,同一个文法采用的LR分析器不同时,分析表也不同,分析表又可分为动作(ACTION)表和状态转换(GOTO)表两个部分,他们都可用二维数组表示。
⑶分析栈,包括文法符号栈和相应的状态栈。它们均是先进后出栈。
分析器的动作由栈顶状态和相应的状态栈所决定(LR(0)分析器不需向前查看输入符号)。
LR分析器工作过程示意图如下图所示: