编译原理课程设计-语法分析器.doc
《编译原理课程设计-语法分析器.doc》由会员分享,可在线阅读,更多相关《编译原理课程设计-语法分析器.doc(19页珍藏版)》请在三一文库上搜索。
1、福建农林大学计算机与信息学院计算机类课程设计报告课程名称:编译原理课程设计题目:语法分析器姓 名:系:专 业:年 级:2学 号:指导教师:职 称:20102011学年第一学期福建农林大学计算机与信息学院计算机类课程设计结果评定评语:成绩:指导教师签字:任务下达日期:评定日期:目 录1 正则表达式11.1 正则表达式11.2 确定化(化简)后的状态转换图11.3 分析程序代码11.4 程序运行截图11.5 小结22 LL(1)分析32.1 LL(1)文法32.2 LL(1)预测分析表32.3 分析程序代码32.4 程序运行截图52.5 小结63 算符优先分析73.1 算符优先文法73.2 算符优
2、先关系表73.3 分析程序代码73.4 程序运行截图103.5 小结104 LR分析114.1 LR文法114.2 LR分析表114.3 分析程序代码114.4 程序运行截图164.5 小结16参考文献:161 正则表达式1.1 正则表达式 (a|b)*(aa|bb)(a|b)* (注:该正规式为示例,可更改)1.2 确定化(化简)后的状态转换图 1.3 分析程序代码#includestdio.hvoid main()int s42=1,2,3,2,1,3,3,3;char c100;scanf(%s,c); int i=0; intk=0;int x;while(ci!=0)switch(c
3、i) case a: x=0;break; case b: x=1;break; default: x=-1;if(x0)break;k=skx;i+;if(k=3) printf(成功!n);else printf(出错了!n);1.4 程序运行截图输入abab出错输入abaaa1.5 小结通过本次实验熟悉了正则表达式程序实现方法和进一步熟悉了由正规式到DFA的转换2 LL(1)分析2.1 LL(1)文法 ETE (注:该文法为示例,可更改) E+TE| TFT T*FT| F(E)|i2.2 LL(1)预测分析表i+*()#EETEETEEE+TEEETTFTTFTTTT*FTTTFFiF
4、(E)2.3 分析程序代码#include#include#include #include using namespace std;char Vn=E,e,T,t,F; char Vt=i,+,*,(,),#; int LENVt=sizeof(Vt);void showstack(stack st) int i,j; char ch100; j=st.size(); for(i=0;i=0;i-) coutchi; st.push(chi); int find(char c,char array,int n) int i; int flag=0; for(i=0;in;i+) if(c=a
5、rrayi) flag=1; return flag;int location(char c,char array) int i; for(i=0;c!=arrayi;i+); return i;void error() cout 出错!endl;void analyse(char Vn,char Vt,string M56,string str) int i,j,p,q,h,flag=1; char a,X; stack st; /定义堆栈 st.push(#); st.push(Vn0); /#与识别符号入栈 j=0; h=1; a=strj; cout步骤 分析栈 剩余输入串 所用产生式
6、endl; while(flag=1) couth ; h+; showstack(st); cout ; for(i=j;istr.size();i+) coutstri; X=st.top(); if(find(X,Vt,LENVt)=1) if(X=a) if (X!=#) cout X匹配endl; st.pop(); a=str+j; else cout 接受!endlendl; flag=0; elseerror();break;elsep=location(X,Vn); q=location(a,Vt); string S1(NULL),S2(null); if(Mpq=S1 |
7、 Mpq=S2) error();break; elsestring str0=Mpq; cout Xstr0=0;i-) st.push(str0i); main() string M56=Te ,NULL,NULL,Te, NULL,NULL, NULL,+Te ,NULL,NULL,$, $,Ft, NULL,NULL,Ft, NULL,NULL,NULL,$, *Ft, NULL,$, $,i, NULL,NULL,(E), NULL,NULL; /预测分析表 string str; int errflag,i; coutE+T|T T-T*F|F F-(E)|iendl; cout请
8、输入分析串(以#结束):str; for(i=0;istr.size();i+) if(!find(stri,Vt,LENVt) cout输入串中包含有非终结符stri(输入错误)!endl; errflag=1; while(errflag=1); /判断输入串的合法性 analyse(Vn, Vt, M,str); return 0; 2.4 程序运行截图输入i+i#2.5 小结通过本次实验,巩固了关于文法分析的相关知识,进一步掌握LL(1)文法中First集和Follow集的求法,以及LL(1)文法预测分析表的构造方法。3 算符优先分析3.1 算符优先文法 ET | E+T | E-T
9、(注:该文法为示例,可更改) TF | T*F | T/F F(E) | i3.2 算符优先关系表+-*/()i#+-*/()i#3.3 分析程序代码#include #include using namespace std;typedef struct ochar char char_ch; struct ochar *next; opgchar;opgchar *temp,*top,*z;int i,j,m,n,e;string str;int Push(char pchar) /压栈 temp=(opgchar*)malloc(sizeof(opgchar); temp-char_ch=
10、pchar; temp-next=top; top=temp; return 0; int Pop() /弹栈 if(top-char_ch!=#) top=top-next; return 0; /* 预测分析表*/char table88 = /* o a n ( ) t f # */ , /o , /a , /n ,=,0,0,0,0, /) ,0,0,0,0, /t ,0,0,0,0, /f ,0,char_ch=#&strn=#)coutchar_ch)confirmij(strn); switch(t) case :Push(strn);n+=1;cout:Pop();cout归约
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 课程设计 语法 分析器
链接地址:https://www.31doc.com/p-3291123.html