语法分析器的设计与实现.docxVIP

  • 59
  • 0
  • 约2.68千字
  • 约 5页
  • 2021-12-06 发布于辽宁
  • 举报
辅导教师 成绩 实验日期 实验时间 1实验名称语法分析器的设计与实现 2、实验目的 掌握自上而下语法分析方法、自下而上语法分析方法 3、实验要求 实验内容:四选一 设计及实现能够识别表达式的预测分析程序。 文法如下: 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-PT F|P P-(E)|i 设计及实现计算表达式的计算器。 表达式中可包含+、-、*、/、(、)运算符。 实验要求: 对已给的一个二元式形式表达式,能够检查有无语法错误。并指定出错位 置。 将表达式的语法树输出(或将语法分析过程输出)。 4、实验原理 根据自上而下和自下而上的语法分析思想实现语法分析程序。 5、实验步骤 根据文法构造语法分析表。 编写总控程序实现语法分析。 6、状态转换图及词法分析程序 #in cludeiostream #i ncludestdio.h #in elude stri ng #in elude stack using n amespacestd; charVn[]={E,e,T,t,F}; 〃定义文法的非终结符,小写字母 e表示E charVt[]={i,+,*,(,),#}; 〃定义文法的终结符 int LENVt=sizeof(Vt); void showstack(stackchar st) //从栈底开始显示栈中的内容 { int i,j; charch[100]; j=st.size(); for(i=0;ij;i++) { ch[i]=st.top(); st.pop(); } for(i=j-1;i=0;i--) { coutch[i]; st.push(ch[i]); } } int find(char c,chararray[],int n) 〃查找函数,返回布尔值 { int i; int flag=0; for(i=0;i n;i++) { if(c==array[i]) flag=1; } retur n flag; } int location(charc,chararray]]) 〃定位函数,指出字符所在位置,即将字母 转换为数组下标值 { int i; for(i=0;c!=array[i];i++); return i; } void error() { cout? } 出错!e ndl; void analyse(charVn[],char Vt[],string M[5][6],string str) { int i,j,p,q,h,flag=1; chara,X; stackchar st; st.push(#); st.push(V n[0]); j=0; h=1; a=str[j]; cout?步骤 所用产生式endl; while(flag==1) { coutvvhvv h++; showstack(st); cout? for(i=j;istr.size();i++) coutstr[i]; X=st.top(); if(fin d(X,Vt, LENVt)==1) if(X==a) 入串的第一个元素相比较 if (X!=#) { cout? st.pop(); a=str[++j]; } else { cout? 〃定义堆栈 //#与识别符号入栈 〃j指向输入串的指针 II 分析栈 剩余输入串 //显示步骤 〃显示分析栈中内容 〃显示剩余字符串 〃取栈顶符号放入X //X是终结符 〃分析栈的栈顶元素和剩余输 vvXvv匹配endl; 〃读入输入串的下一字符 接受!endlvvendl; flag=0;} else {error();break;} else { p=locatio n(X,V n); //实现下标的转换(非终结符转换为行 下标) q=locatio n(a,Vt); //实现下标的转换(终结符转换为列下标) stri ngS1(NULL),S2( nu II); if(M[p][q]==S1 || M[p][q]==S2) // 查找二维数组中的产生式 {error();break;} //对应项为空,则出错 else { string str0=M[p][q]; cout? X--str0endl; 〃显示对应的 产生式 st.pop(); if(strO!=$) 〃$代表“空”字符 for(i=str0.size()-1;i=0;i--) st.push(strO[i]);〃产生式右端逆序进栈 } } } } mai n() { s

文档评论(0)

1亿VIP精品文档

相关文档