语法分析器的设计与实现.docx
- 文档编号:10426478
- 上传时间:2023-02-11
- 格式:DOCX
- 页数:8
- 大小:35.31KB
语法分析器的设计与实现.docx
《语法分析器的设计与实现.docx》由会员分享,可在线阅读,更多相关《语法分析器的设计与实现.docx(8页珍藏版)》请在冰豆网上搜索。
语法分析器的设计与实现
辅导教师成绩
实验日期
实验时间
1实验名称语法分析器的设计与实现
2、实验目的
掌握自上而下语法分析方法、自下而上语法分析方法
3、实验要求
(1)实验内容:
四选一
①设计及实现能够识别表达式的预测分析程序。
文法如下:
G[E]:
E->E+T|T
T->T*F|F
F->(E)|i
②设计及实现能够识别表达式的LR分析程序。
文法如下:
G[E]:
E->E+T|T
T->T*F|F
F->(E)|i
③设计及实现能够识别表达式的算符优先分析程序。
文法如下:
G[E]:
E->E+T|T
T->T*F|F
F->P↑F|P
P->(E)|i
④设计及实现计算表达式的计算器。
表达式中可包含+、-、*、/、(、)运算符。
(2)实验要求:
对已给的一个二元式形式表达式,能够检查有无语法错误。
并指定出错位置。
将表达式的语法树输出(或将语法分析过程输出)。
4、实验原理
根据自上而下和自下而上的语法分析思想实现语法分析程序。
5、实验步骤
(1)根据文法构造语法分析表。
(2)编写总控程序实现语法分析。
6、状态转换图及词法分析程序
#include
#include
#include
#include
usingnamespacestd;
charVn[]={'E','e','T','t','F'};//定义文法的非终结符,小写字母e表示E'
charVt[]={'i','+','*','(',')','#'};//定义文法的终结符
intLENVt=sizeof(Vt);
voidshowstack(stack
{
inti,j;
charch[100];
j=st.size();
for(i=0;i { ch[i]=st.top(); st.pop(); } for(i=j-1;i>=0;i--) { cout< st.push(ch[i]); } } intfind(charc,chararray[],intn)//查找函数,返回布尔值 { inti; intflag=0; for(i=0;i { if(c==array[i]) flag=1; } returnflag; } intlocation(charc,chararray[])//定位函数,指出字符所在位置,即将字母转换为数组下标值 { inti; for(i=0;c! =array[i];i++); returni; } voiderror() { cout<<出错! < } voidanalyse(charVn[],charVt[],stringM[5][6],stringstr) { inti,j,p,q,h,flag=1; chara,X; stack st.push('#'); st.push(Vn[0]);//#与识别符号入栈 j=0;//j指向输入串的指针 h=1; a=str[j]; 潣瑵? 步骤? 尼分析栈? 尼剩余输入串<<所用产生式< while(flag==1) { cout< h++; showstack(st);//显示分析栈中内容 cout<<; for(i=j;i X=st.top();//取栈顶符号放入X if(find(X,Vt,LENVt)==1)//X是终结符 if(X==a)//分析栈的栈顶元素和剩余输入串的第一个元素相比较 if(X! ='#') { cout< 堼? 匹配< st.pop(); a=str[++j];//读入输入串的下一字符 } else {cout< 尼接受! < flag=0;} else {error();break;} else { p=location(X,Vn);//实现下标的转换(非终结符转换为行下标) q=location(a,Vt);//实现下标的转换(终结符转换为列下标) stringS1(NULL),S2( ull); if(M[p][q]==S1||M[p][q]==S2)//查找二维数组中的产生式 {error();break;}//对应项为空,则出错 else { stringstr0=M[p][q]; cout<<< 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,NULL,$,$, Ft,NULL,NULL,Ft,NULL,NULL, NULL,$,*Ft,NULL,$,$, i,NULL,NULL,(E),NULL,NULL};//预测分析表j stringstr; interrflag,i; 潣瑵? 文法: E->E+T|TT->T*F|FF->(E)|i< 潣瑵? 请输入分析串(以#结束): < do {errflag=0; cin>>str; for(i=0;i if(! find(str[i],Vt,LENVt)) {潣瑵? 输入串中包含有非终结符< < errflag=1; } }while(errflag==1);//判断输入串的合法性 analyse(Vn,Vt,M,str); return0; } 7、测试及结果 如果有需要的请下载,并不是本人写的,心得8、我只是图方便转发一下
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语法 分析器 设计 实现
