科学管理合理组织,不断深化“双基”建设,狠抓安全技术教育培训工作,全面落实“手指口述安全确认操作、岗位描述”安全管理规范,提高全员安全责任意识和整体操作技能。编译原理1实验题目:达式语法分析设计。2实验目的:熟悉并设计一个表达式的语法分析器3相关知识:1、形式语言基础及其文法运算2、语法分析原理及4种常用的语法分析方法其中:四种算法为(1)设计算术表达式的递归下降子程序分析算法(2)设计算术表达式的LL(1)分析算法(3)设计算术表达式的简单优先分析算法(4)设计算术表达式的SLR(1)分析算法4实验内容:1.设计表达式的语法语法分析器算法(1)算术表达式文法G(E):E→Eω0T|TE为算术表达式,T为项,T→Tω1F|F科学管理合理组织,不断深化“双基”建设,狠抓安全技术教育培训工作,全面落实“手指口述安全确认操作、岗位描述”安全管理规范,提高全员安全责任意识和整体操作技能。F为因式项,ω0为+或-;ω1为*或/F→i|(E)i为变量或常量(2)文法交换G'(E):E→T{ω0T}T→F{ω1F}F→i|(E)2.编写代码并上机调试运行通过要求:输入-----------表达式输出-----------表达式语法是否正确5实验要求:1、给出算术表达式文法2、进行适当的文法变换3、选择一种语法分析的方法,并说明其原理4、根据原理给出相应的算法设计,说明主要的数据结构并画出算法流程图5、编写代码并上机调试运行通过科学管理合理组织,不断深化“双基”建设,狠抓安全技术教育培训工作,全面落实“手指口述安全确认操作、岗位描述”安全管理规范,提高全员安全责任意识和整体操作技能。6、写出程序运行结果7、写出相应的文档以及代码注释5源程序(包含注释)#includeiostreamusingnamespacestd;intvalue=1;charch;intiloact=0;charstr[80];voidProT(void);voidProF(void);voiderror()//出错处理函数{cout语法分析未通过,表达式语法不正确endl;}voidProE(void)//语法E的递归程序{ProT();if(ch=='+'){iloact++;ch=str[iloact];//向前移一个位置ProE();}}voidProT(void)//语法T的递归程序{ProF();if(ch=='*'){iloact++;ch=str[iloact];ProT();}}voidProF(void)//语法F的递归程序{科学管理合理组织,不断深化“双基”建设,狠抓安全技术教育培训工作,全面落实“手指口述安全确认操作、岗位描述”安全管理规范,提高全员安全责任意识和整体操作技能。if(ch=='('){iloact++;ch=str[iloact];ProE();if(ch==')'){iloact++;ch=str[iloact];}else{error();value=0;}}elseif(ch='0'||ch='9'){iloact++;ch=str[iloact];}else{error();value=0;}}intmain(){cout输入表达式:endl;cinstr;ch=str[0];while(ch!='#')//进行递归下降分析{ProE();if(!value)break;}if((ch=='#')&&(value!=0))cout语法分析通过,表达式语法正确endl;return0;}科学管理合理组织,不断深化“双基”建设,狠抓安全技术教育培训工作,全面落实“手指口述安全确认操作、岗位描述”安全管理规范,提高全员安全责任意识和整体操作技能。6测试数据及运行结果7思考题:语法分析的任务是什么?答:语法分析是编译的第二阶段;其任务是识别和处理比单词更大的语法单位,如:程序设计语言中的表达式、各种说明和语句乃至全部源程序,指出其中的语法错误;必要时,可生成内部形式,便于下一阶段处理。科学管理合理组织,不断深化“双基”建设,狠抓安全技术教育培训工作,全面落实“手指口述安全确认操作、岗位描述”安全管理规范,提高全员安全责任意识和整体操作技能。