欢迎来到天天文库
浏览记录
ID:14064242
大小:299.50 KB
页数:18页
时间:2018-07-25
《编译原理课程设计、正则表达式、ll(1)分析、算符优先、lr分析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、福建农林大学计算机与信息学院计算机类课程设计报告课程名称:编译原理课程设计题目:语法分析器姓名:陈润铭系:计算机专业:计算机科学与技术年级:11级计升学号:3116013049指导教师:李小林职称:副教授2012~2013学年第一学期福建农林大学计算机与信息学院计算机类课程设计结果评定评语:成绩:指导教师签字:任务下达日期:评定日期:目录1正则表达式11.1正则表达式11.2确定化(化简)后的状态转换图11.3分析程序代码11.4程序运行截图11.5小结12LL(1)分析22.1LL(1)文法22.2LL(1)预测分析表22.3分析程序代码22.4程序运行
2、截图22.5小结23算符优先分析33.1算符优先文法33.2算符优先关系表33.3分析程序代码33.4程序运行截图33.5小结34LR分析44.1LR文法44.2LR分析表44.3分析程序代码44.4程序运行截图44.5小结4参考文献:41正则表达式1.1正则表达式(a
3、b)*(aa
4、bb)(a
5、b)*(注:该正规式为示例,可更改)1.2确定化(化简)后的状态转换图1.3分析程序代码#include#include#includeusingnamespacestd;//定义一个存储状态转换的类classStat
6、u{public:mapMAP;};intmain(){//定义4个状态并初始化各个状态间的关系,以及定义一个存储当前状态的变量statusStatuA,B,C,D,*status;A.MAP['a']=&B;A.MAP['b']=&C;B.MAP['a']=&D;B.MAP['b']=&C;C.MAP['a']=&B;C.MAP['b']=&D;D.MAP['a']=&D;D.MAP['b']=&D;while(1){string::size_typesize=0;stringstr;boolflag=true;cout<<"请
7、输入符合(a
8、b)*(aa
9、bb)(a
10、b)*的正则表达式"<>str;status=&A;//刚开始指向初始状态constchar*ch=str.c_str();while(ch[size]){15if(ch[size]!='a'&&ch[size]!='b'){flag=false;break;}status=status->MAP[ch[size++]];//根据输入字符串调整状态}if(status==&D&&flag)//若为终结状态则符合此正则表达式cout<<"√正确"<11、l;}return0;}1.4程序运行截图1.5小结通过定义各个状态,并生成各个状态间的关系可以方便地表示状态转换图,使用关联容器则可以方便的管理状态。152LL(1)分析2.1LL(1)文法E→TE'(注:该文法为示例,可更改)E'→+TE'12、εT→FT'T'→*FT'13、εF→(E)14、i2.2LL(1)预测分析表i+*()#EE→TE'E→TE'E'E'→+TE'E'→εE'→εTT→FT'T→FT'T'T'→εT'→*FT'T'→εT'→εFF→iF→(E)2.3分析程序代码#include#include#incl15、ude#includeusingnamespacestd;enumSymbols{//终结符号Terminalsymbols:TSTS_I,//iTS_PLUS,//+TS_MULTIPLY,//*TS_L_PARENS,//(TS_R_PARENS,//)TS_EOS,//#,' 'TS_INVALID,//非法字符//非终结符号Noneterminalsymbols:NTSNTS_E,//ENTS_EE,//E'NTS_T,//TNTS_TT,//T'NTS_F//F};15enumSymbolslexer(charc){sw16、itch(c){case'i':returnTS_I;case'+':returnTS_PLUS;case'*':returnTS_MULTIPLY;case'(':returnTS_L_PARENS;case')':returnTS_R_PARENS;case'#':returnTS_EOS;//栈底:#终结符号default:returnTS_INVALID;}}intmain(){while(1){cout<<"输入一个以#结束的字符串"<>str;p=str.c_str();map17、numSymbols,map>t
11、l;}return0;}1.4程序运行截图1.5小结通过定义各个状态,并生成各个状态间的关系可以方便地表示状态转换图,使用关联容器则可以方便的管理状态。152LL(1)分析2.1LL(1)文法E→TE'(注:该文法为示例,可更改)E'→+TE'
12、εT→FT'T'→*FT'
13、εF→(E)
14、i2.2LL(1)预测分析表i+*()#EE→TE'E→TE'E'E'→+TE'E'→εE'→εTT→FT'T→FT'T'T'→εT'→*FT'T'→εT'→εFF→iF→(E)2.3分析程序代码#include#include#incl
15、ude#includeusingnamespacestd;enumSymbols{//终结符号Terminalsymbols:TSTS_I,//iTS_PLUS,//+TS_MULTIPLY,//*TS_L_PARENS,//(TS_R_PARENS,//)TS_EOS,//#,' 'TS_INVALID,//非法字符//非终结符号Noneterminalsymbols:NTSNTS_E,//ENTS_EE,//E'NTS_T,//TNTS_TT,//T'NTS_F//F};15enumSymbolslexer(charc){sw
16、itch(c){case'i':returnTS_I;case'+':returnTS_PLUS;case'*':returnTS_MULTIPLY;case'(':returnTS_L_PARENS;case')':returnTS_R_PARENS;case'#':returnTS_EOS;//栈底:#终结符号default:returnTS_INVALID;}}intmain(){while(1){cout<<"输入一个以#结束的字符串"<>str;p=str.c_str();map17、numSymbols,map>t
17、numSymbols,map>t
此文档下载收益归作者所有