编译原理课程设计词法分析语法分析语义分析代码生成.docx
- 文档编号:16304748
- 上传时间:2023-07-12
- 格式:DOCX
- 页数:41
- 大小:29.51KB
编译原理课程设计词法分析语法分析语义分析代码生成.docx
《编译原理课程设计词法分析语法分析语义分析代码生成.docx》由会员分享,可在线阅读,更多相关《编译原理课程设计词法分析语法分析语义分析代码生成.docx(41页珍藏版)》请在冰点文库上搜索。
编译原理课程设计词法分析语法分析语义分析代码生成
编译原理课程设计(词法分析,语法分析,语义分析,代码生成)
#include
#include
#include
#include
#include
#include
usingnamespacestd;
/************************************************/
structtoken//token{
intcode;//
intnum;//
token*next;
};
token*token_head,*token_tail;//token
structstr//string{
intnum;//
stringword;//
str*next;
};
str*string_head,*string_tail;//string
structivan//{
charleft;//
stringright;//
intlen;//};
ivancss[20];//20structpank//action{
charsr;//
intstate;//};
pankaction[46][18];//actionintgo_to[46][11];//go_tostructike//{
ike*pre;
intnum;//
intword;//
ike*next;
};
ike*stack_head,*stack_tail;//structL//
{
intk;
stringop;//
stringop1;//
stringop2;//
stringresult;//
L*next;//
L*Ltrue;//true
L*Lfalse;//false
};
L*L_four_head,*L_four_tail,*L_true_head,*L_false_head;//truefalse
structsymb//
{
stringword;//
intaddr;//
symb*next;
};
symb*symb_head,*symb_tail;//
/************************************************/
voidscan();//
voidcifa_main();//
intjudge(charch);//voidout1(charch);//token.txt
voidout3(charch,stringword);//string.txtvoidinput1(token*temp);//tokenvoidinput3(str*temp);//stringvoidoutput();//
voidoutfile();//
/************************************************/
voidyufa_main();//
voidyufa_initialize();//intyufa_SLR1(inta);//intID1(inta);//actionstringID10(inti);//
intID2(charch);//go_to
intID20(charch);//
charID21(intj);//
voidadd(ike*temp);//ikevoiddel();//ike
/************************************************/
voidyuyi_main(intm);//
voidadd_L_four(L*temp);//voidadd_L_true(L*temp);//truevoidadd_L_false(L*temp);//falsevoidadd_symb(symb*temp);//voidoutput_yuyi();//stringnewop(intm);//
stringid_numtoname(intnum);//intlookup(stringm);//
/************************************************/
FILE*fp;//
intwordcount;//
interr;//
intnl;//
intyuyi_linshi;//
stringE_name,T_name,F_name,M_name,id_name,id1_name,id2_name,errword;//
intid_num,id1_num,id2_num,id_left,id_while,id_then,id_do;//
/******************************************************/
intmain()
{
cout<<"************************"< cout<<"**"< cout<<"**"< cout<<"**"< cout<<"**"< cout<<"************************"< cifa_main();// yufa_main();// output_yuyi();// cout< system("pause"); return(0); } /******************************************************/ voidcifa_main() { token_head=newtoken; token_head->next=NULL; token_tail=newtoken; token_tail->next=NULL; string_head=newstr; string_head->next=NULL; string_tail=newstr; string_tail->next=NULL;// L_four_head=newL; L_four_head->next=NULL; L_four_tail=newL; L_four_tail->k=0; L_four_tail->next=NULL; L_true_head=newL; L_true_head->Ltrue=NULL; L_false_head=newL; L_false_head->Lfalse=NULL; symb_head=newsymb; symb_head->next=NULL; symb_tail=newsymb; symb_tail->next=NULL; yuyi_linshi=-1; id_num=0; wordcount=0;// err=0;// nl=1;// scan(); if(err==0) { charm; output(); cout<<"! "< "; cin>>m; cout< if(m=='y') { outfile(); cout<<"token.txtsting.txt"< cout< } } } voidscan() { cout< system("pause"); cout< charch; stringword; chardocument[50]; intflag=0; cout<<": "; cin>>document; cout< cout<<"************************"< cout<<"**"< cout<<"************************"< if((fp=fopen(document,"rt"))==NULL) { err=1; cout<<"! "< return; } while(! feof(fp)) { word=""; ch=fgetc(fp); flag=judge(ch); if(flag==1) out1(ch); elseif(flag==3) out3(ch,word); elseif(flag==4||flag==5||flag==6) continue; else { cout< ! "< err=1; } } fclose(fp); } intjudge(charch) { intflag=0; if(ch=='='||ch=='+'||ch=='*'||ch=='>'||ch==': '||ch==';'||ch=='{'||ch=='}'||ch=='('||ch==')') flag=1;// elseif(('a'<=ch&&ch<='z')||('A'<=ch&&ch<='Z')) flag=3;// elseif(ch=='') flag=4;// elseif(feof(fp)) flag=5;// elseif(ch=='\n') { flag=6;// nl++; } else flag=0;// return(flag); } voidout1(charch) { intid; switch(ch) { case'=': id=1;break; case'+': id=2;break; case'*': id=3;break; case'>': id=4;break; case': ': id=5;break; case';': id=6;break; case'{': id=7;break; case'}': id=8;break; case'(': id=9;break; case')': id=10;break;// default: id=0; } token*temp; temp=newtoken; temp->code=id; temp->num=-1; temp->next=NULL; input1(temp); return; } voidout3(charch,stringword) { token*temp; temp=newtoken; temp->code=-1; temp->num=-1; temp->next=NULL; str*temp1; temp1=newstr; temp1->num=-1; temp1->word=""; temp1->next=NULL; intflag=0; word=word+ch; ch=fgetc(fp); flag=judge(ch); if(flag==1||flag==4||flag==5||flag==6) { if(word=="and"||word=="if"||word=="then"||word=="while"||word=="do"||word=="int") { if(word=="and") temp->code=31; elseif(word=="if") temp->code=32; elseif(word=="then") temp->code=33; elseif(word=="while") temp->code=35; elseif(word=="do") temp->code=36; elseif(word=="int") temp->code=37;// input1(temp); if(flag==1) out1(ch); elseif(flag==4||flag==5||flag==6) return; } elseif(flag==1) { wordcount++; temp->code=25; temp->num=wordcount; input1(temp); temp1->num=wordcount; temp1->word=word; input3(temp1); out1(ch); } elseif(flag==4||flag==5||flag==6) { wordcount++; temp->code=25; temp->num=wordcount; input1(temp); temp1->num=wordcount; temp1->word=word; input3(temp1); } return; } elseif(flag==2||flag==3) out3(ch,word);// else { err=1; cout< ! "< return; } } voidinput1(token*temp){ if(token_head->next==NULL) { token_head->next=temp; token_tail->next=temp; } else { token_tail->next->next=temp; token_tail->next=temp; } } voidinput3(str*temp){ if(string_head->next==NULL) { string_head->next=temp; string_tail->next=temp; } else { string_tail->next->next=temp; string_tail->next=temp; } } voidoutput() { cout<<"token"< token*temp1; temp1=newtoken; temp1=token_head->next; while(temp1! =NULL) { cout< if(temp1->num==-1) { cout< } else { cout<<""< } temp1=temp1->next; } cout<<""< str*temp3; temp3=newstr; temp3=string_head->next; while(temp3! =NULL) { cout< temp3=temp3->next; } } voidoutfile() { ofstreamfout1("token.txt");// ofstreamfout3("string.txt"); token*temp1; temp1=newtoken; temp1=token_head->next; while(temp1! =NULL) { fout1< if(temp1->num==-1) fout1< else fout1<<""< temp1=temp1->next; } str*temp3; temp3=newstr; temp3=string_head->next; while(temp3! =NULL) { fout3< temp3=temp3->next; } } /******************************************************/ voidyufa_main() { if(err==0) { system("pause"); cout< cout<<"************************"< cout<<"**"< cout<<"************************"< yufa_initialize();// token*temp; temp=newtoken; temp=token_head->next; intp,q; p=0; q=0; cout<<""< while(temp! =NULL) { intw; w=ID1(temp->code); p=yufa_SLR1(w); if(p==1)break; if(p==0) temp=temp->next; if(temp==NULL)q=1; }// if(q==1) while (1) { p=yufa_SLR1(17); if(p==3)break; }//$ } } voidyufa_initialize(){ stack_head=newike; stack_tail=newike; stack_head->pre=NULL; stack_head->next=stack_tail; stack_head->num=0; stack_head->word='! '; stack_tail->pre=stack_head; stack_tail->next=NULL;// css[0].left='Q'; css[0].right="P"; css[1].left='P'; css[1].right="id()L;R"; css[2].left='L'; css[2].right="L;D"; css[3].left='L'; css[3].right="D"; css[4].left='D'; css[4].right="id: int"; css[5].left='E'; css[5].right="E+T"; css[6].left='E'; css[6].right="T"; css[7].left='T'; css[7].right="T*F"; css[8].left='T'; css[8].right="F"; css[9].left='F'; css[9].right="(E)"; css[10].left='F'; css[10].right="id"; css[11].left='B'; css[11].right="BandB"; css[12].left='B'; css[12].right="id>id"; css[13].left='M'; css[13].right="id=E"; css[14].left='S'; css[14].right="ifBthenM"; css[15].left='S'; css[15].right="whileBdoM"; css[16].left='S'; css[16].right="M"; css[17].left='N'; css[17].right="N;S"; css[18].left='N'; css[18].right="S"; css[19].left='R'; css[19].right="{N}"; inti,j; for(i=0;i<20;i++) { char*css_len; css_len=&css[i].right[0]; css[i].len=strlen(css_len); } css[1].len=6; css[4].len=3; css[10].len=1; css[11].len=3; css[12].len=3; css[13].len=3; css[14].len=4; css[15].len=4;// for(i=0;i<46;i++) { for(j=0;j<18;j++) action[i][j].sr='#'; }//action for(i=0;i<46;i++) { for(j=0;j<11;j++) go_to[i][j]=-1; }//go_to /****************************actiongo_to************************/ action[0][0].sr='s';action[0][0].state=2; action[1][17].sr='@';// action[2][1].sr='s';action[2][1].state=3; action[3][2].sr='s';action[3][2].state=4; action[4][0].sr='s';action[4][0].state=5; action[5][4].sr='s';action[5][4].state=6; action[6][11].sr='s';action[6][11].state=7; action[7][3].sr='r';action[7][3].state=4; action[8][3].sr='r';action[8][3].state=3; action[9][3].sr='s';action[9][3].state=10; actio
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 课程设计 词法 分析 语法 语义 代码 生成