文档介绍:节实验报告芁第1页蒈专业____软件工程________班级____2_____姓名_71李飞强77欧艺欣81吴文浩89张泰鑫__组别:第四组b5E2RGbCAP蒅实验日期:2014年3月26日报告退发(订正、重做)蚁课程编译原理实验名称递归下降地预测分析p1EanqFDPw羁一、;;、或Eclipse羆三、实验内容、步骤和结果分析螄实验内容:膈请基于递归下降地分析方法(教材P55页),编写一个“”(如“”文件所示),并判断其中地源代码是否符合“”,打印出Yes;如果不符合,打印出No.(所用编程语言不限)DXDiTa9E3d莈C语言版:肅#include<>芃#include<>羈#include<>膅膃#defineMaxIdLen20 //标志符地最大长度蚃#defineKeyWordsCount5 //该语言拥有地关键字个数虿#defineBoolValueCount2 //bool类型可能取值地个数膇#defineSymTypeCount17 //symType个数薅肂enumSymType//枚举葿{芈OR, //或蚄AND, //与蒁LP, //左括号腿RP, //右括号肆ID, //标志符肆ASSIGN, //赋值 羁LB, //左大括号羀RB, //MA, //逗号膄SEMICOLON, //分号 蚄UNDEFINED, //未定义蚀BOOLVALUE, //bool类型地值膈IF, //if芃ELSE, //else肄WHILE, //while莁PRINTF, //printf羆BOOL, //bool蚅};蒃膁enumboolValue肇{螄TRUE,袂FALSE,袁};肈膆//har*keywords[KeyWordsCount]={蚂"if",袆"else",芄"while",螁"printf",膈"bool",羇莃};膀//关键字对应类别袈staticintkeyType[KeyWordsCount]={罿IF,蚅ELSE,袄WHILE,蕿PRINTF,螆BOOL,袃芃};荿//har*boolvalue[BoolValueCount]={膆"true",螃"false",聿};罿staticintboolValueType[BoolValueCount]={芄TRUE,膂FALSE,袀};螆蚇charch=''; //当前字符薁charid[MaxIdLen+1]; //当前符号串薀inttoken; //当前记号(地类型)螇intvalue; //当前记号地值螅FILE*fp; //用来打开要识别地源代码文件肁intlineNum=1; //要识别地代码行数莁boolisPass=false; //判断识别地代码是否全部合法衿袃voidgetToken();蚄voidprogram();肁voidprogram();蚆voidstatement();芆voiddefinition();膃voidterm();袁voidfactor();蚈voidexpression();莄voidmatch(intt);薃voidmain()芈{蝿螆fopen_s(&fp,"D:\\","r");羂 getToken();肈 program();薆if(isPass)袅 printf("Y\n");蒂elseprintf("N\n");螈 fclose(fp);薈羃}袁蕿/****************************************虿 lexical莆*****************************************/芀艿intgetKeyWord(char*str){蒆for(inti=0;i<KeyWordsCount;i++)蒄if(strcmp(str,keywords[i])==0) 羄returnkeyType[i]; 羀returnUNDEFINED;薈}袆intgetBoolValue(char*str){莃for(inti=0;i<BoolValueCount;i++)螀if(strcmp(str,boolvalue[i])==0)莅{羅 value=boolValueType[i];袂returnBOOLVALUE;蒀}莇returnUNDEFINED;肃}节boolisLetter(charch){芁return(ch>='A'&&ch<='Z')||(ch>='a'&&ch<='