您好,欢迎访问三七文档
学号:课程设计题目布尔表达式的语法分析及语义分析程序设计(递归下降分析法)学院计算机科学与技术学院专业软件工程班级姓名指导教师饶文碧2015年1月14日课程设计任务书学生姓名:专业班级:软件班指导教师:饶文碧工作单位:计算机科学与技术学院题目:布尔表达式的语法分析及语义分析程序设计(递归下降法、输出四元式)1.目的通过设计、编制、调试一个布尔表达式的语法及语义分析程序,加深对语法及语义分析原理的理解,并实现词法分析程序对单词序列的词法检查和分析。2.2.设计内容及要求(1)学号13-15的同学选择自顶向下方法完成以上任务,生成四元式、三元式或逆波兰式的中间代码;(2)如1题写出符合分析方法要求的文法,给出分析方法的思想,完成分析程序设计。(3)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。3.课程设计进度安排序号阶段内容所需用时间1给出语法分析方法及中间代码形式的描述、文法和属性文法的设计;或者词法分析方法及符号表和TOKEN代码的设计。1天2简要的分析与概要设计、算法设计与程序设计3天3撰写课程设计报告书1天合计5天武汉理工大学《编译原理》课程设计布尔表达式的语法分析及语义分析程序设计(递归下降分析法)目录1引言............................................................................................................................12主要内容....................................................................................................................12.1设计题目..........................................................................................................12.2设计思路..........................................................................................................12.3程序流程图......................................................................................................22.4详细的算法描述..............................................................................................22.4.1递归下降法...........................................................................................22.4.2主要数据结构.......................................................................................32.4.3全局变量...............................................................................................32.4.4源程序...................................................................................................32.5程序测试及测试结果....................................................................................132.6设计的优缺....................................................................................................143收获和感想..............................................................................................................154参考文献..................................................................................................................1511引言编译原理是计算机专业的一门重要专业课,旨在介绍编译程序构造的一般原理和基本方法。内容包括语言和文法、词法分析、语法分析、语法制导翻译、中间代码生成、存储管理、代码优化和目标代码生成。课程设计作为编译原理课程的重要实践,能极大的提高我们的思考能力和动手编程能力,同时也对我们对于编译原理和程序设计语言本身的理解大有裨益。2主要内容2.1设计题目布尔表达式的语法分析及语义分析程序设计(递归下降分析法)2.2设计思路首先布尔表达式的文法是确定的,写出它的产生式:B-TBˊB-andTBˊ|εT-FTˊTˊ-orFTˊ|εF-notF|true|false|(B)|iropi由此得到对应的属性文法B-TBˊBˊ.in=T.typeB-andTBˊBˊ.in=T.typeaddtype(and,entry,B.in)B-εB.val=εT-FTT.in=F.typeTˊ-orFTˊTˊ.in=F.typeaddtype(or,entry,B.in)Tˊ-εTˊ.val=εF-notFF.val=not.F.valF-trueF.val=trueF-falseF.val=falseF-(B)F.val=B.valF-iropiF.val=i.lexvalropi.lexvaladdtype(i,entry,l.in)根据递归下降的思想,于文法中的每个非终结符编写一个函数,每个函数的功能是识别由该非终结符所表示的语法成分。由于描述语言的文法常常是递归定义的,因此相应的这组函数必然以相互递归的方式进行调用。该过程的基本思想为每执行一个非终结符对应的函数就根据读入的单词符号来写入该非终结符对武汉理工大学《编译原理》课程设计2应的推出式,最终生成该布尔语句的四元式序列。2.3程序流程图2.4详细的算法描述2.4.1递归下降法递归下降法又称递归子程序法。在程序语言的语法定义中有许多采用递归定义。我们在对它进行语法分析时,编制的处理程序也采取递归的方式,可使其结构简单易读。但由于频繁地调用子程序大大地降低了分析速度。武汉理工大学《编译原理》课程设计32.4.2主要数据结构四元式类在该类中,要包含四元式中的四个元素以及运算结果,两个运算数以及一个运算符号classquad{public:charresult[8];chararg1[8];charop[8];chararg2[8];voidprint(){coutresult=arg1oparg2endl;}}q[20];word结构体用于存储单个单词,包括一个字符串成员structword{charw[10];voidprint(){coutw:;}}wr[200];翻译器类classinterpreter{private:ifstreamSourceFile;charbuffercode[200];//存放源码的缓冲区intsyn;intcurrent;//buffercode中当前督导的字符下标chartoken[8];//记录当前读到的单词public:voidscaner();voidB();voidB1();voidT();武汉理工大学《编译原理》课程设计4voidF();voidT1();voidrun();voidread();voidbolon();voidtoword();char*unit();char*expression();char*term();voidreset(){current=0;};voidrun1(){scaner();expression();};};2.4.3全局变量intkk;intnumberoftemp=0;//临时变量的个数intnumberofquad=0;//四元式的个数//全局变量2.4.4源程序:#includeiostream.h#includestring.h#includefstream.h#includestdlib.h//头文件intkk;intnumberoftemp=0;//临时变量的个数intnumberofquad=0;//四元式的个数//全局变量classquad{public:武汉理工大学《编译原理》课程设计5charresult[8];chararg1[8];charop[8];chararg2[8];voidprint(){cout(op,arg1,arg2,result)endl;}}q[20];//四元式类//在类中,包含四元式中的四个元素以及运算结果,两个运算数以及一个运算符号voidqemit(chara[],charb[],charc[],chard[]){strcpy(q[numberofquad].result,a);strcpy(q[numberofquad].arg1,b);strcpy(q[numberofquad].op,c);strcpy(q[numberofquad].arg2,d);numberofquad++;}//对四元式内元素赋值char*newtemp(){char*p;inttemp=numberoftemp;p=newchar[8];p[0]='t';for(inti=0;;i++){p[++i]=char(temp%10+48);temp=temp/10;if(temp==0){p[i+1]='\0';break;}}numberoftemp++;returnp;};structword武汉理工大学《编译原理》课程设计6{charw[10];voidprint(){coutw:;}}wr[200];//用于存储单个单词,包括一个字符串成员inttcount=0;intwcount=0;char*rwtab[9]={true,not,false,(,),rop,i,or,and};classtuidao{public:chara[10];charb[10];charc[10];chard[10];voidemit(char*m,char*n,char*p,char*q);voidprint(){couta=bcdendl;}}t[100];voidtuidao::emit(char*m,char*n,char*p,char*q){strcpy(a,m);strcpy(b,n);strcpy(c,p);strcpy(d,q);}classinterpreter{private:ifstreamSourceFile;charbuffercode[200];//存放源码的缓冲区intsyn;intcurrent;//buffercode中当前督导的字符下标chartoken[8];//记录当前读到的单词public:voidscaner();//从缓冲区读入voidB();//B武汉理工大学《编译原理》课程设计7voidB1();
本文标题:编译原理课程设计
链接地址:https://www.777doc.com/doc-2069038 .html