编译技术课程设计
班    级     计算机0802       
学    号     **********       
姓    名         周勇         
指导老师       朱玉全         
二零一一年 七 月
编译技术课程设计
一、目的
<<编译技术>>是理论与实践并重的课程,而其实验课要综合运用一、二年级所学的多门课程的内容,用来完成一个小型编译程序。从而巩固和加强对词法分析、语法分析、语义分析、代码生成和报错处理等理论的认识和理解;培养学生对完整系统的独立分析和设计的能力,进一步培养学生的独立编程能力。
二、任务及要求
基本要求:
1.词法分析器  产生下述小语言的单词序列
这个小语言的所有的单词符号,以及它们的种别编码和内部值如下表:
   
单词符号
种别编码
助记符
内码值
DIM
IF
DO
STOP
END
标识符
常数(整)
=
+
*
**
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$DIM
$IF
$DO
$STOP
$END
$ID
$INT
$ASSIGN
$PLUS
$STAR
$POWER
符合标识符的字符串是什么
$COMMA
$LPAR
$RPAR
-
-
-
-
-
-
内部字符串
标准二进形式
-
-
-
-
-
-
对于这个小语言,有几点重要的限制:
首先,所有的关键字(如IF﹑WHILE等)都是“保留字”。所谓的保留字的意思是,用户不得使用它们作为自己定义的标示符。例如,下面的写法是绝对禁止的:
                      IF(5)=x                     
其次,由于把关键字作为保留字,故可以把关键字作为一类特殊标示符来处理。也就是说,对于关键字不专设对应的转换图。但把它们(及其种别编码)预先安排在一张表格中(此表叫作保留字表)。当转换图识别出一个标识符时,就去查对这张表,确定它是否为一个关键字。
再次,如果关键字、标识符和常数之间没有确定的运算符或界符作间隔,则必须至少用一个空白符作间隔(此时,空白符不再是完全没有意义的了)。例如,一个条件语句应写为
                         IF  i>0  i= 1;
而绝对不要写成
              IFi>0  i=1;
因为对于后者,我们的分析器将无条件地将IFI看成一个标识符。
这个小语言的单词符号的状态转换图,如下图:
2.语法分析器 能识别由加+ 减-* / 乘方^ 括号()操作数所组成的算术表达式,其文法如下:
EE+T|E-T|T
TT*F|T/F|F
FP^F|P
p(E)|i
      使用的算法可以是:预测分析法递归下降分析法;算符优先分析法;LR分析法等。
3.中间代码生成器 产生上述算术表达式的中间代码(四元式序列)
较高要求:
1.扩充上述小语言的单词;
2.增加语法分析器的功能,能识别条件语句和循环语句等;
3.增加中间代码生成器的功能,能产生条件语句和循环语句等的中间代码(四元式序列)
4.增加报错功能;
5.将中间代码翻译成汇编语言。
三、实现过程说明
给出各题目的详细算法描述,数据结构和函数说明,流程图。
(1)词法分析器:
1算法描述:
词法分析阶段的基本任务是从以字符串表示的源程序中识别出具有独立意义的单词符号。通过DOS环境手动输入字符串序列(以$作为结束标志)作为带分析的源程序,调用词法扫描子程序将字符串以二元组的形式输出(若有不属于该语言单词符号出现,则进行出错处理),词法扫描子程序包括了对源程序的预处理(忽略、回车换行符等字符),以及对单词的识别和分类,以形成(单词种别,单词自身的值)形式的二元组。
具体思路如下:
首先建立关键字表,将关键字作为特殊标示符处理,把它们预先安排在char *keywords[13]中,将需要被识别出的关键字存入表中,当扫描程序识别出标识符时,查关键字表。如能查到匹配的单词,则该单词为关键字,否则为一般标识符。
在主函数中让用户输入要识别的符号串,然后将输入的符号串读入到 program[500],遇$结束。再依次扫描program[500]中的每一个符号,调用Scan ()子函数分析每一个符号,再将分析的结果输出,也是遇$结束。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。