欢迎来到天天文库
浏览记录
ID:56120962
大小:123.00 KB
页数:5页
时间:2020-03-16
《语法分析器的设计与实现.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、辅导教师成绩实验日期实验时间1实验名称语法分析器的设计与实现2、实验目的掌握自上而下语法分析方法、自下而上语法分析方法3、实验要求(1)实验内容:四选一①设计及实现能够识别表达式的预测分析程序。文法如下:G[E]:E->E+T
2、TT->T*F
3、FF->(E)
4、i②设计及实现能够识别表达式的LR分析程序。文法如下:G[E]:E->E+T
5、TT->T*F
6、FF->(E)
7、i③设计及实现能够识别表达式的算符优先分析程序。文法如下:G[E]:E->E+T
8、TT->T*F
9、FF->P↑F
10、PP->(E)
11、i④设计及实现计算
12、表达式的计算器。表达式中可包含+、-、*、/、(、)运算符。(2)实验要求:对已给的一个二元式形式表达式,能够检查有无语法错误。并指定出错位置。将表达式的语法树输出(或将语法分析过程输出)。4、实验原理根据自上而下和自下而上的语法分析思想实现语法分析程序。5、实验步骤(1)根据文法构造语法分析表。(2)编写总控程序实现语法分析。6、状态转换图及词法分析程序#include#include#include#includeusingnamespace
13、std;charVn[]={'E','e','T','t','F'};//定义文法的非终结符,小写字母e表示E’charVt[]={'i','+','*','(',')','#'};//定义文法的终结符intLENVt=sizeof(Vt);voidshowstack(stackst)//从栈底开始显示栈中的内容{inti,j;charch[100];j=st.size();for(i=0;i=0;i--){co
14、ut<15、<st;//定义堆栈st.push('#');st.push(Vn[0]);//#与识别符号入栈j=0;//j指向输入串的指针h=1;a=str[j];cout<<"步骤"<<"分析栈"<<"剩余输入串"<<"所用产生式"<16、wstack(st);//显示分析栈中内容cout<<"";for(i=j;i17、dl;flag=0;}else{error();break;}else{p=location(X,Vn);//实现下标的转换(非终结符转换为行下标)q=location(a,Vt);//实现下标的转换(终结符转换为列下标)stringS1("NULL"),S2("null");if(M[p][q]==S118、19、M[p][q]==S2)//查找二维数组中的产生式{error();break;}//对应项为空,则出错else{stringstr0=M[p][q];cout<<""<"<20、dl;//显示对应的产生式st.pop();if(str0!="$")//$代表“空”字符for(i=str0.size()-1;i>=0;i--)st.push(str0[i]);//产生式右端逆序进栈}}}}main(){stringM[5][6]={"Te","NULL","NULL","Te","NULL","NULL","NULL","+Te","NULL","
15、<st;//定义堆栈st.push('#');st.push(Vn[0]);//#与识别符号入栈j=0;//j指向输入串的指针h=1;a=str[j];cout<<"步骤"<<"分析栈"<<"剩余输入串"<<"所用产生式"<16、wstack(st);//显示分析栈中内容cout<<"";for(i=j;i17、dl;flag=0;}else{error();break;}else{p=location(X,Vn);//实现下标的转换(非终结符转换为行下标)q=location(a,Vt);//实现下标的转换(终结符转换为列下标)stringS1("NULL"),S2("null");if(M[p][q]==S118、19、M[p][q]==S2)//查找二维数组中的产生式{error();break;}//对应项为空,则出错else{stringstr0=M[p][q];cout<<""<"<20、dl;//显示对应的产生式st.pop();if(str0!="$")//$代表“空”字符for(i=str0.size()-1;i>=0;i--)st.push(str0[i]);//产生式右端逆序进栈}}}}main(){stringM[5][6]={"Te","NULL","NULL","Te","NULL","NULL","NULL","+Te","NULL","
16、wstack(st);//显示分析栈中内容cout<<"";for(i=j;i17、dl;flag=0;}else{error();break;}else{p=location(X,Vn);//实现下标的转换(非终结符转换为行下标)q=location(a,Vt);//实现下标的转换(终结符转换为列下标)stringS1("NULL"),S2("null");if(M[p][q]==S118、19、M[p][q]==S2)//查找二维数组中的产生式{error();break;}//对应项为空,则出错else{stringstr0=M[p][q];cout<<""<"<20、dl;//显示对应的产生式st.pop();if(str0!="$")//$代表“空”字符for(i=str0.size()-1;i>=0;i--)st.push(str0[i]);//产生式右端逆序进栈}}}}main(){stringM[5][6]={"Te","NULL","NULL","Te","NULL","NULL","NULL","+Te","NULL","
17、dl;flag=0;}else{error();break;}else{p=location(X,Vn);//实现下标的转换(非终结符转换为行下标)q=location(a,Vt);//实现下标的转换(终结符转换为列下标)stringS1("NULL"),S2("null");if(M[p][q]==S1
18、
19、M[p][q]==S2)//查找二维数组中的产生式{error();break;}//对应项为空,则出错else{stringstr0=M[p][q];cout<<""<"<20、dl;//显示对应的产生式st.pop();if(str0!="$")//$代表“空”字符for(i=str0.size()-1;i>=0;i--)st.push(str0[i]);//产生式右端逆序进栈}}}}main(){stringM[5][6]={"Te","NULL","NULL","Te","NULL","NULL","NULL","+Te","NULL","
20、dl;//显示对应的产生式st.pop();if(str0!="$")//$代表“空”字符for(i=str0.size()-1;i>=0;i--)st.push(str0[i]);//产生式右端逆序进栈}}}}main(){stringM[5][6]={"Te","NULL","NULL","Te","NULL","NULL","NULL","+Te","NULL","
此文档下载收益归作者所有