• 1217 实验四 递归下降语法分析程序设计


    #include<stdio.h>  
    #include<string>  
    char str[10];  
    int index=0;  
    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;  
            printf("请输入表达式:");  
            scanf("%s",str);  
            len=strlen(str);  
            str[len]='#';  
            str[len+1]='';  
            E();  
            printf("是正确的表达式");  
            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("
    分析失败!
    ");  
                exit (0);  
            }  
        }   
        else{  
            printf("分析失败!
    ");   
            exit(0);  
        }  
     }  

     

    1.实验目的

    练习构造语法分析程序,熟悉上下文无关文法的使用,加深对递归下降分析算法的理解;提高语法分析方法的实践能力。

     

     2.      实验要求

    在词法分析程序的基础上,进一步构造语法分析程序 。

     

     3.      实验思想

    •   确定的自上而下分析法,要求文法是LL(1)文法
    •   词法分析程序scaner( )一次识别一个单词;
    •   错误处理函数error( )
    •   基本思想:对文法中的每个非终结符编写一个函数,每个函数的功能是识别由该非终结符所表示的语法成分。
    •   每个函数名是相应的非终结符,函数体是根据右部符号串的结构编写。
    •   当遇到终结符时,则编写语句  if(当前读入的符号==a)则读入下一个符号
    •   当遇到非终结符A时,则编写语句调用A( )
    •   当遇到规则A→ε时,则编写语句调用  if(当前读入的符号∉ FOLLOW(A))error( )

     

    4.      实验内容:

    •  对于给定的文法G[E] :

    E→E+T|E-T|T
    T→T*F| T/F|F
    F→(E)|i

    •  消除左递归后的文法是:

    ......

    • 是否是LL(1)文法?

    ......

     

    ......

    4.实验结果

    采用递归下降语法分析法编写表达式的语法分析程序,该语法分析程序判断输入的表达式是否符合上述文法。

    输入一个表达式,能够输出相应的语法结果(“是正确的表达式”或 错在哪里)。

    例如:输入 5+3*a,就应该输出 “是正确的表达式”;

             输入5+5a,或者5*+3,都有语法错误。

  • 相关阅读:
    SpringMVC中web.xml中url配置路径 / 和 /* 的区别
    spring mvc @RequestMapping method 不写的话,默认GET、POST都支持,根据前端方式自动适应
    MyBatis项目所引用的一切依赖jar包和自定义设置
    Python 代码性能优化技巧
    linux basic commands
    linuxx virutal machine installation
    安装 Django
    virtualenv (isolated virtual environment) for python runtime
    夜间模式的开启与关闭,父模板的制作
    完成登录与注册页面的前端
  • 原文地址:https://www.cnblogs.com/hgf520/p/5092007.html
Copyright © 2020-2023  润新知