



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年建筑规划师技术水平认证试题及答案解析
- 2025年劳动保护员考试模拟题及答案
- 2025年环境安全检测师资格考试试题及答案解析
- 2025年安全知识进阶题及答案
- 2025年电信公司网络工程师岗位招聘面试题及解析
- 2025年工程造价工程师资格考试试题及答案解析
- 2025年服装设计师实务考试试题及答案解析
- 2025年飞机维修技师执业技能考核试题及答案解析
- 2025年早教师笔试模拟试卷及解析
- 2025年客服笔试大数据预测题及模拟题集
- GB/T 18492-2001信息技术系统及软件完整性级别
- 脓毒症诊断和治疗进展课件
- 急诊医学-中毒
- 欧体楷书特征及写法 完整版教学课件
- 【讲座培训】《中小学教育惩戒规则(试行)》解读课件
- 现代农业技术讲座课件
- 学习《中小学教育惩戒规则(试行)》课件
- 初中数学教材解读人教八年级上册(2023年修订)第十三章轴对称等边三角形 导学案
- DB11-T1515-2018养老服务驿站设施设备配置规范
- 政府会计制度应用课件
- 西方文论课程教学大纲
评论
0/150
提交评论