预测分析程序代码.doc_第1页
预测分析程序代码.doc_第2页
预测分析程序代码.doc_第3页
预测分析程序代码.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

#includestdio.h#includestring.h /*/*程序中用到strcpy()函数*/*/*全局变量定义*/char inputString10; /*/*用来存储用户输入的字符串,最长为20个字符*/char stack10; /*/*用来进行语法分析的栈结构*/int base=0; /*/*栈底指针*/int top=1; /*/*栈顶指针*/char VT4=a,d,b,e; /*/*用来存放5个终结符*/char chanShengShi10; /*/*用来存放预测分析表MA,a中的一条产生式*/int firstCharIntex=0; /*/*如果a匹配产生式,则每次firstCharIntex 自增 1 */ /*/*firstCharIntex用来存放用户输入串的第一个元素的下标*/*/*自定义函数声明*/char pop() ; /*/*弹出栈顶元素*/int push(char ch) ; /*/*向栈内添加一个元素,成功返回1,若栈已满则返回0*/int search(char temp) ; /*/*查找非终结符集合VT中是否存在变量temp,存在返回1,不存在返回0*/int M(char A, char a) ; /*/* 若预测分析表MA,a中存在产生式, 则将该产生式赋给字符数组chanShengShi10,并返回 1, 若MA,a中无定义产生式则返回 0*/void init() ; /*/*初始化数组inputString10 、栈 stack10 和 chanShengShi10*/ int yuCeFenXi() ; /*/* 进行输入串的预测分析的主功能函数, 若输入串满足文法则返回 1,不满足则返回0*/void printStack(); /*/*打印栈内元素 */void printinputString(); /*/*打印用户输入串 */ /*/*进入主函数*/void main() /clrscr(); yuCeFenXi(); /*/*调用语法预测分析函数*/ /getch(); /*/*函数的定义*/ int yuCeFenXi() char X; /*/*X变量存储每次弹出的栈顶元素*/ char a; /*/*a变量存储用户输入串的第一个元素*/ int i; int counter=1; /*/*该变量记录语法分析的步骤数*/ init(); /*/*初始化数组*/ printf(wen fa : ); /*/*输出文法做为提示*/ printf(S - aH ); printf(H - aMd | d ); printf(M - Ab | ); printf(A - aM | e ); printf( input string ,# is a end sign !(aaabd#) ); /*/*提示用户输入将要测试的字符串*/ scanf(%s,inputString); push(#); push(S); printf( Counter-Stack-Input string ); /*/*输出结果提示语句*/ while(1) /*/*while循环为语法分析主功能语句块*/ printf( n); printf( %d,counter); /*/*输出分析步骤数*/ printf( ); /*/*输出格式控制语句*/ printStack(); /*/*输出当前栈内所有元素*/ X=pop(); /*/*弹出栈顶元素赋给变量X*/ printinputString(); /*/*输出当前用户输入的字符串*/ if( search(X)=0 ) /*/*在终结符集合VT中查找变量X的值,存在返回 1,否则返回 0*/ if(X = #) /*/*栈已经弹空,语法分析结果正确,返回 1*/ printf(success . ); /*/*语法分析结束,输入字符串符合文法定义*/ return 1; else a = inputStringfirstCharIntex; if( M(X,a)=1 ) /*/*查看预测分析表MA,a是否存在产生式,存在返回1,不存在返回0*/ for(i=0;i=0) push( chanShengShii ); /*/*将当前产生式逆序压入栈内*/ i- ; else printf( error(1) !); /*/*若预测分析表MA,a不存在产生式,说明语法错误*/ return 0; else /*/*说明X为终结符*/ if( X=inputStringfirstCharIntex ) /*/*如果X等于a,说明a匹配*/ firstCharIntex+; /*/*输入串的第一个元素被约去,下一个元素成为新的头元素*/ else printf( error(2) ! ); return 0; counter+; void init() int i; for(i=0;i9 ) printf( error : stack overflow ); /*/*栈空间溢出*/ return 0; else stacktop=ch; /*/*给栈顶空间赋值*/ top+; return 1; int search(char temp) int i,flag=0; /*/*flag变量做为标志,若找到temp则赋1,否则赋0*/ for(i=0;i4;i+) if( temp=VTi ) /*/*终结符集合中存在temp*/ flag=1; break; if(flag=1) return 1; /*/*flag=1说明已找到等于temp的元素*/ else return 0; void printStack() /*/*输出栈内内容*/ int temp; for(temp=1;temptop;temp+) printf(%c,stacktemp); void printinputString() /*/*输出用户输入的字符串*

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论