《编译原理》 实验报告 2008 年11 月20 日 姓名 孙丽君 班 级 06 行知计算机网络技术 学 号 06202135 课程 名称 编译原理 实验项目名 称 语法分析 指导教师 郑豪 一、实验目的: 编制一个递归下降分析程序,实现对词法分析程序所提供的单词序列的语法检查和结构分析。 利用C 语言编制递归下降分析程序,并对简单语言进行语法分析。 二、实验原理(可以流程图的形式出现,加以文字说明) 1.待分析的简单语言的语法 2.用扩充的BNF 表示如下: (1)<程序>::=begin<语句串>end (2)<语句串>::=<语句>{;<语句>} (3)<语句>::=<赋值语句> (4)<赋值语句>::=ID:=<表达式> (5)<表达式>::=<项>{+<项> | —项>} (6)<项>::=<因子>{*<因子> | /<因子>} (7)<因子>::=ID | NUM | (<表达式>) 3.实验要求说明 输入单词串,以“#”结束,如果是文法正确的句子,则输出成功信息,打印“success”,否则输出“error”。 例如: 置初值调用scaner读下一个单词符号调用lrParser结束 图c.3 语法分析主程序示意图 输入 begin a:=9;x:=2*3;b:=a+x end # 输出success 输入 x:=a+b*c end # 输出 error 4.语法分析程序的算法思想 (1) 主程序示意图如图C.3所示。 (2) 递归下降分析程序示意图如图C.4所示。 (3) 语句串分析过程示意图如图C.5所示。 (4) statement 语句分析函数流程如图C.6. C.7. C.8 C.9 所示。 是否begin?是否调用scaner调用语句串分析函数是否end?调用scanersy n=0&&kk=0?打印分析成功否是出错处理是 图c.4 递归下降分析程序示意图 否是调用statement函数是否;?调用scaner调用statement函数出错处理 图c.5 语句串分析示意图 是 否 是 图c.6statement 语句分析函数示意图 否 是 图c.7 ex pression 表达式分析函数示意图 是否标识? 调用scaner 是否:=? 调用scaner 调用ex pression 函数 出错处理 调用term 函数 是否+,-? 调用scaner 调用term 函数 出错处理 否 是 图c.8term 分析函数示意图 是否标识符?是否整常数是否?调用scaner是否)?调用scaner出错处理否否是调用ex pression函数否是是是调用scaner 图c.9factor 分析过程示意图 三、实验步骤 (介绍关键的步骤,至少10 步,并简要说明其工作原理) 1. 语法分析的主程序 void main() {p=0; printf("********************语法...