编译原理 实验3 递归下降语法分析程序设计

来源:互联网 发布:n个球放入m个盒子C语言 编辑:程序博客网 时间:2024/05/19 02:23
实验目的】
       练习构造递归下降语法分析程序的方法,熟悉上下文无关文法的使用,加深对课堂教学的理解;提高语法分析方法的实践能力
【实验要求】
    利用某一高级程序设计语言构造语法分析程序  
【具体要求】对于给定的文法G[E]
              E->TE’
             E’->+TE’ | ε
            T->FT’
            T’->*F T’| ε
            F->(E) | i
     采用递归下降语法分析法编写语法分析程序,该语法分析程序判断输入的字符串是否符合上述文法,并能够输出相应的结果(是语法成分或不是语法成分)。
 
#include<stdio.h>/*     实验名称:实验3  递归下降语法分析程序设计     学号:     姓名:niu91(859222829)     班级: */#include<string>char str[10];int index=0;void E();//E->TX;void X();//X->+TX | evoid T();//T->FYvoid Y();//Y->*FY | evoid F();//F->(E) | iint main(){int len;int m;printf("请输入要测试的次数:");scanf("%d",&m);while(m--){printf("请输入算数表达式:");scanf("%s",str);len=strlen(str);str[len]='#';str[len+1]='\0';E();printf("正确语句!\n");strcpy(str,"");index=0;}return 0;}void E(){    T();    X();}void X(){if(str[index]=='+'){    index++;T();X();} }void T(){F();Y();}void Y(){if(str[index]=='*'){        index++;F();Y();}}void F(){if(str[index]=='i'){index++;}else if (str[index]=='('){ index++;E();if(str[index]==')'){index++; }else{printf("\n分析失败!\n");exit (0);}} else{printf("分析失败!\n"); exit(0);} }

 


原创粉丝点击