• 大小: 44KB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2021-07-04
  • 语言: C/C++
  • 标签: 递归下降  

资源简介

通过C语言编写一个语法分析器采用递归下降分析法编写语法分析程序及LL(1)语法分析法编写语法分析程序。附上实验报告。

资源截图

代码片段和文件信息

#include  
#include  
#include  
#define N 100  
  
int seekProd(int stackTopint inputstrTop);  
//char inputstr[10]=“i*i+i#“;  
char inputstr[20];  
char stack[10]=““;  
  
typedef struct production{  
    char leftChar;  
    char rightChars[4];  
    char allChars[8];  
}Prod;  
  
Prod productions[8];  
void init();  
int stackPush(int *top Prod prod);  
int matching(int *top char *inputstr);  
int main()  
{  
    int len;//输入串的长度  
    int stackTop=1;  
    int inputstrTop=0;  
    int i;  
    char *z=“#“;  
    int index=0;  
  
      
    init();//产生式初始化  
      
    stack[0]=‘#‘;  
    stack[stackTop]=‘E‘;  
    printf(“请输入字符串:“);  
    gets(inputstr);  
      
    len=strlen(inputstr);  
    inputstr[len]=‘#‘;  
    while( stackTop>=0 )  
    {  
    //  printf(“%d%d\n“stackTopinputstrTop);  
        printf(“第%2d步:“++index);  
        printf(“当前栈:%-8s“stack);  
        printf(“输入字符串:%8s“inputstr);  
        //根据栈定元素和字符串首字母  
          
        if(matching(&stackTopinputstr)){  
            printf(“\n“);  
        }else{  
            i=seekProd(stackTopinputstrTop);  
            stackPush(&stackTopproductions[i]);//压栈  
            printf(“进行下一步所用的产生式:%s\n“productions[i].allChars);  
        }         
    }  
    if(stackTop+1==0)  
    {  
        printf(“分析成功!\n“);  
    }  
  
    return 0;  
}  
  
//搜索分析表  
int seekProd(int stackTopint inputstrTop)  
{  
//  printf(“stack[stackTop]=%c\n“stack[stackTop]);  
    if(stack[stackTop]==‘E‘){  
        if(inputstr[inputstrTop]==‘i‘)  
        {  
            return 0;  
        }else if(inputstr[inputstrTop]==‘(‘){  
            return 0;  
        }else{  
            return -1;  
        }  
    }else if(stack[stackTop]==‘X‘){  
        if(inputstr[inputstrTop]==‘+‘)  
        {  
            return 1;  
        }else if(inputstr[inputstrTop]==‘)‘){  
            return 2;  
        }else if(inputstr[inputstrTop]==‘#‘){  
            return 2;  
        }else{  
            return -1;  
        }  
    }else if(stack[stackTop]==‘T‘){  
        if(inputstr[inputstrTop]==‘i‘)  
        {  
            return 3;  
        }else if(inputstr[inputstrTop]==‘(‘){  
            return 3;  
        }else{  
            return -1;  
        }  
    }else if(stack[stackTop]==‘Y‘){  
        if(inputstr[inputstrTop]==‘+‘)  
        {  
            return 5;  
        }else if(inputstr[inputstrTop]==‘*‘){  
            return 4;  
        }else if(inputstr[inputstrTop]==‘)‘){  
            return 5;  
        }else if(inputstr[inputstrTop]==‘#‘){  
            return 5;  
        }else{  
            return -1;  
        }  
    }else if(stack[stackTop]==‘F‘){  
        if(inputstr[inputstrTop]==‘i‘){  
            return 7;  
        }else if(inputstr[inputstrTop]==‘(‘){  
            return 6;  
        }else{  
            return -1;  

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2017-04-17 16:13  语法分析器\
     文件        4907  2017-04-17 16:13  语法分析器\语法分析器代码.c
     文件       75776  2017-04-12 22:49  语法分析器\语法分析器实验报告.doc

评论

共有 条评论