欢迎来到天天文库
浏览记录
ID:55556453
大小:30.74 KB
页数:19页
时间:2020-05-16
《编译原理-实验3-算符优先分析.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、编译原理实验3算符优先分析一、实验目的通过设计编制调试构造FIRSTVT集、LASTVT集和构造算符优先表、对给定符号串进行分析的程序,了解构造算符优先分析表的步骤,对文法的要求,生成算符优先关系表的算法,对给定的符号串进行分析的方法。二、实验内容1.给定一文法G,输出G的每个非终结符的FIRSTVT集和LASTVT集。2.构造算符优先表。3.对给定的符号串进行分析,包含符号栈,符号栈栈顶符号和输入串当前符号的优先级,最左素短语和使用的产生式和采取的动作。三、程序思路在文法框内输入待判断文法产生式,格式E-
2、>a
3、S,注意左部和右部之间是“->”,每个产生式一行,ENTER键换行。文法结束再输入一行G->#E#1.先做文法判断,即可判断文法情况。2.若是算符优先文法,则在优先表栏显示优先表。3.写入要分析的句子,按回车即可。4.在分析过程栏,可以看到整个归约过程情况四、实验结果FunctorFirst.h#include#include#include#includeusingnamespacestd;#definerightlength20#
4、defineproduct_num20//产生式最多个数#definenum_noterminal26//非终结符最多个数#definenum_terminal26//终结符最多个数structProduction{charLeft;charRight[rightlength];intnum;};structVT{boolvt[num_noterminal][num_terminal];};structStack{charP;chara;};classCMyDlg{public:CMyDlg();voidI
5、nputRule();CStringshowLastVT();CStringshowFirstVT();CStringshownoTerminal(charG[]);CStringshowTerminal(charg[]);CStringshowLeftS(charS[],intj,intk);voidInitAll();CStringshowSentence(CStringsen,intstart);CStringshowStack(charS[],intn);voidInitarry(chararry[
6、],intn);CStringProdtoCStr(Productionprod);intselectProd(inti,intj,charS[]);voidpreFunctor(CStringsen);voidinsertFirstVT(StackS[],int&sp,charP,chara);voidinsertLastVT(StackS[],int&sp,charP,chara);voidShowPreTable();voidcreatePreTable();charpretable[num_term
7、inal][num_terminal];boollike_Q(Productionprod,charQ);voidcreateLastVT();boollikeQ_(Productionprod,charQ);boollikeQa_(Productionprod);boollike_aQ(Productionprod);boollike_a(Productionprod);boollikea_(Productionprod);boolDignose(charc);intfindg(charc);intfin
8、dG(charc);voidcreateFirstVT();voidcreateTerminal();voidcreatenoTerminal();voidbuildProduction(CStrings);booltest(CStrings);voidparse();//语法分析CStringgram;//存放文法;Productionproduction[product_num];VTFirstVT;VTLastVT;intlocProduct;//已有产生式个数charG[num_noterminal
9、];charg[num_terminal];inti_G;inti_g;CStringm_sen;};FunctorFirst.cpp#include"FunctorFirst.h"CMyDlg::CMyDlg(){}boolCMyDlg::test(CStrings)//测试是否是算符优先文法{boolt=1;for(inti=0;i64&&s[i]<9
此文档下载收益归作者所有