编译原理课程设计报告
f一、分析
通过设计,编制,调试一个语法及语义分析程序,加深对语法及语义分析原理的理解。
IF〈布尔表达式〉THEN〈赋值语句〉ELSE〈赋值语句〉其中
(1)、可以选择递归下降法、LL(1)、算符优先分析法、LR法完成以上任务,中间代码选用四元式。
(2)、写出符合分析方法要求的文法,给出分析方法的思想,完成分析程序设计。
(3)、编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。
二、算法设计
程序要求有三部分组成,即词法分析、语法分析、以及语义分析。其中词法分析部分要求完成对输入程序的关键字、标识符、常数、运算符进行识别;并分析词法分析的结果,检查程序输入的关键字是否为符合设计文法的关键字,检查标志符是否是合法标志符,识别运算符的种类。语法分析部分主要是以算符优先文法的设计思想和步骤完成对词法分析结果的的语法分析工作,判断输入的程序是否符合设计的IFTHENELSE文法。在语法分析通过的基础上进行语义分析,其主要任务是完成对语法分析后的程序的语义分析,根据语法制导翻译去翻译输入的程序,从而得到程序的中间代码表示形式四元式。
词法分析、语法分析和语义分析的流程图如下:
f开始
输入需编译的文件名(文件名txt)
判断文件是否存在Y
调用cifa函数进行此法分析
此法分析成功
Y语法分析
NN
分析成功?Y
语义分析
分析成功?N
Y输出四元式N
结束
f(1)词法分析A词法分析器的功能和输出形式
输入:所给文法的源程序字符串输出:二元组(单词种别单词符号的属性值)构成的序列
B待分析的简单语言的词法
因为是模拟简单编译器所以就以C语言的小型子集作为模拟编译器的词法模拟程序语言的单词符号可分为下列五种
关键字相当于Pascal语言中的begi
ifelsewhile相当于Pascal语言中的e
d所有的关键字都是小写字母
运算符界符逗号分号左圆括号右圆括号常数在这里只涉及到i
t型常量
其他单词是标识符(ID)和整形常数(NUM),通过以下正规式定义:IDletter(letterdigit)NUMdigitdigit空格由空白,制表符和换行符组成,空格一般用来分隔ID,NUM,运算符,界符和关键字,词法分析阶段通常会被过滤掉。
C词法分析的设计思想
算法的基本任务是从字符串表示的源程序中识别出其具有独立意义的单词符号其基本思想是根据扫描到的单词符号的第一个字符的种类拼出相应的单词符号。
(2)语法分析
语r