c++实现递归下降法的语法分析器

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

一、实习题目:递归下降分析二、实习目的根据某一文法编制调试递归下降分析程序,以便对任意输入的符号串进行分析。本次实验的目的主要是加深对递归下降分析法的理解。另:程序开始变得复杂起来,需要利用到程序设计语言的知识和大量编程技巧,递归下降分析法是一种较实用的分析法,通过这个练习可大大提高软件开发能力。通过练习,掌握函数间相互调用的方法。三、程序算法描述1.递归下降分析法功能词法分析器的功能是利用函数之间的递归调用模拟语法树自上而下的构造过程。2.递归下降分析法前提改造文法:消除二义性、消除左递归、提取左因子,判断是否为LL(1)文法。3.递归下降分析法算法(1)若是终结符号,则和向前看符号对照,若匹配则向前进一个符号;否则出错。(2)若是非终结符号,则调用与此非终结符对应的过程。当A的右部有多个产生式时,可用选择结构实现。4.对下列文法,用递归下降分析法对任意输入的符号串进行分析:(1)E-TG(2)G-+TG|-TG|ε(3)T-FS(4)S-*FS|/FS|ε(5)F-(E)|i四、核心程序代码#includeiostream#includestdio.h#includestringusingnamespacestd;charstr[10];intindex=0;intflag=0;voidE();//E-TX;voidE1();//X-+TX|evoidT();//T-FYvoidT1();//Y-*FY|evoidF();//F-(E)|ivoidE(){T();E1();}voidE1(){if(str[index]=='+'){index++;T();E1();}}voidT(){F();T1();}voidT1(){if(str[index]=='*'){index++;F();T1();}}voidF(){if(str[index]=='i'){index++;if(str[index]'0'&&str[index]'9')index++;}else{if(str[index]=='('){index++;E();if(str[index]==')'){index++;}else{flag=1;coutFOUNDERRORendl;}}else{flag=2;coutFOUNDERRORendl;}}}intmain(){cout请输入待编译的算术表达式:endl;cinstr;E();if(str[index]=='#'&&flag==0)coutSUCCESSendl;/*elsecoutFOUNDERRORendl;*/system(pause);}

1 / 3
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功