我是靠谱客的博主 甜甜鞋垫,最近开发中收集的这篇文章主要介绍利用递归下降分析方法完成语法分析,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、 程序设计题目与说明

利用递归下降分析方法完成语法分析。
递归下降分析法是一种自顶向下的分析方法,文法的每个非终结符对应一个递归过程(函数)。分析过程就是从文法开始符出发执行一组递归过程(函数),这样向下推导直到推出句子;或者说从根节点出发,自顶向下为输入串寻找一个最左匹配序列,建立一棵语法树。
在不含左递归和每个非终结符的所有候选终结首字符集都两两不相交条件下,我们就可能构造出一个不带回溯的自顶向下的分析程序,这个分析程序是由一组递归过程(或函数)组成的,每个过程(或函数)对应文法的而一个非终结符。这样的一个分析程序称为递归下降分析器。

二、 核心代码(或全部代码)

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//递归向下分析方法 识别输入串是不是文法G的句子

//如果分析能够达到:所有的非终结符都将展开为终结符并得到匹配 
//否则表明输入符号串有语法错误 
int index = 0;
char str[50];

void E();                //E->TX;
void X();                //X->+TX | e
void T();                //T->FY
void Y();                //Y->*FY | e
void F();                //F->(E) | i


int main() {              
    int len;
//  int m;
//  printf("请输入要测试的次数:");
//  scanf("%d",&m);
//  while(m--) {
//      printf("请输入字符串(长度<50>):n");
//      scanf("%s",str);
//      len=strlen(str);
//      str[len+1]='';
//      E();
//      printf("%s为合法符号串!n",str);
//      strcpy(str,"");
//      index=0;
//  }
        printf("请输入符号串:n");
        scanf("%s",str);
        len=strlen(str);
        str[len+1]='';
        E();
        printf("%s为合法句子!n",str);
    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);
    }
}

三、 测试数据和实验结果分析
合法的句子

非法的句子

非法的句子

四、体会与收获
递归下降分析是直接以程序的方式模拟产生式产生语言的过程。它的基本思想是:为每个非终结符构造一个子程序,每个子程序的函数体按非终结符的候选式分情况展开,遇到终结符直接匹配,遇到非终结符就调用相应的非终结符的子程序。

最后

以上就是甜甜鞋垫为你收集整理的利用递归下降分析方法完成语法分析的全部内容,希望文章能够帮你解决利用递归下降分析方法完成语法分析所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(33)

评论列表共有 0 条评论

立即
投稿
返回
顶部