设为首页 加入收藏

TOP

编译原理递归下降分析法(一)
2013-11-20 14:23:25 来源: 作者: 【 】 浏览:420
Tags:编译 原理 下降 分析法

    今天我们来看看编译原理中的递归下降分析法,费话就不多说了,直接上代码了:
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    char prog[80],token ;
    char ch;
    int syn=-1,p,t;
    void scanner();
    void statement();
    void expression_r();
    void term();
    void factor();
    void getcha()
    {
    ch=prog[p++];
    }
    void getbc()
    {
    while(prog[p]==' ')
    p++;
    getcha();
    }
    void concat()
    {
    token[t++]=ch;
    }
    bool letter(char ch)
    {
    if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
    return true;
    return false;
    }
    bool digit(char ch)
    {
    if(ch>='0'&&ch<='9')
    return true;
    return false;
    }
    int reserve()
    {
    token[t++]='\0';
    if(strcmp(token,"begin")==0) return 1;
    if(strcmp(token,"end")==0) return 6;
    if(strcmp(token,"if")==0) return 2;
    if(strcmp(token,"then")==0) return 3;
    if(strcmp(token,"else")==0) return 7;
    if(strcmp(token,"while")==0) return 4;
    if(strcmp(token,"do")==0) return 5;
    return 10;
    }
    void retract()
    {
    p--;
    }
    int dtb()
    {
    token[t++]='\0';
    int i=atoi(token);
    return i;
    }
    void Irparse()
    {
    scanner();
    statement();
    while(syn==26)//;
    {
    scanner();
    statement();
    }
    }
    void statement()
    {
    if(syn==10)
    {
    scanner();
    if(syn==18)
    {
    scanner();
    expression_r();
    }
    else
    {
    printf("语法分析出错! 请检查表达式是否含:=\n");return ;
    }
    }
    else
    {
    //printf("语法分析出错!  请检查语句是否正确\n");return 0;
    }
    }
    void expression_r()
    {
    term();
    while(syn==13||syn==14)//+ -
    {
    scanner();
    term();
    }
    }
    void term()
    {
    factor();
    while(syn==15||syn==16)//* /
    {
    scanner();
    factor();
    }
    }
    void factor()
    {
    if(syn==10||syn==11)
    {
    scanner();
    }
    else if(syn==27)
    {
    scanner();
    expression_r();
    if(syn==28)
    {
    scanner();
    }
    else {printf("语法分析出错! 请检查是否缺少')'\n");return;}
    }
    else {printf("语法分析出错! 请检查是否输入非法字符\n");return;}
    }

   

首页 上一页 1 2 3 4 5 6 下一页 尾页 1/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++中字符串两次翻转 下一篇C++ 获得文件大小的方法

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·C++ 语言社区-CSDN社 (2025-12-24 17:48:24)
·CSDN问答专区社区-CS (2025-12-24 17:48:22)
·C++中`a = b = c`与` (2025-12-24 17:48:19)
·C语言结构体怎么直接 (2025-12-24 17:19:44)
·为什么指针作为c语言 (2025-12-24 17:19:41)