南华大学
计算机科学与技术学院
课程设计报告
( 2008~2009学年度 第一学期 )
课程名称编译原理
实验名称基于LL(1)法的条件语句语法语义分析程序
姓名学号
专业班级
地点教师
目 录
一.系统需求分析------------------------------------------------------------------------------------
二.概念模型设计------------------------------------------------------------------------------------
三.逻辑模型设计------------------------------------------------------------------------------------
四.物理模型设计------------------------------------------------------------------------------------
五.实验结果分析------------------------------------------------------------------------------------
六.心得体会--------------------------------------------------------------------------------------------
七.源代码------------------------------------------------------------------------------------------------
一.系统需求分析
通过设计,编制,调试一个语法及语义分析程序,加深对语法及语义分析原理的理解。
IF 〈布尔表达式〉 THEN 〈赋值语句〉 ELSE 〈赋值语句〉
其中
(1)、可以选择递归下降法、LL(1)、算符优先分析法、LR法完成以上任务,中间代码选用四元式。
(2)、 写出符合分析方法要求的文法,给出分析方法的思想,完成分析程序设计。
(3)、 编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。
二.概念模型设计
首先设计一个IF-THEN-ELSE的LL(1)文法。推导出该文法的预测分析表,在此基础上编写能识别该IF-THEN-ELSE的语法分析程序。
程序要求有三部分组成,即词法分析、语法分析、以及语义分析。其中词法分析部分要求完成对输入程序的关键字、标识符、常数、运算符
Main函数流程图: 输出单词表
语法分析程序的详细数据流图:
词法分析
A 词法分析器的功能和输出形式
输入:所给文法的源程序字符串
输出:二元组(单词种别,单词符号的属性值)构成的序列
B. 待分析的简单语言的词法
因为是模拟简单编译器, 所以就以C语言的小型子集作为模拟编译器的词法.
模拟程序语言的单词符号可分为下列五种;
关键字: { (相当于Pascal语言中的begin) , if ,else , while , }(相当于Pascal语言中的end ) 所有的关键字都是小写字母 .
运算符: + , - , * , / , = , < , <= , == , > , >= ,<> , && ,|| , !
界 符: 逗号 ,分号 ,左圆括号 , 右圆括号 , #
常 数: 在这里只涉及到int型常量
其他单词是标识符(ID)()ID = letter(letter|digit)*
NUM = digit digit *
种别码单词符号种别码If0/17else1=18while2&&19{3||20}4!21;6rop22#8(23+14)24-15letter(letter|digit)**16digit digit *26
值得说明的是;
当种别码为22, 也就是六种运算符时, 会根据一个POS 的值(0-5)来定位到底是六种运算符中的哪一种.当pos=0 时 rop= ‘<=’ ;
当pos=1 时 rop= ‘< ’;
当pos=2 时 rop= ‘>=’ ;
当pos=3 时 rop= ‘> ’ ;
当pos=4 时 rop= ‘<>’ ;
当pos=5 时 rop